数学实验“线性方程组的最速下降法与共轭梯度法解法”实验报告(内含matlab程序代码)

合集下载

共轭梯度法和梯度下降法

共轭梯度法和梯度下降法

共轭梯度法和梯度下降法共轭梯度法和梯度下降法是两种常用的优化算法,它们在解决最优化问题时具有重要的作用。

本文将分别介绍共轭梯度法和梯度下降法的原理、优势和应用领域,并对它们进行比较和总结。

一、共轭梯度法共轭梯度法是一种迭代算法,用于求解线性最小二乘问题或者解线性方程组。

它的核心思想是通过迭代求解一系列的共轭方向,从而不断逼近最优解。

共轭梯度法的优势在于它能够充分利用问题的特殊结构,避免不必要的计算。

相比于梯度下降法,共轭梯度法通常收敛更快,并且对于大规模问题的求解效果更好。

共轭梯度法主要应用于求解线性方程组、最小二乘问题以及特定的优化问题,如信号处理、图像处理和机器学习等领域。

二、梯度下降法梯度下降法是一种基于梯度的迭代优化算法,用于求解无约束最优化问题。

它的核心思想是沿着负梯度方向不断迭代,直至达到最优解或者满足停止条件。

梯度下降法的优势在于它的简单性和易于实现性。

它不需要求解二阶导数,只需要计算一阶导数,因此对于大规模问题的求解也比较高效。

梯度下降法广泛应用于机器学习中的参数优化问题,如线性回归、逻辑回归和神经网络等。

此外,它还可以用于函数拟合、特征选择和降维等领域。

三、共轭梯度法与梯度下降法的比较共轭梯度法和梯度下降法都是常见的优化算法,它们的选择取决于具体的问题和需求。

1. 收敛速度:共轭梯度法通常比梯度下降法收敛更快。

共轭梯度法在每次迭代时利用了前面所有迭代步骤的信息,可以更快地逼近最优解。

2. 内存消耗:梯度下降法只需要存储当前的梯度信息,而共轭梯度法需要存储一系列的共轭方向。

因此,对于大规模问题,梯度下降法在内存消耗方面更具优势。

3. 线性方程组求解:共轭梯度法是一种求解线性方程组的有效方法,而梯度下降法通常不适用于求解线性方程组。

4. 二次型优化问题:共轭梯度法对于二次型优化问题的求解效果更好。

梯度下降法在处理非二次型问题时可能会出现收敛速度慢、局部最优等问题。

共轭梯度法和梯度下降法是两种常用的优化算法。

(完整)实验2 最速下降法和共轭梯度法的程序设计

(完整)实验2 最速下降法和共轭梯度法的程序设计

实验2 最速下降法和共轭梯度法的程序设计一、实验目的1、熟悉无约束优化问题的最速下降算法和共轭梯度法。

2、培养matlab 编程与上机调试能力。

二、实验课时:2个课时三、实验准备1、预习无约束优化问题的最速下降算法和共轭梯度法.2、熟悉matlab 软件的基本操作及程序编写。

四、实验内容课堂实验演示根据最速下降法编写程序,求函数21222121342)(m in x x x x x x x f -++-=的极小值,其中初始点为()01,1Tx =算法步骤如下:Step1::给出初始点0x ,和精度1;0k ε<<=;Step2:计算()k f x ∇,如果()k f x ε∇≤,则停止迭代,输出结果;否则转step3;Step3:令下降方向()k k d f x =-∇,计算步长因子k λ使得0()min ()k k k k k f x d f x d λλλ≥+=+,令1,1k k k k x x d k k λ+=+=+,转step2.其程序如下:function [x,iter,val,dval] = Steepest_Descent_Method(x ,eps)k = 1;dy = grad_obj(x);x_mat (:,1) = x ;%存储每一次迭代得到的点xwhile norm (dy)〉epsd = —dy ; % 搜索方向lambda = line_search(x ,d );%步长x = x + d *lambda ;k = k + 1;x_mat (:,k ) = x;dy = grad_obj (x);enditer = k — 1;val = obj(x);%目标函数在极值点处的函数值dval = grad_obj(x);%目标函数在极值点处的梯度%———----—-————-—-————-—-———-——---—----——-—---——---—-—-——--——--—x1 = linspace(—1。

matlab数学实验

matlab数学实验

《管理数学实验》实验报告班级姓名实验1:MATLAB的数值运算【实验目的】(1)掌握MATLAB变量的使用(2)掌握MATLAB数组的创建,(3)掌握MA TLAB数组和矩阵的运算。

(4)熟悉MATLAB多项式的运用【实验原理】矩阵运算和数组运算在MA TLAB中属于两种不同类型的运算,数组的运算是从数组元素出发,针对每个元素进行运算,矩阵的运算是从矩阵的整体出发,依照线性代数的运算规则进行。

【实验步骤】(1)使用冒号生成法和定数线性采样法生成一维数组。

(2)使用MA TLAB提供的库函数reshape,将一维数组转换为二维和三维数组。

(3)使用逐个元素输入法生成给定变量,并对变量进行指定的算术运算、关系运算、逻辑运算。

(4)使用MA TLAB绘制指定函数的曲线图,将所有输入的指令保存为M文件。

【实验内容】(1)在[0,2*pi]上产生50个等距采样数据的一维数组,用两种不同的指令实现。

0:(2*pi-0)/(50-1):2*pi 或linspace(0,2*pi,50)(2)将一维数组A=1:18,转换为2×9数组和2×3×3数组。

reshape(A,2,9)ans =Columns 1 through 71 3 5 7 9 11 132 4 6 8 10 12 14Columns 8 through 915 1716 18reshape(A,2,3,3)ans(:,:,1) =1 3 52 4 6ans(:,:,2) =7 9 118 10 12 ans(:,:,3) =13 15 17 14 16 18(3)A=[0 2 3 4 ;1 3 5 0],B=[1 0 5 3;1 5 0 5],计算数组A 、B 乘积,计算A&B,A|B,~A,A= =B,A>B 。

A.*Bans=0 0 15 121 15 0 0 A&Bans =0 0 1 11 1 0 0 A|Bans =1 1 1 11 1 1 1~Aans =1 0 0 00 0 0 1A==Bans =0 0 0 01 0 0 0A>=Bans =0 1 0 11 0 1 0(4)绘制y= 0.53t e -t*t*sin(t),t=[0,pi]并标注峰值和峰值时间,添加标题y= 0.53t e -t*t*sint ,将所有输入的指令保存为M 文件。

用MATLAB实现最速下降法_牛顿法和共轭梯度法求解实例——张小强

用MATLAB实现最速下降法_牛顿法和共轭梯度法求解实例——张小强

机电产品优化设计课程设计报告姓名:张小强学号:201222080633学院:机械电子工程学院实验的题目和要求一.课程名称:最优化设计方法二.实验日期:2013年6月27日三.实验目的:掌握最速下降法,牛顿法和共轭梯度法的算法思想,并能上机编程实现相应的算法。

四.实验要求:用MATLAB 实现最速下降法,牛顿法和共轭梯度法求解实例。

五.实验原理:最速下降法是以负梯度方向最为下降方向的极小化算法,相邻两次的搜索方向是互相直交的。

牛顿法是利用目标函数)(x f 在迭代点k x 处的Taylor 展开式作为模型函数,并利用这个二次模型函数的极小点序列去逼近目标函数的极小点。

共轭梯度法它的每一个搜索方向是互相共轭的,而这些搜索方向k d 仅仅是负梯度方向k g -与上一次搜索方向1-k d 的组合。

五.运行结果如下: 题目:f=(x-2)^2+(y-4)^2①.最速下降法:M 文件:function [R,n]=steel(x0,y0,eps)syms x ;syms y ;f=(x-2)^2+(y-4)^2;v=[x,y];j=jacobian(f,v);T=[subs(j(1),x,x0),subs(j(2),y,y0)];temp=sqrt((T(1))^2+(T(2))^2);x1=x0;y1=y0;n=0;syms kk ;while (temp>eps)d=-T;f1=x1+kk*d(1);f2=y1+kk*d(2);fT=[subs(j(1),x,f1),subs(j(2),y,f2)];fun=sqrt((fT(1))^2+(fT(2))^2);Mini=Gold(fun,0,1,0.00001);x0=x1+Mini*d(1);y0=y1+Mini*d(2);T=[subs(j(1),x,x0),subs(j(2),y,y0)];temp=sqrt((T(1))^2+(T(2))^2);x1=x0;y1=y0;n=n+1;endR=[x0,y0];调用黄金分割法:M文件:function Mini=Gold(f,a0,b0,eps)syms x;format long;syms kk;u=a0+0.382*(b0-a0);v=a0+0.618*(b0-a0);k=0;a=a0;b=b0;array(k+1,1)=a;array(k+1,2)=b;while((b-a)/(b0-a0)>=eps)Fu=subs(f,kk,u);Fv=subs(f,kk,v);if(Fu<=Fv)b=v;v=u;u=a+0.382*(b-a);k=k+1;elseif(Fu>Fv)a=u;u=v;v=a+0.618*(b-a);k=k+1;endarray(k+1,1)=a;array(k+1,2)=b;endMini=(a+b)/2;输入:[R,n]=steel(0,1,0.0001)输出:R = 1.99999413667642 3.99999120501463n = 1②.牛顿法:M文件:syms x1x2;f=(x1-2)^2+(x2-4)^2;v=[x1,x2];df=jacobian(f,v);df=df.';G=jacobian(df,v);epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=subs(G,{x1,x2 },{x0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0;mul_count=mul_count+12;sum_count=sum_count+6; while(norm(g1)>epson)p=-G1\g1;x0=x0+p;g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=k+1;mul_count=mul_count+16;sum_count=sum_count+11; end;kx0mul_countsum_count结果:k = 1x0 =24mul_count = 28sum_count = 17③.共轭梯度法:M文件:function f=conjugate_grad_2d(x0,t)x=x0;syms xi yi af=(xi-2)^2+(yi-4)^2;fx=diff(f,xi);fy=diff(f,yi);fx=subs(fx,{xi,yi},x0);fy=subs(fy,{xi,yi},x0);fi=[fx,fy];count=0;while double(sqrt(fx^2+fy^2))>ts=-fi;if count<=0s=-fi;elses=s1;endx=x+a*s;f=subs(f,{xi,yi},x);f1=diff(f);f1=solve(f1);if f1~=0ai=double(f1);elsebreakx,f=subs(f,{xi,yi},x),countendx=subs(x,a,ai);f=xi-xi^2+2*xi*yi+yi^2;fxi=diff(f,xi);fyi=diff(f,yi);fxi=subs(fxi,{xi,yi},x);fyi=subs(fyi,{xi,yi},x);fii=[fxi,fyi];d=(fxi^2+fyi^2)/(fx^2+fy^2);s1=-fii+d*s;count=count+1;fx=fxi;fy=fyi;endx,f=subs(f,{xi,yi},x),count输入:conjugate_grad_2d([0,0],0.0001)结果:x = 0.24998825499785 -0.24999998741273f = 0.12499999986176count = 10ans = 0.12499999986176六.结论如下:最速下降法越接近极小值,步长越小,前进越慢。

最优化方法实验报告(2)

最优化方法实验报告(2)

最优化方法实验报告Numerical Linear Algebra And ItsApplications学生所在学院:理学院学生所在班级:计算数学10-1学生姓名:甘纯指导教师:单锐教务处2013年5月实验三实验名称:无约束最优化方法的MATLAB实现实验时间: 2013年05月10日星期三实验成绩:一、实验目的:通过本次实验的学习,进一步熟悉掌握使用MATLAB软件,并能利用该软件进行无约束最优化方法的计算。

二、实验背景:(一)最速下降法1、算法原理最速下降法的搜索方向是目标函数的负梯度方向,最速下降法从目标函数的负梯度方向一直前进,直到到达目标函数的最低点。

2、算法步骤用最速下降法求无约束问题n R()min的算法步骤如下:xxf,a )给定初始点)0(x ,精度0>ε,并令k=0;b )计算搜索方向)()()(k k x f v -∇=,其中)()(k x f ∇表示函数)(x f 在点)(k x 处的梯度;c )若ε≤)(k v ,则停止计算;否则,从)(k x 出发,沿)(k v 进行一维搜索,即求k λ,使得)(min )()()(0)()(k k k k v x f v x f λλλ+=+≥; d )令1,)()()1(+=+=+k k v x x k k k k λ,转b )。

(二)牛顿法1、算法原理牛顿法是基于多元函数的泰勒展开而来的,它将)()]([-)(1)(2k k x f x f ∇∇-作为搜索方向,因此它的迭代公式可直接写出来:)()]([)(1)(2)()(k k k k x f x f x x ∇∇-=-2、算法步骤用牛顿法求无约束问题n R x x f ∈),(min 的算法步骤如下:a )给定初始点)0(x ,精度0>ε,并令k=0;b )若ε≤∇)()(k x f ,停止,极小点为)(k x ,否则转c );c )计算)()]([,)]([)(1)(2)(1)(2k k k k x f x f p x f ∇∇-=∇--令;d )令1,)()()1(+=+=+k k p x x k k k ,转b )。

“线性方程组高斯消去法”实验报告(内含matlab程序)

“线性方程组高斯消去法”实验报告(内含matlab程序)

实验一实验报告一、实验名称:线性方程组高斯消去法。

二、实验目的:进一步熟悉理解Guass 消元法解法思路,提高matlab 编程能力。

三、实验要求:已知线性方程矩阵,利用软件求解线性方程组的解。

四、实验原理:消元过程:设0)0(11≠a ,令乘数)0(11)0(11/a a m i i -=,做(消去第i 个方程组的i x )操作1i m ×第1个方程+第i 个方程(i=2,3,.....n )则第i 个方程变为1)1(2)1(2...i n in i b x a x a =++ 这样消去第2,3,。

,n 个方程的变元i x 后。

原线性方程组变为:⎪⎪⎪⎩⎪⎪⎪⎨⎧=++=++=++)1()1(2)1(2)1(2)1(22)1(22)0(1)0(11)0(11... . .... ...n n nn n n n n n b x a x a b x a x a b x a x a 这样就完成了第1步消元。

回代过程:在最后的一方程中解出n x ,得:)1()1(/--=n nn n n n a b x再将n x 的值代入倒数第二个方程,解出1-n x ,依次往上反推,即可求出方程组的解:其通项为3,...1-n 2,-n k /)()1(1)1()1(=-=-+=--∑k kk n k j j k kj k k k a x a bx五、实验内容:A=[1 1 1;0 4 -1;2 -2 1];%ϵÊý¾ØÕó b=[6 5 1]'%³£ÊýÏînum=length(b)for k=1:num-1for i=k+1:numif A(k,k)~=0l=A(i,k)/A(k,k); A(i,:)=A(i,:)-A(k,:).*l; b(i)=b(i)-b(k)*l; endendendAb%»Ø´úÇóxx(num)=b(num)/A(num,num); for i=num-1:-1:1sum=0;for j=i+1:numsum=sum+A(i,j)*x(j); endx(i)=(b(i)-sum)/A(i,i); endx六、实验结果:A =1 1 1 0 4 -10 0 -2b =65-6x =1 2 3。

研究报告用matlab解线性方程组

研究报告用matlab解线性方程组

用matlab解线性方程组2008-04-12,17:00一。

高斯消去法1.顺序高斯消去法直接编写命令文件a=[]d=[]'[n,n]=size(a);c=n+1a(:,c)=d;,for,k=1:n-1a(k+1:n,,k:c)=a(k+1:n,,k:c)-(a(k+1:n,k)/,a(k,k))*a(k,,k:c);,,,,,%消去endx=[0,0,0,0]',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%回带x(n)=a(n,c)/a(n,n);for,g=n-1:-1:1x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)end2.列主高斯消去法*由于“[r,m]=max(abs(a(k:n,k)))”返回的行是“k:n,k”内的第几行,所以要通过修正来把m,改成真正的行的值。

该程序只是演示程序,真正机器计算不需要算主元素所在列以下各行应为零的值。

直接编写命令文件a=[]d=[],'[n,n]=size(a);c=n+1a(:,c)=d;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%(增广)for,k=1:n-1[r,m]=max(abs(a(k:n,k)));,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%选主m=m+k-1;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%(修正操作行的值),,,if(a(m,k)~=0),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,if(m~=k)a([k,m],:)=a([m,k],:);,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%换行enda(k+1:n,,k:c)=a(k+1:n,,k:c)-(a(k+1:n,k)/,a(k,k))*a(k,,k:c);,,,,,,%消去endendx=[0,0,0,0]',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%回带x(n)=a(n,c)/a(n,n);for,g=n-1:-1:1x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)end3.分别用顺序高斯消去法和列主高斯消去法解方程组a*x=d,并比较结果a=[0,1,2,3;9,11,23,34;62.5,23.4,15.5,17.2;192.01,124,25.1,59.3],d=[1;1;1;1]顺序高斯消去法:提示“Warning:,Divide,by,zero.”,x,=NaN,NaN,NaN,NaN 列主高斯消去法:x,=-1.2460,2.8796,5.5206,-4.3069由此可见列主高斯消去法可以解决顺序高斯消去法所不能解决的问题。

最优化牛顿法最速下降法共轭梯度法matlab代码

最优化牛顿法最速下降法共轭梯度法matlab代码

牛顿法迭代公式:(1)2()1()[()]()k k k k x x f x f x +-=-∇∇Matlab 代码:function [x1,k] =newton(x1,eps)hs=inline('(x-1)^4+y^2'); 写入函数ezcontour(hs,[-10 10 -10 10]); 建立坐标系hold on; 显示图像syms x y 定义变量f=(x-1)^4+y^2; 定义函数grad1=jacobian(f,[x,y]); 求f 的一阶梯度grad2=jacobian(grad1,[x,y]); 求f 的二阶梯度k=0; 迭代初始值while 1 循环grad1z=subs(subs(grad1,x,x1(1)),y,x1(2)); 给f 一阶梯度赋初值 grad2z=subs(subs(grad2,x,x1(1)),y,x1(2)); 给f 二阶梯度赋初值 x2=x1-inv(grad2z)*(grad1z)'; 核心迭代公式if norm(x1-x2)<eps 判断收敛条件break;elseplot([x1(1),x2(1)],[x1(2),x2(2)],'-r*'); 画图k=k+1; 迭代继续x1=x2; 赋值endendend优点:在极小点附近收敛快缺点:但是要计算目标函数的hesse 矩阵最速下降法1. :选取初始点xo ,给定误差2. 计算一阶梯度。

若一阶梯度小于误差,停止迭代,输出3. 取()()()k k p f x =∇4. 10t ()(), 1.min k k k k k k k k k k t f x t p f x tp x x t p k k +≥+=+=+=+进行一维搜索,求,使得令转第二步例题:求min (x-2)^4+(x-2*y)^2.初始值(0,3)误差为0.1(1)编写一个目标函数,存为f.mfunction z = f( x,y )z=(x-2.0)^4+(x-2.0*y)^2;end(2)分别关于x 和y 求出一阶梯度,分别存为fx.m 和fy.mfunction z = fx( x,y )z=2.0*x-4.0*y+4.0*(x-2.0)^3;end和function z = fy( x,y )z=8.0*y-4.0*x;end(3)下面是脚本文件,一维搜索用的是黄金分割法Tic 计算时间eps=10^(-4);误差err=10;dt=0.01;x0=1.0;初始值y0=1.0;mm=0;while err>eps 黄金分割法dfx=-fx(x0,y0);dfy=-fy(x0,y0);tl=0;tr=1;确定一维搜索的区间h=3;nn=0;gerr=10;geps=10^(-4);while gerr>gepstll=tl+0.382*abs(tr-tl);trr=tl+0.618*abs(tr-tl);iff(x0+tll*h*dfx,y0+tll*h*dfy)>f(x0+trr*h*dfx,y0+trr*h*dfy) tl=tll;elsetr=trr;endgerr=abs(tl-tr); 区间的长度之差tt=0.5*(tl+tr);nn=nn+1;步数增加if nn>200 迭代终止条件breakendendx0=x0+tt*h*dfx; 重新迭代y0=y0+tt*h*dfy;err=sqrt(fx(x0,y0)^2+fy(x0,y0)^2);mm=mm+1;步数增加if mm>700 迭代步数超过700,终止breakendendres=[x0,y0];输出最后的x,y。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西京学院数学软件实验任务书
实验五实验报告
一、实验名称:最速下降法与共轭梯度法解线性方程组。

二、实验目的:进一步熟悉理解掌握最速下降法与共轭梯度法解法思路,提高matlab 编程能力。

三、实验要求:已知线性方程矩阵,应用最速下降与共轭梯度法在相关软件编程求解线性方程组的解。

四、实验原理:
1.最速下降法:
从某个初始点)0(X 出发,沿)(X f 在点)0(X 处的负梯度方向
)0()0()0()(AX b X f r -=-∇=
求得)(X f 的极小值点)1(X , 即
)(min )0()0(0
r X f λλ+>
然后从)1(X 出发,重复上面的过程得到)2(X 。

如此下去,得到序列{)(k X }
)(...)()()()1()0(k X f X f X f >>>
可以证明,从任一初始点)0(X 出发, 用最速下降法所得到的序列{)(k X }均收敛于问题使X 最小化)(X f 的解,也就是方程组b AX =的解。

其收敛速度取决于
1
1
λλλλ+-n n ,其中1λ ,n λ分别
为A 的最小,最大特征值。

最速下降法迭代格式:给定初值)0(X ,
)(k X 按如下方法决定:
())
()(1)(k )()()()(k )
()(X ,,)(k k k k T k k T k k k k r
X Ar r r r AX b X f r λλ+=>
<><=-=-∇=+ 2.共轭梯度法
其基本步骤是在点)(k X 处选取搜索方向)(k d , 使其与前一次的搜索方向)1(-k d 关于A 共轭,即
(1)()(1),0k k k d d Ad --<>=
然后从点)(k X 出发,沿方向)(k d 求得)(X f 的极小值点
)1(+k X , 即
)(min )()
()(0
)1(k d X f X f k k λλ+=>+
如此下去, 得到序列{)(k X }。

不难求得0,)1()(>=<-k k Ad d 的解为
)
()
1()1()()()
()
1(,,k k k k k k k d Ad d d AX b X
X
>
<>-<+=--+ 注意到)(k d 的选取不唯一,我们可取
)1(1)()()(--+-∇=k k k k d X f d β
由共轭的定义0,)1()(>=<-k k Ad d 可得:
>
<>
<-=----)
1()1()1()(1,,k k k k k Ad d Ad r β 共轭梯度法的计算过程如下: 第一步:取初始向量)0(X , 计算
⎪⎪



⎨⎧+=><><-=-=-∇==(0)
0(0)(1))
0()0()0()0(0(0)
(0)(0)(0)d X X ,,X )X (r d λλAd d Ad r A b f 第1+k 步:计算
⎪⎪⎪⎪⎪⎩

⎪⎪⎪⎪⎨⎧+=><><-
=+=><><-=-=-∇=+------(k)0(k)1)(k )()()
()()1(1(k))()1()1()
1()(1(k)
(k)(k)d X X ,,r ,,X )X (r λλββk k k k k k k k k k k k k Ad d Ad r d d Ad d Ad
r A b f 五、实验内容:
%最速下降法
function [x,k]=fastest(A,b,eps);
x0=zeros(size(b),1);
x=x0;
k=0;
m=1000;
tol=1;
while tol>=eps
r=b-A*x0;
q=dot(r,r)/dot(A*r,r);
x=x0+q*r;
k=k+1;
tol=norm(x-x0);
x0=x;
if k>=m
disp('迭代次数太多,可能不收敛!');
return;
end
end
x
k
%共轭梯度法
function [k,x]=gong_e(A,b)
esp=input('请输入允许误差esp=');
x0=input('请输入初始值x0=');
k = 0 ;
r0 = b-A*x0; %求出dangqian梯度while norm(r0)>esp
r0 = b -A*x0;
k = k + 1 ;
if k==1
p0 = r0 ;
else
lamda=(r0'*r0)/(p0'*A*p0);
r1 = r0 - lamda*A*p0 ;
p0=r0+(r0'*r0)/(r1'*r1)*p0;
x1 = x0 + lamda*p0;
x0=x1;
r0=r1;
end
end
x=r0;
k;
end
六、实验结果:
A=[5 2 0;6 4 1;1 2 5];
b=[10 18 -14]';
eps=1.0e-6;
x =
-0.8750
7.1875
-5.5000
k =
60。

相关文档
最新文档