数值方法迭代法解线性方程组实验报告
- 格式:doc
- 大小:93.56 KB
- 文档页数:5
本科实验报告课程名称:计算机数值方法实验项目:方程求根、线性方程组的直接解法、线性方程组的迭代解法、代数插值实验地点:专业班级:学生姓名:指导教师:实验一方程求根}五、实验结果与分析二分法实验结果迭代法实验结果结果分析:本题目求根区间为[1,2],精度满足|x*-x n|<0.5×10-5,故二分法用公式|x*-x n|<(b-a)/ 2n,可求得二分次数并输出每次结果。
对迭代法首先要求建立迭代格式。
迭代格式经计算已输入程序之中,故直接给初值便可利用迭代法求出精度下的解。
六、讨论、心得每次的实验都是对已学过的理论知识的一种实战。
通过本次实验,我将二分法与迭代法的思路清晰化并且将其变成计算机设计语言编写出来,运用到了实际解决问题上感觉很好。
我自认为本次跟其他同学比较的优点在于我在二分法实现的时候首先利用换底公式将需要的二分次输输出,如此便很清晰明了的知道接下来每一步的意思。
迭代法给我的感觉便是高度的便捷简化,仅用几行代码便可以同样解决问题。
相比较二分法来说,我更喜欢迭代的思路。
实验二线性方程组的直接解法for(k=n-2;k>=0;k--){sum=0;for(j=k+1;j<n;j++)sum=sum+a[k][j]*x[j];x[k]=(b[k]-sum)/a[k][k];}for(i=0;i<n;i++)printf("x[%d]=%f ",i,x[i]); printf("\n"); //输出解向量x}五、实验结果与分析结果结果分析:如上图所示,输入线性方程组元数n=3,则会要求输入3*3的系数矩阵A与向量b构成的增广矩阵。
根据算法需要将系数矩阵A消元成上三角矩阵。
随后根据矩阵乘法公式变形做对应的回代。
六、讨论、心得本次实验在编写时候感觉还好,感觉将思路变成了程序设计语言,得以实现题目的要求。
但是在运行以及结果分析的时候,感觉到了本实验的一些不足之处:就是我的实验虽然可以实现不同的元数的线性方程组求解,但是缺少了分析初始条件——主元素不能为零。
数值分析迭代法数值分析实验报告 jacobi迭代和seidel迭代分析导读:就爱阅读网友为您分享以下“数值分析实验报告jacobi迭代和seidel迭代分析”资讯,希望对您有所帮助,感谢您对的支持!数值分析实验报告一、实验目的1、了解熟悉jacobi迭代法和seidel迭代法的解法2、将原理与matlab语言结合起来,编程解决问题3、分析实验结果二、实验题目设线性方程组为2 2 31 201 31 x1 1 7 x801240 2 x 103 10 15 x 1 4考察用jacobi迭代法和seidel迭代法求解该线性方程组的收敛情况。
如果收敛,给出误差满足x(k) x(k 1)10 4的解。
三、实验原理将A 作如下分解A D L U这里a11D a22 0 a ,L 21 anna n100 a n2 0 0 a12 a1n 0 0 0 a2n ,0 00 0 JacobiU迭代矩阵为BJ D 1(L U)Seidel迭代矩阵为BS (D L) 1U它们的迭代格式都可化为x(k 1) Bx(k) g则迭代格式对任何初值都瘦脸的充要条件是迭代矩阵谱半径 (B) max k 1,其中, k是矩阵B的n个特征值,k 1,2 ,n 1 k nJacobi迭代矩阵的特征方程为det( I B J) 0Seidel迭代矩阵的特征方程为det( I B S) det( (D L) U) 0四、实验内容用matlab编写计算jacobi迭代矩程序,建立m文件如下:function[M]=BJ(A)D=diag(diag(A));L=tril(-A)+D;U=triu(-A)+D;M=inv(D)*(L+U);输入:>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];>> [M]=BJ(A)M:M =0 -0.0500 0.1500 0.0500-0.1667 0 0 -0.38890.0250 -0.0500 0 0.0500-0.2000 0 0.2000 00 0.050.150.05 0.166700 0.3889 则jacobi迭代矩阵为:BJ 0.025 0.0500.05 0.2 00.20用matlab求jacobi迭代矩阵的特征根的算法如下:>> A=[0 -0.05 0.15 -0.05;-0.67 0 0 -0.39;0.025 -0.05 0 0.05;-0.2 0 0.2 0];[V,D]=eig(A)V =-0.1892 + 0.0450i -0.1892 - 0.0450i -0.3812 -0.5005-0.9467 -0.9467 0.8867 0.5461 -0.1528 - 0.1181i -0.1528 + 0.1181i -0.2099 -0.0466 -0.1056 + 0.1325i -0.1056 - 0.1325i 0.1561 0.6701D =-0.1774 + 0.0864i 0 0 0 0 -0.1774 - 0.0864i 0 0 0 0 0.2194 0 0 0 0 0.1355 则最大特征根为:0.2194 则(BJ) 0.2194 1,所以jacobi迭代法收敛用matlab编程jacobi迭代法求根的算法:function [n,x]=jacobi(A,b,X,nm,w)%用雅克比迭代法求解方程组Ax=b%输入:A为方程组的系数矩阵,b为方程组右端的列向量,X为迭代初值构成的列向量,nm为最大迭代次数,w 为误差精度%输出:x为求得的方程组的解构成的列向量,n为迭代次数n=1;m=length(A);D=diag(diag(A)); %令A=D-L-U,计算矩阵DL=tril(-A)+D; %令A=D-L-U,计算矩阵LU=triu(-A)+D; %令A=D-L-U,计算矩阵UM=inv(D)*(L+U); %计算迭代矩阵g=inv(D)*b; %计算迭代格式中的常数项%下面是迭代过程while n<=nmx=M*X+g; %用迭代格式进行迭代if norm(x-X,2)<wdisp(…迭代次数为‟);ndisp(…方程组的解为‟);xreturn;%上面:达到精度要求就结束程序,输出迭代次数和方程组的解endX=x;n=n+1;end%下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)disp(…在最大迭代次数内不收敛!‟);输入数据:>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];b=[1;2;10;-1];X=[0;0;0;0];>> nm=100;>> w=1e-4;>> [n,x]=jacobi1(A,b,X,nm,w)迭代次数为n =6方程组的解为x =0.06870.16450.2352-0.1667n =6x =0.06870.16450.2352-0.1667所以,满足精度的根为x = 0.0687 0.1645 0.2352用matlab编程计算seidel迭代矩阵算法为:function[M]=BS(A)D=diag(diag(A));L=tril(-A)+D;U=triu(-A)+D;M=inv(D-L)*U;输入:>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5]; >> [M]=BS(A)M =0 -0.0500 0.1500 0.0500 0 0.0083 -0.0250 -0.3972 -0.1667 迭代次数为6次0 -0.0017 0.0050 0.07110 0.0097 -0.0290 0.0042则seidel迭代矩阵为:0.150.05 0 0.05 00.0083 0.025 0.3972BS 0 0.00170.0050.0711 00.0097 0.0290.0042用matlab编程求得seidel矩阵的算法为:>> A=[0 -0.05 0.15 0.05;0 0.0083 -0.025 -0.3972;0 -0.0017 0.005 0.0711;0 0.0097 -0.029 0.0042];[V,D]=eig(A)V =1.0000 -0.1596 + 0.6750i -0.1596 - 0.6750i -0.91040 0.6965 0.6965 0.3924 0 -0.1250 + 0.0028i -0.1250 - 0.0028i 0.1313 0 0.0070 - 0.1348i 0.0070 + 0.1348i 0.0000D =0 0 0 0 0 0.0088 + 0.0768i 0 0 0 0 0.0088 - 0.0768i 0 0 0 0 -0.0001则特征根为 0 0.008+0.0768i 0.0088-0.0768i-0.0001则 (BS) 0.08 1,所以seidel迭代法收敛用seidel迭代法求根的算法为:function [n,x]=gaussseidel(A,b,X,nm,w)%用高斯-赛德尔迭代法求解方程组Ax=b%输入:A为方程组的系数矩阵,b为方程组右端的列向量,X为迭代初值构成的列向量,nm为最大迭代次数,w 为误差精度%输出:x为求得的方程组的解构成的列向量,n为迭代次数n=1;m=length(A);I=eye(m); %生成m*m阶的单位矩阵D=diag(diag(A)); %令A=D-L-U,计算矩阵DL=tril(-A)+D; %令A=D-L-U,计算矩阵LU=triu(-A)+D; %令A=D-L-U,计算矩阵U M=inv(D-L)*U; %计算迭代矩阵g=inv(I-inv(D)*L)*(inv(D)*b); %计算迭代格式中的常数项%下面是迭代过程while n<=nmx=M*X+g; %用迭代格式进行迭代if norm(x-X,2)<wdisp(…迭代次数为‟);ndisp(…方程组的解为‟);xreturn;%上面:达到精度要求就结束程序,输出迭代次数和方程组的解endX=x;n=n+1;end%下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)disp(…在最大迭代次数内不收敛!‟);disp(…最大迭代次数后的结果为‟);x输入数据:>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];b=[1;2;10;-1];X=[0;0;0;0];nm=100;w=1e-4;[n,x]=gaussseidel(A,b,X,nm,w) 迭代次数为n =5方程组的解为x =0.06870.16450.2352-0.1667n =5x =0.06870.16450.2352-0.166满足精度的根为x =0.0687 0.1645 0.2352 -0.1667 迭代次数为5次五、实验分析从实验过程可以看到求出满足精度的根,seidel迭代要比jacobi迭代快,这是因为在jacobi迭代计算中,计算向量x(k 1)时是按分量的角标由小到大依次计算的。
简单迭代法求解线性方程组1.原理:将原线性方程组Ax=b中系数矩阵的主对角线移到一边并将其系数化为一,然后在给定迭代初值的情况下通过迭代的方法求解线性方程组的值。
2.C语言实现方式:(1)计算迭代矩阵:将系数矩阵的所有值分别处以各自所在行的主对角线值,然后将主对角线赋值为0。
(2)输入迭代初值,进行迭代将迭代初值存入y[n]矩阵,然后利用迭代式nn=nn+x[i][j]*y[j];y[i]=nn+b[i];经过有限次迭代得到误差要求以内的值3.源程序如下:#include<iostream>#include<math.h>#include<iomanip>using namespace std;#define kk 50 //定义最大方程元数int n,i,c,j,hh,gg,mm;double A[kk][kk],x[kk][kk],b[kk],y[kk],a[kk],z[kk],m,nn,d,e=1,w,fff ;void main(){cout<<"输入的方程元数"<<endl; //数据的输入cin>>n;cout<<"请输入方程系数矩阵:"<<endl;for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>A[i][j];cout<<"请输入右边向量:"<<endl;for(i=0;i<n;i++)cin>>b[i];cout<<"输入你想要的迭代精度(建议1e-5以上)!"<<endl; cin>>fff;cout<<"输入最大迭代次数(建议300次以上)!"<<endl; cin>>mm;//计算出迭代矩阵for(i=0;i<n;i++){b[i]=b[i]/A[i][i];for(j=0;j<n;j++){if(i==j){x[i][i]=0;}else{x[i][j]=-A[i][j]/A[i][i];}}}//输出迭代矩阵cout<<"计算出迭代矩阵为:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<x[i][j]<<" ";cout<<b[i]<<" ";cout<<endl;}//赋迭代初值cout<<"输入迭代初值"<<endl;for(i=0;i<n;i++)cin>>y[i];int f=1;//简单迭代法cout<<" ";for(i=1;i<n+1;i++)cout<<'\t'<<"X["<<i<<"]"<<" "<<'\t';cout<<"精度";cout<<endl;cout<<"迭代初值为: ";cout<<setiosflags(ios::fixed);for(i=0;i<n;i++)cout<<y[i]<<" ";cout<<endl;while(e>fff){for(i=0;i<n;i++){z[i]=y[i];nn=0;for(j=0;j<n;j++){nn=nn+x[i][j]*y[j];y[i]=nn+b[i];}e=fabs(z[0]-y[0]);if(fabs(z[i]-y[i])>e)e=fabs(z[i]-y[i]);if(i==0){cout<<setiosflags(ios::fixed);cout<<"第"<<setw(3)<<setprecision(3)<<f++<<"次迭代"<<" "; }cout<<setiosflags(ios::fixed);cout<<setw(8)<<setprecision(8)<<y[i]<<" ";}cout<<e;cout<<endl;if(f>mm){cout<<"迭代次数大于"<<mm<<"次"<<endl;cout<<"认为方程发散,迭代不收敛"<<endl;exit(1);}}cout<<endl;cout<<endl;cout<<"方程迭代了"<<f-1<<"次,达到你所要求的精度"<<fff<<endl;cout<<"最后结果为:"<<endl;cout<<endl;for(i=0;i<n;i++){cout<<"X"<<"["<<i+1<<"]"<<"="<<y[i];cout<<endl;}exit(1);}4.实验数据和结果:按照提示依次输入方程元数,系数矩阵,右边向量和迭代初值。
湖南大学电气与信息工程学院 《数值计算》课程 上机实验报告一. 实验目的:了解gauss 消去法和迭代法matlab 算法实现求任意方程组的根。
二. 实验内容:用gauss 消去法和迭代法求解下列线性方程组:263234323923321321321=++=++=++x x x x x x x x x1.求出gauss 消去法的上三角矩阵和方程组的解321,,x x x ,并在命令窗口显示;2.显示迭代法求解过程中所有结果(,,,,,,,,,321131*********NN N x x x x x x x x x ⋯⋯)要求求解精度达到10^-5.三. 算法介绍或方法基础1) 消去法:消元过程:设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 nk j j k kj k kk a x abx高斯赛德尔迭代法:由雅可比迭代公式可知,在迭代的每一步计算过程中是用()k x的全部分量来计算()1+k x的所有分量,显然在计算第i 个分量()1+k ix 时,已经计算出的最新分量()()1111+-+k i k x ,...,x 没有被利用,从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第1+k 次近似()1+k x 的分量()1+k jx 加以利用,就得到所谓解方程组的高斯—塞德(Gauss-Seidel )迭代法.把矩阵A 分解成U L D A --= (6)其中()nn a ,...,a ,a diag D 2211=,U ,L --分别为A 的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成 ()b Ux x L D +=-即 22f x B x +=其中()()b L D f ,U L D B 1212---=-= (7)以2B 为迭代矩阵构成的迭代法(公式)()()221f x B x k k +=+ (8)称为高斯—塞德尔迭代法(公式),用 量表示的形式为⎩⎨⎧[],...,,k ,n ,,i x a x a b a xi j n i j )k (j ij )k (j ij i ii)k (i21021111111==∑∑--=-=+=++ (9)由此看出,高斯—塞德尔迭代法的一个明显的优点是,在电算时,只需一组存储单元(计算出()1+k ix 后()k ix 不再使用,所以用()1+k ix 冲掉()k ix ,以便存放近似解.四.程序1)消去法:function x=gauss(A,b)n=length(b);A=[A,b];for k=1:(n-1)A((k+1):n,(k+1):(n+1))=A((k+1):n,(k+1):(n+1))... -A((k+1):n,k)/A(k,k)*A(k,(k+1):(n+1));A((k+1):n,k)=zeros(n-k,1);Aendx=zeros(n,1);x(n)=A(n,n+1)/A(n,n);for k=n-1:-1:1x(k,:)=(A(k,n+1)-A(k,(k+1):n)*x((k+1):n))/A(k,k);end2)迭代法:function EX()a=input('请输入系数矩阵a:');b=input('请输入矩阵b:');N=input('请输入最大迭代次数N:');esp=input('请输入近似解的误差限:');if any(diag(a))==0error('系数矩阵错误,迭代终止!')endD=diag(diag(a));X0=zeros(size(b));x1=0;x2=0;x3=0;X1=[x1;x2;x3];h=inv(D)*b;B=inv(D)*(D-a);B1=triu(B);B2=tril(B);k=1;fprintf('高斯-赛德尔迭代法');fprintf('第0次迭代得:')disp(X1');while k<=Nx1=h(1,1)+B1(1,:)*X0;X1=[x1;x2;x3];x2=h(2,1)+B1(2,:)*X0+B2(2,:)*X1;X1=[x1;x2;x3];x3=h(3,1)+B2(3,:)*X1;X1=[x1;x2;x3];if norm(X1-X0,inf)<espfprintf('已满足误差限。
线性代数方程组的数值解法【实验目的】1. 学会用MATLAB 软件数值求解线性代数方程组,对迭代法的收敛性和解的稳定性作初步分析;2. 通过实例学习用线性代数方程组解决简化的实际问题。
【实验内容】【题目1】通过求解线性方程组A1x=b1和A2x=b2,理解条件数的意义和方程组的性态对解的影响。
其中A1是n阶范德蒙矩阵,即⎡1x0⎢1x1⎢A1=⎢⎢⎢⎣1xn-12x0x12 2xn-1n-1⎤ x0⎥ x1n-1⎥1,...,n-1 ,xk=1+0.1k,k=0,⎥ n-1⎥ xn-1⎥⎦A2是n阶希尔伯特矩阵,b1,b2分别是A1,A2的行和。
(1)编程构造A1(A2可直接用命令产生)和b1,b2;你能预先知道方程组A1x=和A2x=。
b2的解吗?令n=5,用左除命令求解(用预先知道的解可检验程序)b1(2)令n=5,7,9,…,计算A1,A2的条件数。
为观察它们是否病态,做以下试验:b1,b2不变,A1和A2的元素A1(n,n),A2(n,n)分别加扰动ε后求解;A1和A2不变,b1,b2的分量b1(n),分析A和b的微小扰动对解的影响。
b2(n)分别加扰动ε求解。
ε取10-1010,-8,10-6。
(3)经扰动得到的解记做x~,计算误差-x~x,与用条件数估计的误差相比较。
1.1构造A1,A2和b1,b2首先令n=5,构造出A1,A2和b1,b2。
首先运行以下程序,输出A1。
运行以下程序对A1,A2求行和:由于b1,b2分别是A1,A2的行和,所以可以预知x1=运行下列程序,用左除命令对b1,b2进行求解:得到以下结果: T。
x2=(1,1, ,1)1.2 计算条件数并观察是否为病态1.不加扰动,计算条件数。
运行以下程序:由此可知,A1,A2的条件数分别是3.574∗10, 4,766∗10。
2.b1,b2不变,A1(n,n),A2(n,n)分别加扰动(1)n=5时设x11,x12,x13分别为A1添加扰动10−10,10−8,10−6后的解。
数学与计算科学学院《数值分析》课程设计题目:迭代法解线性方程组专业:信息与计算科学学号:*******-24*名:**指导教师:**成绩:二零一六年六月二十日一 、前言:(目的和意义)1.实验目的①掌握用迭代法求解线性方程组的基本思想和步骤。
②了解雅可比迭代法,高斯-赛德尔法和松弛法在求解方程组过程中的优缺点。
2.实验意义迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重要方法。
迭代法的基本思想是用逐次逼近的方法求解线性方程组。
比较雅可比迭代法,高斯-赛德尔迭代方法和松弛法,举例子说明每种方法的试用范围和优缺点并进行比较。
二、数学原理:设有方程组b Ax = …① 将其转化为等价的,便于迭代的形式f Bx x += …② (这种转化总能实现,如令b f A I B =-=,), 并由此构造迭代公式f Bx x k k +=+)()1( …③ 式中B 称为迭代矩阵,f 称为迭代向量。
对任意的初始向量)0(x ,由式③可求得向量序列∞0)(}{k x ,若*)(lim x xk k =∞→,则*x 就是方程①或方程②的解。
此时迭代公式②是收敛的,否则称为发散的。
构造的迭代公式③是否收敛,取决于迭代矩阵B 的性1.雅可比迭代法基本原理设有方程组),,3,2,1(1n i b x aj j nj ij==∑= …①矩阵形式为b Ax =,设系数矩阵A 为非奇异矩阵,且),,3,2,1(,0n i a ii =≠ 从式①中第i 个方程中解出x ,得其等价形式)(111j nj j ij ii i x a b a x ∑≠=-= …②取初始向量),,,()0()0(2)0(1)0(n x x x x=,对式②应用迭代法,可建立相应的迭代公式:)(111)()1(∑≠=++-=nj j i k j ij ii k ib x a a x…③ 也可记为矩阵形式: J x J k F B xk +==)()1( …④若将系数矩阵A 分解为A=D-L-U ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=--=--00000000000000111211212211212222111211n n n nn n nn nn n n n n a a a a a a a a a a a a a a a a a a U L D A式中⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=nn a a a D2211,⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=-0000121323121nn n n a a a a a a L ,⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=-0000122311312n n n n a a a a a a U 。
【关键字】分析数值分析实验报告(3)学院:信息学院班级:计算机0903班姓名:王明强学号:课题三线性方程组的迭代法一、问题提出1、设线性方程组=x= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )2、设对称正定阵系数阵线方程组=x = ( 1, -1, 0, 2, 1, -1, 0, 2 )3、三对角形线性方程组=x= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )试分别选用Jacobi 迭代法,Gauss-Seidol迭代法和SOR方法计算其解。
二、要求1、体会迭代法求解线性方程组,并能与消去法做以比较;2、分别对不同精度要求,如由迭代次数体会该迭代法的收敛快慢;3、对方程组2,3使用SOR方法时,选取松弛因子=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;4、给出各种算法的设计程序和计算结果。
三、目的和意义1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;gauss消去法是一种规则化的加减消元法。
它的基本思想是:通过逐次消元计算把需要求求解的线性方程转化成上三角形方程组,也就是把线性方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组求解转化为等价(同解)的上三角方程组的求解。
消去法是直接方法的一种。
优点:对于简单的方程组可以很快得出结果,计算中如果没有舍入误差,在稳定的方程组中容易得到精确解,理论上可以求解任何可以求出解得方程组。
缺点:数值有的时候不稳定(可采用列主元gauss消去法),既要消去,又要回代,算法实现起来比较复杂,不适用于大规模方程组。
迭代法是从某一取定的初始向量x(0)出发,按照一个适当的迭代公式,逐次计算出向量x(1),x(2),......,使得向量序列{ x(k)}收敛于方程组的精确解,这样,对于适当大的k,可取x(k)作为方程组的近似解。
优点:算法简单,程序易于实现,特别适用求解庞大稀疏线性方程组。
1 / 8数值分析实验六:解线性方程组的迭代法2016113 张威震1 病态线性方程组的求解1.1 问题描述理论的分析表明,求解病态的线性方程组是困难的。
实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(),,,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。
通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。
实验要求:(1)选择问题的维数为6,分别用Gauss 消去法、列主元Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数(至少到100),仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法1.2 算法设计首先编写各种求解方法的函数,Gauss 消去法和列主元高斯消去法使用实验5中编写的函数myGauss.m 即可,Jacobi 迭代法函数文件为myJacobi.m ,GS 迭代法函数文件为myGS.m ,SOR 方法的函数文件为mySOR.m 。
1.3 实验结果1.3.1 不同迭代法球求解方程组的结果比较选择H 为6*6方阵,方程组的精确解为x* = (1, 1, 1, 1, 1, 1)T ,然后用矩阵乘法计算得到b ,再使用Gauss 顺序消去法、Gauss 列主元消去法、Jacobi 迭代法、G-S 迭代法和SOR 方法分别计算得到数值解x1、x2、x3、x4,并计算出各数值解与精确解之间的无穷范数。
Matlab 脚本文件为Experiment6_1.m 。
迭代法的初始解x 0 = (0, 0, 0, 0, 0, 0)T ,收敛准则为||x(k+1)-x(k)||∞<eps=1e-6,SOR方法的松弛因子选择为w=1.3,计算结果如表1。
广东金融学院实验报告课程名称:数值分析实验目的及要求实验目的:题一:通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法的优点,以及方程组系数矩阵和右端向最的微小变化对解向最的影响。
比较各种直接接法在解线性方程组中的效果;题二:认识齐种迭代法收敛的含义、影响齐迭代法收敛速度的因素。
实验要求:题一:(1)在MATLAB中编写程序用列主元高斯消去法和LU分解求解上述方程组,输出曲b中矩阵A 及向量b和A二LU分解中的L及U, detA及解向量X.(2)将方程组中的2. 099999改为2. 1, 5. 900001改为5. 9,用列主元高斯消去法求解变换后的方程组,输出解向最x及detA,并与(1)中的结果比较。
(3)用MATLAB的内部函数inv求出系数矩阵的逆矩阵,再输入命令x=inv(A)*b,即可求出方程组的解。
请与列主元高斯消公法和LU分解法求出的解进行比较,体会选主元的方法具有良好的数值稳定性。
用MATLAB的内部曲数det求出系数行列式的值,并与(1)、(2)中输出的系数行列式的值进行比较。
(4)比较以上各种直接解法在解线性方程组中的效果。
题二:(1)选取不同的初始向M:X(0)及右端向最b,给泄迭代误差要求,用Jacobi迭代法和Gauss-Seidel迭代法求解,观察得到的序列是否收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论。
列岀算法清单。
(2)用SOR迭代法求上述方程组的解,松弛系数血取1<69<2的不同的三个值,在< 10"5时停止迭代,记录迭代次数,分析计算结呆与松弛系数血的关系并得出你的结论。
(3)用MATLAB的内部函数inv求出系数矩阵的逆矩阵.再输入命令^inv(A)*b>即可求出上述各个方程组的解.并与上述三种方法求出的解进行比较。
请将比较结果列入卜表。
方程组的解X1 Xr■迭代次数误差楮确解Jacibi解法Gause・seidel 解法SOR 解法00= 60= 60=实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)1. Win72. Mat lab 7.0实验内容及步骤(包含简要的实验步骤流程) 实验内容:题一:解卜列线性方程组'10 -7‘X 】、(8、-3 2.099999 62Xr5.9000015-1 5 -15、12> 0< 1 >题二研究解线性方程组 做=b 迭代法的收敛性、收敛速度以及SOR 方法中/佳松弛因子的选取问题, 用迭代法求解做二b,其中・4 -1r■7 A=4 -81 ,b =-21-2 ■1515实验结果(包括程序或图表、结论陈述.数据记录及分析等,可附页)题一:直接解法解线性方程组(1)列主兀高斯消去法与LU 分解求解列主元高斯消去法:编写matalab 程序(见附录gaosi.m ),输出矩阵10.000 -7.000 0.000= 0.000 2.5000-5.000一 0.000 0.0006.0000020.000 0.000 0.000向量8 b =1 8.300 L5.0800J解向量:X = (0 ・-1 , 1 r I )7 其中系数行列式的值det (A )=762.00009LU 分解求解:编J matalab 程序(见附录zhjLU. m 和LU ・m ),执行输出:-1.5 2.300 5.080-3.0001.000000.00000.5000 -25000001.0000 0.2000 -24000000.9600 10.0000 -7.0000 0.0000 1.0000n = 0.0000-0.0000010.0000 2.3000 —0.0000 0.000015000000 57500000.0000 0.0000 0.0000 5.0800在matlab 命令窗II 输入L*U ,可以得到A 二L*U ,即分解结果正确。
数值分析实验报告实验一、解线性方程组的直接方法——梯形电阻电路问题利用追赶法求解三对角方程组的方法,解决梯形电阻电路问题:电路中的各个电流{1i ,2i ,…,8i }须满足下列线性方程组:R V i i =- 22 210 252321=-+-i i i 0 252 432=-+-i i i 0 252 543=-+-i i i 0 252 654=-+-i i i 0 252 765=-+-i i i 0 252 876=-+-i i i 052 87=+-i i设V 220=V ,Ω=27R ,运用追赶法,求各段电路的电流量。
问题分析:上述方程组可用矩阵表示为:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------00000001481.8522520000002520000002520000002520000002520000002520000002287654321i i i i i i i i问题转化为求解A x b =,8阶方阵A 满足顺序主子式(1,2...7)0i A i =≠,因此矩阵A存在唯一的Doolittle 分解,可以采用解三对角矩阵的追赶法!追赶法a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0]; d=[220/27 0 0 0 0 0 0 0];Matlab 程序function x= zhuiganfa( a,b,c,d )%追赶法实现要求:|b1|>|C1|>0,|bi|>=|ai|+|ci| n=length(b); u=ones(1,n); L=ones(1,n); y=ones(1,n); u(1)=b(1); y(1)=d(1); for i=2:nL(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*L(i); y(i)=d(i)-y(i-1)*L(i); endx(n)=y(n)/u(n); for k=n-1:-1:1x(k)=(y(k)-c(k)*x(k+1))/u(k); end endMATLAB 命令窗口输入:a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0] d=[220/27 0 0 0 0 0 0 0];x= zhuiganfa(a,b,c,d )运行结果为:x =8.1478 4.0737 2.0365 1.0175 0.5073 0.2506 0.1194 0.0477存在问题根据电路分析中的所讲到的回路电流法,可以列出8个以回路电流为独立变量的方程,课本上给出的第八个回路电流方程存在问题,正确的应该是78240i i -+=;或者可以根据电路并联分流的知识,同样可以确定78240i i -+=。
实验报告一一、实验目的理解线性方程组直接法与迭代法思想,掌握常用算法的设计,掌握用MATLAB 实现的数值解法。
二、实验题目实验一 线性方程组迭代法实验 1、 迭代法的收敛速度用迭代法分别对n=20,n=200解方程组,b Ax =其中nn A ⨯⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛------------------=431513143151513143151513143151513143151314(1) 选取不同的初值0x 和不同的右端向量b,给定迭代误差,用两种迭代法计算,观测得到的迭代向量并分析计算结果给出结论;(2) 取定初值0x 和右端向量b,给定迭代误差,将A 的主对角元成倍放大,其余元素不变,用Jacobi 迭代法计算多次,比较收敛速度,分析计算结果并给出结论。
2、 SOR 迭代法松弛因子的选取用逐次超松弛(SOR )迭代法求解方程组,b Ax =其中 .5555551221212211212212121221121221212200199198321⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛----------=x x x x x x A (1) 给定迭代误差,选取不同的超松弛因子1>ω进行计算,观测得到的近似值向量并分析计算结果,给出你的结论;(2) 给定迭代误差,选取不同的低松弛因子1<ω进行计算,观测得到的近似值向量并分析计算结果,给出你的结论。
三、实验原理Jacobi 迭代法算法:步1 取初始点()0x ,精度要求ε,最大迭代次数N ,置0:=k ;步 2 由()n i x a b a x ni j j j ij i ii k i,,1,1,11 =⎪⎪⎭⎫⎝⎛-=∑≠=+ 或()b D x A D D x k 111)(--++-= 计算()1+k x ; 步3 若()()ε≤-∞+k k xx1,则停算,输出()1+k x作为方程组的近似解; 步4 若N k =,则停算,输出迭代失败信息;否则置1+=k k ,转布2。
本科实验报告课程名称:计算机数值方法实验项目:计算机数值方法实验实验地点:虎峪校区致远楼B401专业班级:软件学院1217班学号:******xxxx 学生姓名:xxx指导教师:xxx2014 年 5 月21 日太原理工大学学生实验报告五、实验结果与分析二分法割线法分析:由程序知,使用二分法和割线法均能计算出方程的根,但利用割线法要比二分法计算的次数少,并且能够较早的达到精度要求。
相比之下,割线法程序代码量较少,精简明了。
六、讨论、心得本次数值计算方法程序设计实验从习题练习中跳脱出来,直接面对实用性较强的程序代码编写。
效果很好,不仅加深对二分法、割线法的理解,还加强了实际用运能力。
将理论知识成功地转化成实践结果。
实验地点虎峪校区致远楼B401指导教师xx太原理工大学学生实验报告l[i][k]=a[i][k];for(r=1;r<k;++r){l[i][k]-=l[i][r]*u[r][k];}l[i][k]/= u[k][k];}l[k][k]=1.0;}for(i=1;i<=n;++i){y[i] = b[i];for(j=1;j<i;++j){y[i]-=l[i][j]*y[j];}}for(i=n;i>0;--i){x[i] = y[i];for(j=i+1;j<=n;++j){x[i]-=u[i][j]*x[j];}x[i]/= u[i][i];}for(i=1;i<=n;++i){printf("%0.2lf\n",x[i]);}return 0;}五、实验结果与分析完全主元素消元法:列主元素消元法:LU分解法:分析:对于两种高斯解方程,完全主元素跟列主元素都是先消元、再回代,由程序段可以发现,始终消去对角线下方的元素。
即,为了节约内存及时效,可以不必计算出主元素下方数据。
列主元素消元法的算法设计上优于完全主元素消元法,它只需依次按列选主元素然后换行使之变到主元素位置,再进行消元即可。
附录1:源程序
附录2:实验报告填写说明
1.实验项目名称:要求与实验教学大纲一致。
2.实验目的:目的要明确,要抓住重点,符合实验教学大纲要求。
3.实验原理:简要说明本实验项目所涉及的理论知识。
4.实验环境:实验用的软、硬件环境。
5.实验方案(思路、步骤和方法等):这是实验报告极其重要的内容。
概括整个实验过程。
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。
对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。
对于创新性,还应注明其创新点、特色。
6.实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析。
7.实验结论(结果):根据实验过程中得到的结果,做出结论。
8.实验小结:本次实验心得体会、思考和建议。
9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价。