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.13 2007/10/22 12:08:19 ingo 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.created = time;
0036 p = class(p, 'zero');
0037 end
0038
0039
0040
0041
0042 if nargin == 0
0043
0044 p = init();
0045
0046 elseif nargin == 1
0047
0048
0049 if isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl')
0050 p = fromxml(varargin{1});
0051
0052 elseif ischar(varargin{1})
0053
0054 filename = varargin{1};
0055 [path, name, ext, vers] = fileparts(filename);
0056 switch ext
0057 case '.mat'
0058 p = load(filename);
0059 case '.xml'
0060 p = xmlparse(zero, filename);
0061 otherwise
0062 error('### Unknown file type.');
0063 end
0064
0065
0066
0067 elseif isnumeric(varargin{1})
0068
0069 p = init();
0070
0071 if isreal(varargin{1})
0072 p.name = 'real zero';
0073 p.f = varargin{1};
0074 p.q = NaN;
0075 p.ri = pfq2ri(p.f);
0076
0077 else
0078 p.name = 'complex zero';
0079 [p.f, p.q] = pri2fq(varargin{1});
0080 p.ri = [varargin{1} conj(varargin{1})];
0081 end
0082
0083
0084 elseif isstruct(varargin{1})
0085
0086 p = init();
0087
0088 fields = fieldnames(varargin{1});
0089 for ii = 1:length(fields)
0090 field = fields{ii};
0091 try
0092 p.(field) = varargin{1}.(field);
0093 catch
0094 error('### The field ''%s'' in the struct is not a zero property.', field)
0095 end
0096 end
0097
0098
0099 elseif isa(varargin{1}, 'plist')
0100
0101 p = init();
0102 p = zeroFromPlist(p, varargin{1});
0103
0104
0105 elseif isa(varargin{1}, 'zero')
0106 p = varargin{1};
0107
0108 else
0109 error('### unknown constructor method for zero class.');
0110 end
0111
0112 elseif nargin == 2
0113
0114 if isa(varargin{1}, 'database')
0115 p = retrieve(varargin{1}, varargin{2:end});
0116
0117 elseif isnumeric(varargin{1}) && isnumeric(varargin{2})
0118
0119 p = init();
0120 if isnan(varargin{2})
0121 p.name = 'real zero';
0122 else
0123 p.name = 'complex zero';
0124 end
0125 p.f = varargin{1};
0126 p.q = varargin{2};
0127 p.ri = pfq2ri(p.f, p.q);
0128
0129 else
0130 error('### unknown constructor method for zero class.');
0131 end
0132
0133 end
0134
0135
0136
0137
0138 function p = zeroFromPlist(p, pl)
0139
0140 f = find(pl, 'f');
0141 q = find(pl, 'q');
0142 ri = find(pl, 'ri');
0143
0144 name = find(pl, 'name');
0145 version = find(pl, 'version');
0146 created = find(pl, 'created');
0147
0148 if ~isempty(f)
0149 if ~isempty(q)
0150
0151 if isnan(q)
0152 p.name = 'real zero';
0153 else
0154 p.name = 'complex zero';
0155 end
0156 p.f = f;
0157 p.q = q;
0158 p.ri = pfq2ri(p.f, p.q);
0159
0160 else
0161
0162 p.name = 'real zero';
0163 p.f = f;
0164 p.q = NaN;
0165 p.ri = pfq2ri(p.f);
0166
0167 end
0168 elseif ~isempty(ri)
0169
0170 p.name = 'complex zero';
0171 [p.f, p.q] = pri2fq(ri);
0172 p.ri = ri;
0173
0174 else
0175 error('### unknown constructor method for zero class.');
0176 end
0177
0178
0179 if ~isempty(name)
0180 p.name = name;
0181 end
0182 if ~isempty(version)
0183 p.version = version;
0184 end
0185 if ~isempty(created)
0186 p.created = created;
0187 end
0188
0189 end
0190
0191
0192 end
0193