|
|
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ bslt(金币+2,VIP+0):感谢交流! 11-10 08:10 bigfish413(金币+10,VIP+0):谢谢 12-4 10:50
如果是无约束一维极值问题,推荐使用Newton法
迭代公式为:
x(k+1)=x(k)-f'[x(k)]/f''[x(k)]
初始值为你要求的x点附近的任意值
基本算法步骤如下:
1.给定初始点x(0),及精度epsilon>0,另k=0;
2.若|f'[x(k)]|<=epsilon,停止,极小点为x(k);
3.令 x(k+1)=x(k)-f'[x(k)]/f''[x(k)]
4.另k=k+1, 跳到2
matlab函数为:
function [x,minf] = minNewton(f,x0,eps)
format long;
if nargin == 2
eps = 1.0e-6;
end
df = diff(f);
d2f = diff(df);
k = 0;
tol = 1;
while tol>eps
dfx = subs(df,findsym(df),x0);
if diff(d2f) == 0
d2fx = double(d2f);
else
d2fx = subs(d2f,findsym(d2f),x0);
end
x1 = x0 - dfx/d2fx;
k = k + 1;
tol = abs(dfx);
x0 = x1;
end
x = x1;
minf = subs(f,findsym(f),x);
format short;
一个例子
求f(t)=t^2-lnt-5的极值
解:在MATLAB命令窗口输入
>> syms t;
>>f=t^2-log(t)-5
>>x=minNewton(f,2)
所得结果为
x=0.7071 |
|