无约束优化牛顿法matlab,用拟牛顿法求解无约束最优化问题时代码报错

下面是从网上找的模板根据我自己的函数又改的,在运行的时候程序报错了,本人小白看不太懂,求各位大神解答一下,万分感谢!

function [best_x,best_fx,count]=dfp(x0,ess)

syms x1 x2 x3 t;

f=(x1^2+x2^2+x3^2-1183.215957^2)^2+(x1^2+(x2-1000)^2+x3^2-1095.445115^2)^2+((x1-500)^2+x2^2+x3^2-1204.159458^2)^2+((x1-500)^2+(x2-1000)^2+x3^2-1118.033989^2)^2;

fx=diff(f,x1);%求表达式f对x1的一阶求导

fy=diff(f,x2);%求表达式f对x2的一阶求导

fz=diff(f,x3);%求表达式f对x3的一阶求导

fi=[fx fy fz];%构造函数f的梯度函数

%初始点的梯度和函数值

g0=subs(fi,[x1 x2 x3],x0);

f0=subs(f,[x1 x2 x3],x0);

H0=eye(3);

%输出x0,f0,g0

x0

f0

g0

xk=x0;

fk=f0;

gk=g0;

Hk=H0;

k=1;

while(norm(gk)>ess)%迭代终止条件||gk||<=ess

disp('************************************************************')

disp(['第' num2str(k) '次寻优'])

%确定搜索方向

pk=-Hk*gk';

%由步长找到下一点x(k+1)

xk=xk+t*pk';

f_t=subs(f,[x1 x2 x3],xk); %构造一元搜索的一元函数φ(t)

%由一维搜索找到最优步长

df_t=diff(f_t,t);

tk=solve(df_t);

if tk~=0

tk=double(tk);

else

break;

end

%计算下一点的函数值和梯度

xk=subs(xk,t,tk)

fk=subs(f,[x1 x2 x3],xk)

gk0=gk;

gk=subs(fi,[x1 x2 x3],xk)

%DPF校正公式,找到修正矩阵

yk=gk-gk0;

sk=tk*pk';

Hk=Hk-(Hk*yk'*yk*Hk)/(yk*Hk*yk')+sk'*sk/(yk*sk')%修正公式

k=k+1;

end

disp('结果如下:')

best_x=xk;%最优点

best_fx=fk;%最优值

count=k-1;

命令窗输入

x0=[250 500 500];

ess=0.01;

[best_x,best_fx,count]=dfp(x0,ess)

报错画面:

2017-4-17 15:47 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

0e07fc3a3c2c62b80b91467621347f93.png

2017-4-17 15:47 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

1a653f0310b49f087cb8003a1b9480c3.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我的思路是这样的: 最速下降法能找出全局最优点,但在接近最优点的区域内就会陷入“齿型”迭代中,使其每进行一步迭代都要花掉非常久的间,这样长久的等待是无法忍受的,不信你就在我那个程序的第一步迭代中把精度取得很小如:0.000000001等,其实我等过一个钟都没有什么结果出来。 再者我们考究一下 牛顿迭代法求最优问题,牛顿法相对最速下降法的速度就快得多了,而且还有一个好处就是能高度逼近最优值,而不会出现死等待的现象。 如后面的精度,你可以取如:0.0000000000001等。 但是牛顿法也有缺点,就是要求的初始值非常严格,如果取不好,逼近的最优解将不收敛,甚至不是最优解。 就算收敛也不能保证那个结就是全局最优解,所以我们的出发点应该是:为牛顿法找到一个好的初始点,而且这个初始点应该是在全局最优点附近,这个初始点就能保证牛顿法高精度收敛到最优点,而且速度还很快。 思路概括如下: 1。用最速下降法在大范围找到一个好的初始点给牛顿法:(最速下降法在精度不是很高的情况下逼近速度也是蛮快的) 2。在最优点附近改用牛顿法,用最速下降法找到的点为牛顿法的初始点,提高逼近速度与精度。 3。这样两种方法相结合,既能提高逼近的精度,还能提高逼近的速度,而且还能保证是全局最优点。这就充分吸收各自的优点,扬长避短。得到理想的结果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值