lsqcurvefit
要么lsqnonlin
这个例子说明如何使用适合于数据的功能lsqcurvefit
和...一起多头
。该示例的端示出了使用相同的溶液lsqnonlin
。
很多装修问题有多种解决方案的地方。金宝搏官方网站多头
可以帮助寻找全球性解决方案,这意味着最合适的。本示例首先使用lsqcurvefit
由于其方便的语法。
该模型是
其中输入数据是 和参数 , , 和 是未知的模型系数。
编写匿名函数,需要一个数据矩阵XDATA
同ñ
行和两列,并返回一个响应向量ñ
行。该功能还需要一个系数矩阵p
中,对应于系数矢量
。
fitfcn = @(P,XDATA)P(1)+ P(2)* XDATA(:,1)* SIN(P(3)* XDATA(:,2)+ P(4));
创建200个数据点和响应。使用值 。在响应中包含的随机噪声。
RNG默认%用于重现N = 200;数据点的数量%PREAL = [-3,1 / 4,1 / 2,1];%实系数XDATA = 5 *兰特(N,2);% 数据点YDATA = fitfcn(PREAL,XDATA)+ 0.1 * randn(N,1);%与噪声响应数据
对于设置界限lsqcurvefit
。没有理由
超过
在绝对值,因为正弦函数在宽的任何时间间隔将在其全部范围值
。假设系数
必须在绝对值小于20,因为允许高频可能导致不稳定的反应或不准确的收敛。
磅= [-Inf,-Inf,-20,-pi];UB = [天道酬勤,天道酬勤,20,PI];
任意设定的初始点(5,5,5,0)。
P0 = 5个*也是(1,4);%任意初始点P0(4)= 0;%确保初始点满足边界
适合的参数的数据,起始于P0
。
[xfitted,errorfitted] = lsqcurvefit(fitfcn,P0,XDATA,YDATA,LB,UB)
当地最小的可能。lsqcurvefit停止,因为在相对于其初始值的平方和最终的变化小于函数允差值。
xfitted =1×4-2.6149 -0.0238 6.0191 -1.6998
errorfitted = 28.2524
lsqcurvefit
找到本地的解决方案,没有特别的靠近模型参数值(-3,1 / 4,1 / 2,1)。
多头
。创建一个问题结构,多头
可以解决同样的问题。
问题= createOptimProblem('lsqcurvefit','X0',P0,'目的',fitfcn,...'磅',磅,'UB',UB,“外部数据”,XDATA,'YDATA',YDATA);
解决使用拟合问题多头
50次迭代。绘制最小误差的数多头
迭代。
MS =多头('PlotFcns',@ gsplotbestf);[x多重测光,errormulti] =运行(毫秒,问题,50)
多头完成了从全部开始点运行。所有50个当地求解器运行融合以积极的局部解算器出口标志。
x多重测光=1×4-2.9852 -0.2472 -0.4968 -1.0438
errormulti = 1.6464
多头
发现附近的参数值的全局溶液(-3,-1 / 4,-1 / 2,-1)。(这相当于近的溶液PREAL
=(-3,1 / 4,1 / 2,1),因为变化的所有的系数的符号以外的第一给出的相同的数值fitfcn
。)的残余误差的范数降低从约28至约1.6,比10倍更多的降低。
lsqnonlin
对于另一种方法,使用lsqnonlin
作为拟合函数。在这种情况下,使用作为目标函数的预测值和实际的数据值之间的差。
fitfcn2 = @(p)的fitfcn(P,XDATA)-ydata;[xlsqnonlin,errorlsqnonlin] = lsqnonlin(fitfcn2,P0,LB,UB)
当地最小的可能。lsqnonlin停止,因为在相对于其初始值的平方和最终的变化小于函数允差值。
xlsqnonlin =1×4-2.6149 -0.0238 6.0191 -1.6998
errorlsqnonlin = 28.2524
从相同的初始点开始P0
,lsqnonlin
查找相同的相对较差的溶液作为lsqcurvefit
。
跑多头
运用lsqnonlin
作为当地的求解。
problem2 = createOptimProblem('lsqnonlin','X0',P0,'目的',fitfcn2,...'磅',磅,'UB',UB');[xmultinonlin,errormultinonlin] =运行(MS,problem2,50)
多头完成了从全部开始点运行。所有50个当地求解器运行融合以积极的局部解算器出口标志。
xmultinonlin =1×4-2.9852 -0.2472 -0.4968 -1.0438
errormultinonlin = 1.6464
再次,多头
发现比单独的本地求解一个更好的解决方案。