非线性最小二乘没有和包括雅可比矩阵
这个例子展示了如何解决非线性最小二乘问题在两个方面。这个例子首先解决问题而不使用雅可比矩阵函数。然后展示如何包括雅可比矩阵,并说明产生的提高效率。
问题10与两个未知数:找到x一个二维向量,最小化
开始的时候x0 = [0.3, 0.4]
。
因为lsqnonlin
假设平方和没有显式地形成在用户函数,函数传递给lsqnonlin
必须计算向量值函数
为k= 1到10(也就是说,F必须有10个组件)。
解决问题不雅可比矩阵
辅助函数myfun
定义这个例子实现了向量值没有导数信息的目标函数。解决最小化从点开始x0
。
x0 = [0.3, 0.4];%开始猜[x, resnorm res, eflag,输出]= lsqnonlin (x0 @myfun);%调用优化器
局部最小值。lsqnonlin停止因为当前步骤的大小小于步长值的宽容。
检查解决方案和功能评估的数量。
disp (x)
0.2578 - 0.2578
disp (resnorm)
124.3622
disp (output.funcCount)
72年
解决的问题包括雅可比矩阵
目标函数很简单,你可以计算它的雅可比矩阵。定义之后雅克比向量函数的,代表了雅可比矩阵函数矩阵
在这里, 是k组件的目标函数。这个例子
所以
辅助函数myfun2
定义这个例子实现了目标函数与雅可比矩阵。所以解决使用雅可比矩阵设置选项。
选择= optimoptions (@lsqnonlin,“SpecifyObjectiveGradient”,真正的);
运行的能手。
磅= [];%是没有界限的乌兰巴托= [];(x2, resnorm2,它、eflag2 output2] = lsqnonlin (x0, @myfun2磅,乌兰巴托,选择);
局部最小值。lsqnonlin停止因为当前步骤的大小小于步长值的宽容。
解决方案是一样的以前的解决方案。
disp (x2)
0.2578 - 0.2578
disp (resnorm2)
124.3622
使用雅可比矩阵的优势是,解算器有许多少功能评估。
disp (output2.funcCount)
24
辅助函数
这段代码创建了myfun
helper函数。
函数F = myfun (x) k = 1:10;F = 2 + 2 * k-exp (k * x (1)) exp (k * x (2));结束
这段代码创建了myfun2
helper函数。
函数F [J] = myfun2 (x) k = 1:10;F = 2 + 2 * k-exp (k * x (1)) exp (k * x (2));如果nargout > 1 J = 0 (10, 2);J (k, 1) = - k。* exp (k * x (1));J (k, 2) = - k。* exp (k * x (2));结束结束