数学实验“线性方程组的最速下降法与共轭梯度法解法”实验报告(内含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。

计算方法——共轭梯度法求解线性方程组的matlab程序

计算方法——共轭梯度法求解线性方程组的matlab程序

21
附录 2 生成系数矩阵、右端项以及阶数的 matlab 程序
附录 2 生成系数矩阵、右端项以及阶数的 matlab 程序
clc;clear; n = input('输入系数矩阵的阶数 n: '); A = zeros(n,n); A(1,1:2) = [-2,1]; A(n,n-1:n) = [1,-2]; for i=2:n-1; A(i,i-1:i+1) = [1,-2,1]; end b = zeros(n,1); b(1) = -1; b(n) = -1; csvwrite('d:\data_A.txt',A); csvwrite('d:\data_b.txt',b); csvwrite('d:\data_n.txt',n);
k1附录2生成系数矩阵右端项以及阶数的matlab程序22附录2生成系数矩阵右端项以及阶数的matlab程序clc
计算方法上机报告
附录 1 共轭梯度法求解线性方程组的 matlab 程序
clear;clc; aa = input('\n 请选择系数矩阵、右端项以及系数矩阵阶数的输 入方式:\n 从文件中输入数据输入 1,\n 从命令窗口输入数据请输 入 2。\n'); if aa==1 A = load('d:\data_A.txt'); b = load('d:\data_b.txt'); n = load('d:\data_n.txt'); end if aa==2 A = input('\n 输入系数矩阵 A(对称正定):\n'); b = input('\n 输入线性方程组的右端项 b:\n'); n = input('\n 输入系数矩阵的阶数 n:\n'); end epsilon = input('\n 输入计算要求的精度 epsilon:\n'); x(:,1) = rand(n,1); alpha = zeros(n,1); %给定初始的向量

数学实验线性方程组最速下降法与共轭梯度法解法实验报告范文内含matlab程序代码_

数学实验线性方程组最速下降法与共轭梯度法解法实验报告范文内含matlab程序代码_

数学实验线性方程组最速下降法与共轭梯度法解法实验报告范文内含matlab程序代码_西京学院数学软件实验任务书课程名称数学软件实验班级数0901For学号07姓名实验课题线性方程组的最速下降法与共轭梯度法Forperonalueonlyintudyandreearch;notfor实验目的熟悉线性方程组的最速下降法与共轭梯度法实验要求等其中Matlab/C/C++/Java/Maple/Mathematica运用一种语言完成实验内容线性方程组的最速下降法线性方程组的共轭梯度法成绩教师实验五实验报告一、实验名称:最速下降法与共轭梯度法解线性方程组。

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

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

四、实验原理:1.最速下降法:从某个初始点出发,沿在点处的负梯度方向)(0)(0某某)(某f)0)((0)(0A某)f(某br求得的极小值点,即)(1某)某f()(0(0))rfmin(某0然后从出发,重复上面的过程得到。

如此下去,))2((1某某得到序列{}为A的最小,最大特征值。

最速下降法迭代格式:给定初值,)0(某按如下方法决定:)(k某(k)k(k)A某)f(某rb(k)T(k)r,r(k1)(k)(k)r某某kk(k)T)(k,Arr2.共轭梯度法其基本步骤是在点处选取搜索方向,使其与前)(k)k(d某一次的搜索方向关于共轭,即)1(kdA1)(k1)(k)(k0dd,Ad然后从点出发,沿方向求得的极小值点)(k)k(d某)(某f,即)(k1某)k((k1))f(某(某d)minf0如此下去,得到序列{}。

不难求得的)1k(k)()(k0Ad,d某解为)1k(k)((k)d)df(某1k由共轭的定义可得:)1(k)k(0Ad,d(k)(k1),rAd1k(k1)(k1)d,Ad共轭梯度法的计算过程如下:第一步:取初始向量,计算)(0某(0)(0)(0)(0)某Abf(某dr)(0)(0),Adr0(0)(0)d,Ad(1)(0)(0)d某某0第步:计算1k(k)(k)(k)某A)rbf(某(k)(k1)r,Adk1(k1)(k1),dAd)1(k)(k)k(ddr1k(k)(k)r,Adk(k)(k),Add(k1 )(k)(k)d某某0五、实验内容:%最速下降法function[某,k]=fatet(A,b,ep);某0=zero(ize(b),1);某=某0;k=0;m=1000;tol=1;whiletol>=epr=b-A某某0;q=dot(r,r)/dot(A某r,r);某=某0+q某r;k=k+1;tol=norm(某-某0);某0=某;ifk>=mdip('迭代次数太多,可能不收敛!'); ;returnendend某k%共轭梯度法function[k,某]=gong_e(A,b)ep=input('请输入允许误差ep=');某0=input('请输入初始值某0=');k=0;r0=b-A某某0;%求出dangqian梯度whilenorm(r0)>epr0=b-A某某0;k=k+1;ifk==1p0=r0;elelamda=(r0'某r0)/(p0'某A某p0);r1=r0-lamda某A某p0;p0=r0+(r0'某r0)/(r1'某r1)某p0;某1=某0+lamda某p0;某0=某1;r0=r1;endend某=r0;k;end六、实验结果:A=[520;641;125];b=[1018-14]';ep=1.0e-6;某=-0.87507.1875-5.5000k=60仅供个人用于学习、研究;不得用于商业用途。

matlab线性方程组求解实验报告

matlab线性方程组求解实验报告

4. (1)Guass 消去法 请输入系数方阵 A=[3 2 1;2 3 1;1 2 3] 请输入列向量 B=[39;34;26] 合并后的增广矩阵为 c= 3 2 1 2 3 2 1 1 3 39 34 26
开始进行列主元消元法 c=
3 2 1
2 3 2
1 1 3
39 34 26
c= 3.00000000000000 0 0 消元后的矩阵 C c= 3.00000000000000 0 0 2.00000000000000 1.66666666666667 0 1.00000000000000 39.00000000000000 0.33333333333333 8.00000000000000 2.40000000000000 6.60000000000000 2.00000000000000 1.66666666666667 1.33333333333333 1.00000000000000 39.00000000000000 0.33333333333333 8.00000000000000 2.66666666666667 13.00000000000000
A=[2/3 1/3;2/3 1/3;1/3 2/3];%第二次试验的方程组
B=[39/3;34/3;26/3]; c=[];d=[];e=[]; x=zeros(1,3);y=zeros(1,3); y(1)=B(1)-A(1,1)*x(2)-A(1,2)*x(3); y(2)=B(2)-A(2,1)*x(1)-A(2,2)*x(3); y(3)=B(3)-A(3,1)*x(1)-A(3,2)*x(2); c=[c;y(1)];d=[d;y(2)];e=[e;y(3)]; while i<20 %abs(x(1)-y(1))>0.001&abs(x(2)-y(2))>0.001&abs(x(3)-y(3))>0.001 x=y; %x y(1)=B(1)-A(1,1)*x(2)-A(1,2)*x(3);c=[c;y(1)]; y(2)=B(2)-A(2,1)*x(1)-A(2,2)*x(3);d=[d;y(2)]; y(3)=B(3)-A(3,1)*x(1)-A(3,2)*x(2);e=[e;y(3)]; i=i+1; end plot(c,'-r'); hold on; plot(d,'-k'); plot(e,'-b'); hold off legend('x1','x2','x3','Location','NorthWest');

共轭梯度法实验报告

共轭梯度法实验报告

数值代数实验报告一、实验名称:用共轭梯度法解线性方程组。

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

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

四、实验原理:1.共轭梯度法:考虑线性方程组Ax b =的求解问题,其中A 是给定的n 阶对称正定矩阵,b 是给定的n 维向量,x 是待求解的n 维向量.为此,定义二次泛函()2T T x x Ax b x ϕ=-.定理1 设A 对称正定,求方程组Ax b =的解,等价于求二次泛函()x ϕ的极小值点. 定理1表明,求解线性方程组问题就转化为求二次泛函()x ϕ的极小值点问题.求解二次函数极小值问题,通常好像盲人下山那样,先给定一个初始向量0x ,确定一个下山方向0p ,沿着经过点0x 而方向为0p 的直线00x x p α=+找一个点1000x x p α=+,使得对所有实数α有()()00000x p x p ϕαϕα+≤+,即在这条直线上1x 使()x ϕ达到极小.然后从1x 出发,再确定一个下山的方向1p ,沿着直线11x x p α=+再跨出一步,即找到1α使得()x ϕ在2111x x p α=+达到极小:()()11111x p x p ϕαϕα+≤+.重复此步骤,得到一串012,,,ααα 和 012,,,p p p ,称k p 为搜索方向,k α为步长.一般情况下,先在k x 点找下山方向k p ,再在直线k k x x p α=+上确定步长k α使()(),k k k k k x p x p ϕαϕα+≤+最后求出1k k k k x x p α+=+.然而对不同的搜索方向和步长,得到各种不同的算法.由此,先考虑如何确定k α.设从k x 出发,已经选定下山方向k p .令 ()()k k f x p αϕα=+()()()2TT k k k k k k x p A x p b x p ααα=++-+()22TT k k k k k p Ap r p x ααϕ=-+,其中k k r b Ap =-.由一元函数极值存在的必要条件有()220TT k k k k f p Ap r p αα'=-=所确定的α即为所求步长k α,即 T k kk Tk kr p p Ap α=. 步长确定后,即可算出1k k k k x x p α+=+.此时,只要0T k k r p ≠,就有()()()()1k k k k k k x x x p x ϕϕϕαϕ+-=+-()2220T k k TT k kk k k k Tk kr p p Ap r p p Ap αα=-=-<即()()1k k x x ϕϕ+<.再考虑如何确定下山方向k p .易知负梯度方向是()x ϕ减小最快的方向,但简单分析就会发现负梯度方向只是局部最佳的下山方向,而从整体来看并非最佳.故采用新的方法寻求更好的下山方向——共轭梯度法. 下面给出共轭梯度法的具体计算过程:给定初始向量0x ,第一步仍选用负梯度方向为下山方向,即00p r =,于是有00010001000,,T T r r x x p r b Ax p Ap αα==+=-.对以后各步,例如第k+1步(k ≥1),下山方向不再取k r ,而是在过点由向量k r 和1k p -所张成的二维平面21{|,,}k k k x x x r p R πξηξη-==++∈内找出使函数ϕ下降最快的方向作为新的下山方向k p .考虑ϕ在2π上的限制:()1,()k k k x r p ψξηϕξη-=++11()()T k k k k k k x r p A x r p ξηξη--=++++12()T k k k b x r p ξη--++. 计算ψ关于,ξη的偏导得: ()()11112,2,T T T k k k k k kT T k k k k r Ar r Ap r r r Ap p Ap ψξηξψξηη----∂=+-∂∂=+∂其中最后一式用到了10T k k r p -=,这可由k r 的定义直接验证.令 0ψψξη∂∂==∂∂, 即知ϕ在2π内有唯一的极小值点001k k k x x r p ξη-=++,其中0ξ和0η满足 00101011,0.T T T k k k k k k T Tk k k k r Ar r Ap r r r Ap p Ap ξηξη----⎧+=⎨+=⎩由于0k r ≠必有00ξ≠,所以可取()01001k k k k p x x r p ηξξ-=-=+作为新的下山方向.显然,这是在平面2π内可得的最佳下山方向.令010k ηβξ-=,则可得1111.T k k k T k k r Ap p Ap β----=-注:这样确定的k p 满足10Tkk p Ap -=,即k p 与1k p -是相互共轭的. 总结上面的讨论,可得如下的计算公式:T k kk Tk kr p p Ap α= , 1k k k k x x p α+=+, 11k k r b Ax ++=-,1T k kk Tk kr Ap p Ap β+=-, 11k k k k p r p β++=+. 在实际计算中,常将上述公式进一步简化,从而得到一个形式上更为简单而且对称的计算公式.首先来简化1k r +的计算公式:11()k k k k k k k k r b Ax b A x p r Ap αα++=-=-+=-.因为k Ap 在计算k α是已经求出,所以计算1k r +时可以不必将1k x +代入方程计算,而是从递推关系1k k k r b Ap α+=-得到.再来简化k α和k β的计算公式.此处需要用到关系式1110,T T T k k k k k k r r r p r p +-+=== 1,2,k =.从而可导出1111,T T k k k k r r r α+++=-, ()111TT T k k k k k k k k k p Ap p r r p r αα+=-=()1111T Tk k k k k k k kr r p r r βαα--=+=.由此可得,T k k k T k k r r p Ap α=, 11.T k k k T k kr r r r β++=.从而有求解对称正定方程组的共轭梯度法算法如下:0x =初值00r b Ax =-;0k =while 0k r ≠1k k =+ if 1k = 00p r =else21122T T k k k k k r r r r β-----= 1122k k k k p r p β----=+ end11111T Tk k k k k r r p Ap α-----=111k k k k x x p α---=+111k k k k r r Ap α---=-endk x x =注:该算法每迭代一次仅需要使用系数矩阵A 做一次矩阵向量积运算. 定理2 由共轭梯度法得到的向量组{}i r 和{}i p 具有如下基本性质: (1)0T i j p r =, 0;i j k ≤<≤ (2)0T i j r r =, i j ≠,0,;i j k ≤≤ (3)0T i j p Ap =, i j ≠,0,;i j k ≤≤ (4)000{,,}{,,}(,,1)k k span r r span p p A r k κ==+,其中0000(,,1){,,,}k A r k span r Ar A r κ+=,通常称之为Krylov 子空间.下面给出共轭梯度法全局最优性定理:定理3 用共轭梯度法计算得到的近似解k x 满足()(){}00min :(,,)k x x x x A r k ϕϕκ=∈+或{}**00min :(,,)k AAx x x x x x A r k κ-=-∈+,其中Ax=*x 是方程组Ax b =的解,0(,,)A r k κ是由所定义的Krylov 子空间. 定理2表明,向量组0,,k r r 和0,,k p p 分别是Krylov 子空间0(,,1)A r k κ+的正交基和共轭正交基.由此可知,共轭梯度法最多n 步便可得到方程组的解*x .因此,理论上来讲,共轭梯度法是直接法.然而实际使用时,由于误差的出现,使k r 之间的正交性很快损失,以致于其有限步终止性已不再成立.此外,在实际应用共轭梯度法时,由于一般n 很大,以至于迭代()O n 次所耗费的计算时间就已经使用户无法接受了.因此,实际上将共轭梯度法作为一种迭代法使用,而且通常是k r 是否已经很小及迭代次数是否已经达到最大允许的迭代次数max k 来终止迭代.从而得到解对称正定线性方程组的实用共轭梯度法,其算法如下:x =初值0;k =;r b Ax =-T r r ρ=while)()max2band k kε><1k k =+if 1k = p r = else;p r p βρρβ==+ end;;T Ap p x x p ωαρωα===+ ;;T r r r r αωρρρ=-== end算法中,系数矩阵A 的作用仅仅是用来由已知向量p 产生向量Ap ω=,这不仅可以充分利用A 的稀疏性,而且对某些提供矩阵A 较为困难而由已知向量p 产生向量Ap ω=又十分方便的应用问题是十分有益的。

matlab共轭梯度法求解方程组

matlab共轭梯度法求解方程组

主题:matlab共轭梯度法求解方程组近年来,随着科学技术的不断发展,数学建模和计算机仿真成为科学研究和工程技术领域的重要手段。

在实际应用中,我们常常需要解决线性方程组的求解问题,而共轭梯度法作为一种高效的迭代求解方法,广泛应用于信号处理、图像处理、地球物理勘探和优化问题等领域。

本文将介绍如何利用matlab中的共轭梯度法求解线性方程组的基本原理和实际操作方法。

1. 共轭梯度法的基本原理共轭梯度法是一种迭代法,用于求解对称正定线性方程组Ax=b。

该方法的核心思想是通过一系列的迭代操作,逐步逼近方程组的解,直到满足一定的精度要求。

在每一步迭代中,共轭梯度法利用残差和方向向量的共轭性质,不断寻找最优的步长,从而实现方程组的求解。

2. matlab中共轭梯度法的基本调用方法在matlab中,调用共轭梯度法求解线性方程组非常简单。

需要将方程组的系数矩阵A和右端向量b输入到matlab中,然后利用内置函数conjugateGradient进行求解。

具体的调用方法如下:x = conjugateGradient(A, b, x0, maxIter, tol)其中,A为系数矩阵,b为右端向量,x0为初始解向量,maxIter为最大迭代次数,tol为精度要求。

调用完毕后,matlab将返回方程组的近似解x。

3. 共轭梯度法在实际工程中的应用共轭梯度法作为一种高效的求解方法,在工程技术领域得到了广泛的应用。

以图像处理为例,图像处理中经常需要解决大规模的线性方程组,而共轭梯度法能够高效地求解这类问题,提高了图像处理算法的效率和稳定性。

另外,在地球物理勘探中,共轭梯度法也被广泛应用于三维数据的快速处理和解释。

可以说,共轭梯度法在实际工程中发挥着重要的作用。

4. 共轭梯度法的优缺点分析尽管共轭梯度法具有非常高的效率和稳定性,但是该方法也存在一些缺点。

该方法只适用于对称正定的线性方程组,对于一般的线性方程组并不适用。

共轭梯度法的收敛速度受到方程条件数的影响,对于病态问题,可能收敛速度较慢。

《数学实验》实验报告——解线性方程组

《数学实验》实验报告——解线性方程组
《数学实验》实验报告
班级
****
学号
****
姓名
****
成绩
试验内容
解线性方程组
试验
类别
自选试验
试验
时间
试验问题:
1.比较用逆矩阵法、除法、克拉默法则解方程Ax=b的用时和误差
2.求解方程组最多零解
试验目的:
1.了解MATLAB在实际问题中的应用
2.学会利用MATLAB做图并求解实际问题
问题分析(可含问题的背景、相关知识、数学建模与求解的方法等):
2、
function C=solution(A)
[l,u]=lu(A);
M1=[];M2=[];e=[];f=[];C=[];
r=rank(A);rf=size(A);n=rf(1,2);
k=1;
for i=1:r
while k<=n
if u(i,k)~=0
e=[e,k];
M1=[M1,u(1:r,k)];
k=k+1;
break;
else
f=[f,k];
M2=[M2,-u(1:r,k)];
end
k=k+1;
end
end
M2=[M2,-u(1:r,k:n)];
f=[f,k:n];
for i=1:(n-r)
y=zeros((n-r),1);
y(i)=1;
x=M1\(M2*y);
c=zeros(n,1);
for j=1:r
c(e(j))=x(j);
end
for j=1:(n-r)
c(f(j))=y(j);
end
C=[C,c];
end
结果分析:

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

最速下降法与共轭梯度法实验
% 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); %把符号变量转为数值
a(i)=-(d(:,i)'*g1(:,i))/(d(:,i)'*G*d(:,i));
X(:,i+1)=X(:,i)+a(i)*d(:,i);
g1=[g1 subs(subs(g,x1,X(1,i+1)),x2,X(2,i+1))];
m=norm(g1(:,i+1));
i=i+1;
end
case 'WYL'
i=i+1;
end
case 'DY'
while m>=e
k(i-1)=g1(:,i)'*g1(:,i)/(d(:,i-1)'*(g1(:,i)-g1(:,i-1)));
d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);
a(i)=-(d(:,i)'*g1(:,i))/(d(:,i)'*G*d(:,i));
fxx=subs(fxx); %将符号变量转化为数值
fxy=subs(fxy);
fyx=subs(fyx);
fyy=subs(fyy);
x=[fxx,fxy;fyx,fyy]; %求hesse矩阵
运行函数
syms x1 x2;
  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。

相关文档
最新文档