#defineMAX_M2048#"> #defineMAX_M2048#" />
欢迎来到天天文库
浏览记录
ID:30067294
大小:55.61 KB
页数:5页
时间:2018-12-26
《共轭梯度法的c+=语言实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、共轭梯度法的C+=语言实现---------------------基于成都理工大学最优化教材#include#include"Matrix.h"#include#defineMAX_M2048#include#definebeta(sqrt(5)-1)/2#defineeclipse0.01CMatrixhesse(){CMatrixtemp(2,2);temp.A[0][0]=2;temp.A[0][1]=0;temp.A[1][0]=0;temp.A[1][1]=8;return
2、temp;}doublefun(doublet,CMatrix&X1,CMatrix&X2){doublex1=X1.A[0][0]+t*X2.A[0][0];doublex2=X1.A[1][0]+t*X2.A[1][0];returnx1*x1+4*x2*x2;}doubleMax_Num(doublea,doubleb){if(a>b){returna;}else{returnb;}}doubleMin_Num(doublea,doubleb){if(a
3、Search(double&a,double&b,CMatrix&mt1,CMatrix&mt2){doublet[MAX_M]={0};doubleh[MAX_M]={0};doublef[MAX_M]={0};doubleresult=0;doublep=2.1;t[0]=0;h[0]=1;f[0]=fun(t[0],mt1,mt2);for(intk=0;k4、lt=t[k];t[k]=t[k+1];f[k]=f[k+1];}elseif(k==0){h[k]=-h[k];result=t[k+1];}else{a=Min_Num(result,t[k+1]);b=Max_Num(result,t[k+1]);}}}doubleFibonacci(double&a,double&b,CMatrixmt1,CMatrixmt2){doublet2,t1,result_1,result_2;t2=a+beta*(b-a);result_2=fun(t2,mt1,mt1);while(true){t1=a+5、b-t2;result_1=fun(t1,mt1,mt2);if(fabs(t1-t2)6、stance(CMatrix&X1,CMatrix&X2){doublex1=X1.A[0][0]-X2.A[0][0];doublex2=X1.A[1][0]-X2.A[1][0];returnx1*x1+x2*x2;}CMatrixdiff_fun(CMatrix&mt){CMatrixtemp(2,1);temp.A[0][0]=2*mt.A[0][0];temp.A[1][0]=8*mt.A[1][0];returntemp;}doublefanshu(CMatrixmt){returnsqrt(mt.A[0][0]*mt.A[0][07、]+mt.A[1][0]*mt.A[1][0]);}voidmain(){inti=0;intn=2000;CMatrixtemp_X1;CMatrixX1(2,1);X1.A[0][0]=1;X1.A[1][0]=1;CMatrixm_temp=hesse();CMatrixn_temp=diff_fun(X1);CMatrixX2=(m_temp.Inverse()*n_temp).Matrix_Multiply(-1);doublea,b;StepAdding_Search(a,b,X1,X2);doublem=Fibonacci(a,b8、,X1,X2);temp_X1=X1;CMatrixX3=X1+X2.Matrix_Multiply(m);while(distance(X1,X3)
4、lt=t[k];t[k]=t[k+1];f[k]=f[k+1];}elseif(k==0){h[k]=-h[k];result=t[k+1];}else{a=Min_Num(result,t[k+1]);b=Max_Num(result,t[k+1]);}}}doubleFibonacci(double&a,double&b,CMatrixmt1,CMatrixmt2){doublet2,t1,result_1,result_2;t2=a+beta*(b-a);result_2=fun(t2,mt1,mt1);while(true){t1=a+
5、b-t2;result_1=fun(t1,mt1,mt2);if(fabs(t1-t2)6、stance(CMatrix&X1,CMatrix&X2){doublex1=X1.A[0][0]-X2.A[0][0];doublex2=X1.A[1][0]-X2.A[1][0];returnx1*x1+x2*x2;}CMatrixdiff_fun(CMatrix&mt){CMatrixtemp(2,1);temp.A[0][0]=2*mt.A[0][0];temp.A[1][0]=8*mt.A[1][0];returntemp;}doublefanshu(CMatrixmt){returnsqrt(mt.A[0][0]*mt.A[0][07、]+mt.A[1][0]*mt.A[1][0]);}voidmain(){inti=0;intn=2000;CMatrixtemp_X1;CMatrixX1(2,1);X1.A[0][0]=1;X1.A[1][0]=1;CMatrixm_temp=hesse();CMatrixn_temp=diff_fun(X1);CMatrixX2=(m_temp.Inverse()*n_temp).Matrix_Multiply(-1);doublea,b;StepAdding_Search(a,b,X1,X2);doublem=Fibonacci(a,b8、,X1,X2);temp_X1=X1;CMatrixX3=X1+X2.Matrix_Multiply(m);while(distance(X1,X3)
6、stance(CMatrix&X1,CMatrix&X2){doublex1=X1.A[0][0]-X2.A[0][0];doublex2=X1.A[1][0]-X2.A[1][0];returnx1*x1+x2*x2;}CMatrixdiff_fun(CMatrix&mt){CMatrixtemp(2,1);temp.A[0][0]=2*mt.A[0][0];temp.A[1][0]=8*mt.A[1][0];returntemp;}doublefanshu(CMatrixmt){returnsqrt(mt.A[0][0]*mt.A[0][0
7、]+mt.A[1][0]*mt.A[1][0]);}voidmain(){inti=0;intn=2000;CMatrixtemp_X1;CMatrixX1(2,1);X1.A[0][0]=1;X1.A[1][0]=1;CMatrixm_temp=hesse();CMatrixn_temp=diff_fun(X1);CMatrixX2=(m_temp.Inverse()*n_temp).Matrix_Multiply(-1);doublea,b;StepAdding_Search(a,b,X1,X2);doublem=Fibonacci(a,b
8、,X1,X2);temp_X1=X1;CMatrixX3=X1+X2.Matrix_Multiply(m);while(distance(X1,X3)
此文档下载收益归作者所有