| 学习榜样 | 古今学习模式与中外人才培养 | 基础学习 | 语言学习 | 人间美文 | 学习能力 | 学习工具 | 学习理论 | 科研美图 |
您当前的位置:首页 > 快乐学习 > 语言学习

变尺度法算法 matlab程序

时间:2014-05-31 08:28:00  来源:  作者:

 

变尺度法算法 matlab程序

 

%变尺度法算法
程序代码:
X0=input('请输入初始点X0(以列向量形式表示):X0=');
H0=input('请输入第一个2维尺度矩阵:H0=');
e=input('请输入要求的误差:e=');
syms x1 x2 lamida;
f=2*x1^2+x2^2-4*x1+2;
df_dx1=diff(f,x1);
df_dx2=diff(f,x2);
gf1=subs(df_dx1,{x1,x2},X0);
gf2=subs(df_dx2,{x1,x2},X0);
gf_0=double([gf1;gf2]);
H=H0;
if (norm(gf_0)<=e)
    disp(X0);
else
    P=-H*gf_0;
    f1=subs(f,{x1,x2},X0+lamida*P);
    f2=inline(f1);
    lamida=fminbnd(f2,-10000,10000);
    X1=X0+lamida*P;
    gf1=subs(df_dx1,{x1,x2},X1);
    gf2=subs(df_dx2,{x1,x2},X1);
    gf_1=double([gf1;gf2]);
end
clear lamida;
syms lamida;
while(norm(gf_1)>e)
    dx=X1-X0;
    dgf=gf_1-gf_0;
    H=H+dx*dx'/(dgf'*dx)-H*dgf*dgf'*H/(dgf'*H*dgf);
    P=-H*gf_1;
    f1=subs(f,{x1,x2},X1+lamida*P);
    f2=inline(f1);
    lamida=fminbnd(f2,-10000,10000);
    X0=X1;
    X1=X1+lamida*P;
    gf_0=gf_1;
    gf1=subs(df_dx1,{x1,x2},X1);
    gf2=subs(df_dx2,{x1,x2},X1);
    gf_1=double([gf1;gf2]);
    clear lamida;
    syms lamida;
end
disp(X1)
F=subs(f,{x1,x2},X1)
运行结果如下:(7.1版本)

 

 

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
相关文章
栏目更新
栏目热门