0001 function p = zero(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 ALGONAME = mfilename;
0025 VERSION = '$Id: zero.m,v 1.9 2007/08/31 17:40:08 hewitson Exp $';
0026
0027
0028
0029 function p = init()
0030 p.name = 'not defined';
0031 p.f = NaN;
0032 p.q = NaN;
0033 p.ri = NaN;
0034 p.version = VERSION;
0035 p = class(p, 'zero');
0036 end
0037
0038
0039
0040
0041 if nargin == 0
0042
0043 p = init();
0044
0045 elseif nargin == 1
0046
0047
0048 if isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl')
0049 p = fromxml(varargin{1});
0050
0051 elseif ischar(varargin{1})
0052
0053 filename = varargin{1};
0054 [path, name, ext, vers] = fileparts(filename);
0055 switch ext
0056 case '.mat'
0057 p = load(filename);
0058 case '.xml'
0059 p = xmlparse(zero, filename);
0060 otherwise
0061 error('### Unknown file type.');
0062 end
0063
0064
0065
0066 elseif isnumeric(varargin{1})
0067
0068 p = init();
0069
0070 if isreal(varargin{1})
0071 p.name = 'real zero';
0072 p.f = varargin{1};
0073 p.q = NaN;
0074 p.ri = pfq2ri(p.f);
0075
0076 else
0077 p.name = 'complex zero';
0078 [p.f, p.q] = pri2fq(varargin{1});
0079 p.ri = [varargin{1} conj(varargin{1})];
0080 end
0081
0082
0083 elseif isstruct(varargin{1})
0084
0085 p = init();
0086
0087 fields = fieldnames(varargin{1});
0088 for ii = 1:length(fields)
0089 field = fields{ii};
0090 try
0091 p.(field) = varargin{1}.(field);
0092 catch
0093 error('### The field ''%s'' in the struct is not a zero property.', field)
0094 end
0095 end
0096
0097
0098 elseif isa(varargin{1}, 'plist')
0099
0100 p = init();
0101 p = zeroFromPlist(p, varargin{1});
0102
0103
0104 elseif isa(varargin{1}, 'zero')
0105 p = varargin{1};
0106
0107 else
0108 error('### unknown constructor method for zero class.');
0109 end
0110
0111 elseif nargin == 2
0112
0113 if isa(varargin{1}, 'database')
0114 p = retrieve(varargin{1}, varargin{2:end});
0115
0116 elseif isnumeric(varargin{1}) && isnumeric(varargin{2})
0117
0118 p = init();
0119 p.name = 'complex zero';
0120 p.f = varargin{1};
0121 p.q = varargin{2};
0122 p.ri = pfq2ri(p.f, p.q);
0123
0124 else
0125 error('### unknown constructor method for zero class.');
0126 end
0127
0128 end
0129
0130
0131
0132
0133 function p = zeroFromPlist(p, pl)
0134
0135 f = find(pl, 'f');
0136 q = find(pl, 'q');
0137 ri = find(pl, 'ri');
0138
0139 if ~isempty(f)
0140 if ~isempty(q)
0141
0142 p.name = 'complex zero';
0143 p.f = f;
0144 p.q = q;
0145 p.ri = pfq2ri(p.f, p.q);
0146
0147 else
0148
0149 p.name = 'real zero';
0150 p.f = f;
0151 p.q = NaN;
0152 p.ri = pfq2ri(p.f);
0153
0154 end
0155 elseif ~isempty(ri)
0156
0157 p.name = 'complex zero';
0158 [p.f, p.q] = pri2fq(ri);
0159 p.ri = ri;
0160
0161 else
0162 error('### unknown constructor method for zero class.');
0163 end
0164 end
0165
0166
0167 end
0168