matlab 中如何求得梯度等于0的点

matlab 中如何求得梯度等于0的点,第1张

建议采用最优化搜索办法,如黄金分割法、最速下降法或者共轭梯度法等。(用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

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

原文地址: http://outofmemory.cn/langs/11678122.html

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

发表评论

登录后才能评论

评论列表(0条)

保存