建议采用最优化搜索办法,如黄金分割法、最速下降法或者共轭梯度法等。(用MATLAB编程很容易实现)
其实任何函数都不能保证最终能收敛到梯度为0
因为有些函数本身不存在极值。
(i)编写M文件detafm如下
function [f,df]=detaf(x);
f=x(1)^2+x(2)^2-x(1)x(2)-10x(1)-4x(2)+60;
df(1)=2x(1)-x(2)-10;
df(2)=2x(2)-x(1)-4;
(ii)编写M文件tidum
clc
x=[2;2];
[f0,g]=detaf(x);
while norm(g)>0001
p=-g'/norm(g);
t=10;f=detaf(x+tp);
while f>f0
t=t/2;f=detaf(x+tp);
end
x=x+tp
[f0,g]=detaf(x)
end
在命令窗口运行tidu,回车
x =
09285
03714
f0 =
498848
g =
-85144 -41857
x =
18259
08126
f0 =
410013
g =
-71608 -42008
x =
26884
13186
f0 =
332628
g =
-59417 -40513
x =
35147
18819
f0 =
266059
g =
-48526 -37508
x =
43059
24935
f0 =
209888
g =
-38818 -33189
x =
50659
31433
f0 =
163877
g =
-30115 -27793
x =
58008
38215
f0 =
127914
g =
-22200 -21577
x =
65179
45185
f0 =
101958
g =
-14828 -14808
x =
72254
52252
f0 =
86002
g =
-07743 -07751
x =
79322
59326
f0 =
80046
g =
-00683 -00669
x =
80215
60201
f0 =
80004
g =
00229 00187
x =
79973
60003
f0 =
80000
g =
-00058 00034
x =
80006
59984
f0 =
80000
g =
00029 -00039
x =
79995
59999
f0 =
80000
g =
10e-003
-09686 03678
x =
79999
59997
f0 =
80000
g =
10e-003
01177 -04353
最优结果为:
x =
79999
59997
f0 =
80000
g =
10e-003
01177 -04353
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)