最速下降法与共轭梯度实验.docVIP

  • 14
  • 0
  • 约 5页
  • 2016-11-28 发布于贵州
  • 举报
最速下降法与共轭梯度实验

工程数值算法实验报告 班级 姓 名 学 号 课程名称 时 间 地 点 一、实验名称: 实验一、最速下降法与共轭梯度法实验 实验目的: 1.理解的基本原理e = 0.1。采用最速下降法求解 例2 用最速下降法求解无约束非线性规划问题: 其中,初始点,终止误差e = 0.1.采用共轭梯度法。 四、插值法的实验步骤: 步骤1:如何选择搜索方向 步骤2:在确定搜索方向上,采用适合的方法进行一维搜索 五、插值法的实验结果: 例1结果: =1.9304 = 0.9744 例2结果: =-1 =1 六、function x=fsxsteep(f,e,a,b) % fsxsteep函数 最速下降法 % x=fsxsteep(f,e,a,b)为输入函数 f为函数 e为允许误差 (a,b)为初始点; % fsx TJPU 2008.6.15 x1=a;x2=b; Q=fsxhesse(f,x1,x2); x0=[x1 x2]; fx1=diff(f,x1); %对x1求偏导数 fx2=diff(f,x2); %对x2求偏导数 g=[fx1 fx2]; %梯度 g1=subs(g); %把符号变量转为数值 d=-g1; while (abs(norm(g1))=e) t=(-d)*d/((-d)*Q*d);t=(-d)*d/((-d)*Q*d); %求搜索方向 x0=x0-t*g1; %搜索到的点 v=x0; a=[1 0]*x0; b=[0 1]*x0; x1=a; x2=b; g1=subs(g); d=-g1; end; x=v; function x=fsxhesse(f,a,b) % fsxhesse函数 求函数的hesse矩阵; % 本程序仅是简单的求二次函数的hesse矩阵!; % x=fsxhesse(f)为输入函数 f为二次函数 x1,x2为自变量; % fsx TJPU 2008.6.15 x1=a;x2=b; fx=diff(f,x1);%求f对x1偏导数 fy=diff(f,x2);%求f对x2偏导数 fxx=diff(fx,x1);%求二阶偏导数 对x1再对x1 fxy=diff(fx,x2);%求二阶偏导数 对x1再对x2 fyx=diff(fy,x1); %求二阶偏导数 对x2再对x1 fyy=diff(fy,x2);%求二阶偏导数 对x2再对x2 fxx=subs(fxx); %将符号变量转化为数值 fxy=subs(fxy); fyx=subs(fyx); fyy=subs(fyy); x=[fxx,fxy;fyx,fyy]; %求hesse矩阵 运行函数 syms x1 x2; X=[x1,x2]; fx=(X(1)-2).^4+(X(1)-2*X(2)).^2; z=fsxsteep(fx,0.1,0,3) 例2 定义函数 %conjugate gradient methods %method:FR,PRP,HS,DY,CD,WYL,LS %精确线搜索,梯度终止准则 function [ m,k,d,a,X,g1,fv] = conjgradme( G,b,c,X,e,method) if nargin6 error(输入参数必须为6); end n=length(G); if n==2 format long e %rat syms x1 x2 f=1/2*[x1,x2]*G*[x1;x2]+b*[x1;x2]+c; g=[diff(f,x1);diff(f,x2)]; g1=subs(subs(g,x1,X(1,1)),x2,X(2,1)); d=-g1; a=-(d*g1)/(d*G*d); a=-((X(:,1)*G*d+b*d)/(d*G*d)); a=g1(:,1)*g1(:,1)/(d(:,1)*G*d(:,1)); X(:,2)=X(:,1)+a*d; g1=[g1 subs(subs(g,x1,X(1,2)),x2,X(2,2))]; m1=norm(g1(:,1)); m=norm(g1(:,2)); i=2; k=zeros(1); switch method case FR while m=e k(i-1)=(m/m1)^2; d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1); a(i)=-(d(:,i)*g1(:,i))/(d(:,i)*G*d(:,i)); %a1(i)=-((X(:

文档评论(0)

1亿VIP精品文档

相关文档