Code covered by the BSD License  

Highlights from
Phasor/Polar Data Type

from Phasor/Polar Data Type by Timothy Felty
Implementation of Phasor/Polar data type and associated functions

phasor(varargin)
function phas = phasor(varargin)
% phasor Constructor function for phasor object
% phas = phasor(magnitude,angle) or phasor([magnitude angle])
% version 3
switch nargin
case 0
% if no input arguments, create a default object
   phas.mag=0;
   phas.angle=0;
   phas = class(phas,'phasor');  
case 1
% if single argument of class phasor, return it
%if single arguement of numeric class and is a vector
%cast as phasor p=phasor([x y])
  if (isa(varargin{1},'phasor'))
      phas = varargin{1};
  elseif(isa(varargin{1},'numeric'))
      [rows,cols]=size(varargin{1});
      if (cols==2)
        if (rows==1)
          phas.mag=varargin{1}(1,1);
          phas.angle=varargin{1}(1,2);
          if phas.mag==0 
              phas.angle=0;
          end
          phas=class(phas,'phasor');
        else %creates phasor array
          for k=1:rows
              phas(k).mag=varargin{1}(k,1);
              phas(k).angle=varargin{1}(k,2);
              if phas(k).mag == 0
                  phas(k).angle =0;
              end
          end
          phas=class(phas,'phasor');
          phas=phas';
        end
       else
          error('Wrong argument type')
       end
   else 
      error('Wrong argument type')
   end 
case 2
   if (ndims(varargin{1})>2 || ndims(varargin{2})>2)
       error('Phasor constructor only supporsts 2D arrays')
   end
   [rows1,cols1]=size(varargin{1});
   [rows2,cols2]=size(varargin{2});
   if (isa(varargin{1},'numeric') && isa(varargin{2},'numeric'))
    if (numel(varargin{1})==1 && numel(varargin{2})==1)   
      % 2 create object using specified values
      phas.mag = varargin{1};
      phas.angle = varargin{2};
      if phas.mag==0
          phas.angle=0;
      end
      phas = class(phas,'phasor');
    elseif isequal(size(varargin{1}),size(varargin{2})) && cols1==1
        %two column arrays with the same length
        for k=1:length(varargin{1})
            phas(k).mag=varargin{1}(k);
            phas(k).angle=varargin{2}(k);
            if phas(k).mag==0
                phas(k).angle=0;
            end
        end
        phas=class(phas,'phasor');
        phas=phas';
    elseif isequal(size(varargin{1}),size(varargin{2})) && cols1~=1    
        %two 2D arrays are passed in
        for k=1:rows1
            for m=1:cols1
                phas(k,m).mag=varargin{1}(k,m);
                phas(k,m).angle=varargin{2}(k,m);
                if phas(k,m).mag==0
                    phas(k,m).angle=0;
                end
            end
        end
        phas=class(phas,'phasor');
    elseif ~isequal(size(varargin{1}),size(varargin{2}))
        error('Input values must be same size')
    else
        error('Input format not supported');
    end
   else
      error('Input format not supported');
   end
otherwise
   error('Wrong number of input arguments')
end

Contact us at files@mathworks.com