​利用MATLAB优化工具箱解决如下的最小二乘问题:

​利用MATLAB优化工具箱解决如下的最小二乘问题:,第1张

这个题目本质上就是个二次函数的求极值问题。

(1)首先将式子化简

如图

(2)代入下列函数中函数中

2.1 最速下降法子函数(代码)

2.2 拟牛顿法(对秩1  子函数代码)

2.3 BFGS子函数代码

2.3 DFP(子函数代码)

(3)上述过程包含了计算的步骤,可以用optimtool设置方法来求解并得到过程。本来想给你结果的,分数太少,就不写上去了。

>>clear

>>f=inline('a(1)*x+a(2)*x.^2.*exp(-a(3)*x)+a(4)','a','x')

x=[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]

y=[2.3201 2.6470 2.9707 3.2885 3.6008 3.9090 4.2147 4.5191 4.8232 5.1275]

[xx,res]=lsqcurvefit(f,ones(1,4),x,y)

xx',res

要建立也是可以的。就是把上面那个inline弄成.m

如下:

在Matlab下输入:edit zhidao_15.m,然后将下面两行百分号之间的内容,复制进去,保存

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function y=zhidao_15(a,x)

y=a(1)*x+a(2)*x.^2.*exp(-a(3)*x)+a(4)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

在Matlab下面输入:

x=[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]

y=[2.3201 2.6470 2.9707 3.2885 3.6008 3.9090 4.2147 4.5191 4.8232 5.1275]

[xx,res]=lsqcurvefit('zhidao_15',ones(1,4),x,y)

xx',res

您好,un为目标函数,它可用前面的方法定义;

x0为初始值;

A、b满足线性不等式约束 ,若没有不等式约束,则取A=[ ],b=[ ];

Aeq、beq满足等式约束 ,若没有,则取Aeq=[ ],beq=[ ];

lb、ub满足 ,若没有界,可设lb=[ ],ub=[ ];

nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的估计C和Ceq,通过指定函数柄来使用,如:>>x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)

C = …

% 计算x处的非线性不等约束 的函数值。

Ceq = …

% 计算x处的非线性等式约束 的函数值。

lambda是Lagrange乘子,它体现哪一个约束有效。

output输出优化信息;

grad表示目标函数在x处的梯度;

hessian表示目标函数在x处的Hessiab值。

注意:

1. fmincon 函数提供了大型优化算法和中型优化算法。默认时,若在 fun 函数中提供了梯度(options 参数的 GeadObj 设置为 'on'),并且只有上下界存在或只有等式约束,fmincon 函数将选择大型算法。 当既有等式约束又有梯度约束时,使用中型算法。

2. fmincon 函数的中型算法一般是使用序列二次规划。在每一步迭代中求解二次规划子问题,并用 BFGS 法更新 Lagrangian 乘子和 Hessian 矩阵。

3. fmincon 函数的大型算法采用了subspace trust region 优化算法。这种算法是把目标函数在点x的邻域泰勒展开(x可以认为是人为提供的初始猜测),这个展开的邻域就是所谓的trust region,泰勒展开进行到二阶项为止。

4. fmincon 函数可能会给出局部最优解,这与初始值的选取有关。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11240201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存