主要内容

非线性最小二乘没有和包括雅可比矩阵

这个例子展示了如何解决非线性最小二乘问题在两个方面。这个例子首先解决问题而不使用雅可比矩阵函数。然后展示如何包括雅可比矩阵,并说明产生的提高效率。

问题10与两个未知数:找到x一个二维向量,最小化

k = 1 1 0 ( 2 + 2 k - - - - - - e k x 1 - - - - - - e k x 2 ) 2 ,

开始的时候x0 = [0.3, 0.4]

因为lsqnonlin假设平方和没有显式地形成在用户函数,函数传递给lsqnonlin必须计算向量值函数

F k ( x ) = 2 + 2 k - - - - - - e k x 1 - - - - - - e k x 2 ,

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年

解决的问题包括雅可比矩阵

目标函数很简单,你可以计算它的雅可比矩阵。定义之后雅克比向量函数的,代表了雅可比矩阵函数矩阵

J k j ( x ) = F k ( x ) x j

在这里, F k ( x ) k组件的目标函数。这个例子

F k ( x ) = 2 + 2 k - - - - - - e k x 1 - - - - - - e k x 2 ,

所以

J k 1 ( x ) = - - - - - - k e k x 1 J k 2 ( x ) = - - - - - - k e k x 2

辅助函数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

辅助函数

这段代码创建了myfunhelper函数。

函数F = myfun (x) k = 1:10;F = 2 + 2 * k-exp (k * x (1)) exp (k * x (2));结束

这段代码创建了myfun2helper函数。

函数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));结束结束

相关的话题