a03共轭梯度法编程.doc

上传人:pu****.1 文档编号:546287927 上传时间:2022-09-19 格式:DOC 页数:13 大小:75.02KB
返回 下载 相关 举报
a03共轭梯度法编程.doc_第1页
第1页 / 共13页
a03共轭梯度法编程.doc_第2页
第2页 / 共13页
a03共轭梯度法编程.doc_第3页
第3页 / 共13页
a03共轭梯度法编程.doc_第4页
第4页 / 共13页
a03共轭梯度法编程.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《a03共轭梯度法编程.doc》由会员分享,可在线阅读,更多相关《a03共轭梯度法编程.doc(13页珍藏版)》请在金锄头文库上搜索。

1、MK7FCCK282Z3SVMK6CZBW26Q6LZ9 MKHMNXTJJQ4S83MKMDE2RESG33HSP90 第二章 11(2)用大M法求解min w=2x1+x2-x3-x4s.t x1-x2+2x3-x4=2 2x1+x2-3x3+x4=6 x1+x2+x3+x4=7 xi0, i = 1, 2, 3, 4用matlab求解如下:f=2,1,-1,-1,200,200,200;a=1 -1 2 -1 1 0 0;2 1 -3 1 0 1 0;1 1 1 1 0 0 1;b=2 6 7;lb=zeros(7,1);x,fval,exitflag,output,lambda=lin

2、prog(f,a,b,lb)Optimization terminated.运行结果如下:x = 3.0000 0.0000 1.0000 3.0000 0.0000 0.0000 0.0000fval = 2.0000exitflag = 1output = iterations: 7 algorithm: large-scale: interior point cgiterations: 0 message: Optimization terminated.lambda = ineqlin: 0x1 double eqlin: 3x1 double upper: 7x1 double lo

3、wer: 7x1 double从上述运行结果可以得出:最优解为x= ,最小值约为f*=2。P151 第三章 26用共轭梯度算法求f(x) = (x1-1)2+5*(x2-x12)2的极小点,取初始点x0= 。用matlab求解如下:function mg=MG()%共轭梯度法求解习题三第26题%clc;clear;n=2;x=2 0;max_k=100;count_k=1;trace(1,1)=x(1);trace(2,1)=x(2);trace(3,1)=f_fun(x);k=0;g1=f_dfun(x);s=-g1;while count_k=max_k if k=n g0=f_dfun(

4、x); s=-g0; k=0; else r_min=fminbnd(t) f_fun(x+t*s),-100,100); x=x+r_min*s; g0=g1; g1=f_dfun(x); if norm(g1)0.001 & k300) if k=0 p=-H0*g1; else vk=sk/(sk*yk)-(H0*yk)/(yk*H0*yk); w1=(yk*H0*yk)*vk*vk; H1=H0-(H0*yk*yk*H0)/(yk*H0*yk)+(sk*sk)/(sk*yk)+w1; p=-H1*g1; H0=H1; end x00=x0; result=Usearch1(f,x1,x

5、2,df,x0,p); arf=result(1); x0=x0+arf*p; g0=g1; g1=subs(df,x1,x2,x0(1,1),x0(2,1); p0=p; yk=g1-g0; sk=x0-x00; k=k+1;end;kx0f0=subs(f,x1,x2,x0(1,1),x0(2,1)function result=Usearch1(f,x1,x2,df,x0,p)mu=0.001;sgma=0.99;a=0;b=inf;arf=1;pk=p;x3=x0;x4=x3+arf*pk;f1=subs(f,x1,x2,x3(1,1),x3(2,1);f2=subs(f,x1,x2,

6、x4(1,1),x4(2,1);gk1=subs(df,x1,x2,x3(1,1),x3(2,1);gk2=subs(df,x1,x2,x4(1,1),x4(2,1);while (f1-f20) if(gk2*pksgma*gk1*pk) a=arf;a=min(2*arf,(a+b)/2);x4=x3+arf*pk;f2=subs(f,x1,x2,x4(1,1),x4(2,1);gk2=subs(df,x1,x2,x4(1,1),x4(2,1); while (f1-f2=-mu*arf*gk1*pk) b=arf;arf=(a+arf)/2;x4=x3+arf*pk;f2=subs(f,

7、x1,x2,x4(1,1),x4(2,1);gk2=subs(df,x1,x2,x4(1,1),x4(2,1); end; else break; endend;result=arf;运行结果如下:k = 19x0 = 1.0000 1.0000f0 =4.4505e-013从上述运行结果可以得出:最优解为x= ,最小值约为f*=0。P229 第四章 10用SUMT内点法求解(1) min f(x) = x1+x2 s.t g1(x) = -x12+x20 g2(x) = x10用matlab求解如下:function sumt=SUMT(x0,e0,max_k0)%SUMT内点法global

8、 x s Mx=x0;e=e0;max_k=max_k0;trace(1,1)=x(1);trace(2,1)=x(2);M=100;c=3;e_FR=10-10;max_FR=200;for k=0:max_k x=FR(x,e_FR,max_FR); trace(1,k+2)=x(1); trace(2,k+2)=x(2); if f_pfun(x)e break; end M=c*M;endxf=f_fun(x)ktracefunction f=FR(x0,e,max_k)global x s;count_k=1;k=0;x=x0;g1=f_dfun(x);s=-g1;while count_k=max_k if k=n g0=f_dfun(x); s=-g0; k=0; else r_min=fminbnd(t) f_fun(x+t*s),-100,100); x=x+r_min*s;% g0=g1; g1=f_dfun(x) if norm(g1)=0&b=0 g(1,1)=1; g(2,1)=1;elseif a=0 g(1,1)=1+2*M*(-x(1)2+x(2)*(-2*x(1); g(2,1)=1+2*M*(-x(1)2+x(2);elseif a=0&b0 g(1,1)=1+2*M*x(1); g(2,1)=1;else g(1,1)=1+2

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号