24小时热门版块排行榜    

查看: 316  |  回复: 1
当前主题已经存档。

bigfish413

银虫 (小有名气)

[交流] 【原创】请问matlab里如何求一个局部极小值

请问我想从一个初始点x出发,用局部搜索找到x点最近的局部极小点,有没有算法包可以直接调用。
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

leolau0318

木虫 (正式写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
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
2楼2009-11-07 09:49:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 bigfish413 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见