适合一个复数的数据模型
这个例子展示了如何执行复数数据的非线性拟合。虽然大多数优化工具箱™解决方案和算法只能按实值数据,解决最小二乘和fsolve
可以工作在两个实值和复数数据无约束问题。目标函数必须复杂功能意义上的分析。
不设置FunValCheck
选项“上”
当使用复杂的数据。解决错误。不使用“内点”
算法与lsqcurvefit
或lsqnonlin
;该算法主要是用于处理约束和没有使用复杂的数据进行验证。
数据模型
数据模型是一个简单的指数:
的输入数据,响应,是一个复数向量的系数。我们的目标是估计从和嘈杂的观察。数据模型分析,因此您可以使用它在一个复杂的解决方案。
人工数据和噪声
生成人工数据模型。把复杂的系数向量作为[2,3 + 4我;闲置+ .4i]
。的观察指数分布。当噪声添加到响应。
rng默认的%的再现性N = 100;%的观察v0 =[2, 3 + 4我;闲置+ .4i];%系数向量xdata =日志(兰德(N, 1));%指数分布noisedata = randn (N, 1)。* exp((我* randn (N - 1)));%复杂噪声cplxydata = v0 (1) + v0 (2) . * exp (v0 (3) * xdata) + noisedata;
符合模型恢复系数向量
响应预测的数据模型之间的差异,观察(xdata
为和响应cplxydata
为)是:
objfcn = @ (v) v (1) + (2) * exp (v (3) * xdata) - cplxydata;
使用lsqnonlin
或lsqcurvefit
适合的模型数据。这个例子首先使用lsqnonlin
。
选择= optimoptions (@lsqnonlin,“显示”,“关闭”);x0 = (1 + 1) * (1, 1, 1);%任意初始猜测[vestimated, resnorm,残差、exitflag、输出]= lsqnonlin (x0, objfcn[],[],选择);vestimated、resnorm exitflag output.firstorderopt
vestimated 2.7399 + 3.8012 = 2.1582 + 0.1351我我resnorm -0.5338 + 0.4660 = 100.9933 exitflag = 3 = 0.0018
lsqnonlin
复苏大约一个有效数字的复杂系数向量。剩余的标准是相当大的,这表明噪音防止模型拟合所有的观察。出口标志3
,而不是更好的1
,因为一阶最优性措施1 e - 3
,不低于1 e-6
。
替代方案:用lsqcurvefit
适合使用lsqcurvefit
,写模型给予响应,而不是反应-响应数据。
xdata objfcn = @ (v) v (1) + (2) * exp (v (3) * xdata);
使用lsqcurvefit
选项和语法。
选择= optimoptions (@lsqcurvefit、选择);%重用选项[vestimated, resnorm] = lsqcurvefit (x0, objfcn xdata, cplxydata,[],[],选择)
vestimated 2.7399 + 3.8012 = 2.1582 + 0.1351我我resnorm -0.5338 + 0.4660 = 100.9933
匹配的结果lsqnonlin
,因为底层算法是相同的。你使用哪个解算器找到更方便。
选择:分裂实部和虚部
包括边界,或者干脆完全呆在真正的价值,你可以真正的和复杂的部分系数分割成单独的变量。对于这个问题,分离系数如下:
写的响应函数lsqcurvefit
。
函数你= cplxreal (v, xdata)你= 0(长度(xdata), 2);%分配你expcoef = exp (v (5) * xdata (:));%级coscoef = cos (v (6) * xdata (:));%的余弦项sincoef =罪(v (6) * xdata (:));%的罪项你(:1)= v (1) + expcoef。* (v (3) * coscoef - v (4) * sincoef);你(:,2)= v (2) + expcoef。* * coscoef + v (v (4) (3) * sincoef);
将该代码保存为文件cplxreal.m
在你的MATLAB®路径。
响应数据分割成它的实部和虚部。
ydata2 =[真实(cplxydata),图像放大(cplxydata)];
的系数向量v
现在有六个维度。所有的初始化它,使用解决问题lsqcurvefit
。
x0 = 1 (6,1);[vestimated, resnorm,残差、exitflag、输出]=…lsqcurvefit (x0, @cplxreal xdata ydata2);vestimated、resnorm exitflag output.firstorderopt
局部最小值。lsqcurvefit停止是因为最后的平方和的变化相对于其初始值小于公差的值函数。vestimated = 2.1582 0.1351 2.7399 3.8012 -0.5338 0.4660 resnorm = 100.9933 exitflag = 3 = 0.0018
解释six-element向量vestimated
三元素复杂的矢量,你会发现解决方案是几乎一样的以前的解决方案。金宝搏官方网站