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