试验四 Gauuss列主元消去法解线性方程组实验报告

合集下载

Gauss消去法求解线性方程组

Gauss消去法求解线性方程组

数值分析实验报告n=length(B);X=zeros(n,1);c=zeros(1,n);d1=0for i=1:n-1max=abs(A(i,i));m=i;for j=i+1:nif max<abs(A(j,i))max=abs(A(j,i));m=j;endendif(m~=i)for k=i:nc(k)=A(i,k);A(i,k)=A(m,k);A(m,k)=c(k);endd1=B(i);B(i)=B(m);B(m)=d1;endfor k=i+1:nfor j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);endB(k)=B(k)-B(i)*A(k,i)/A(i,i);A(k,i)=0;endend%回代求解X(n)=B(n)/A(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum=sum+A(i,j)*X(j);endX(i)=(B(i)-sum)/A(i,i);end四.数值结果1.用Gauss顺序消去法解线性方程组程序计算的结果:2.选列主元消去法解线性方程组程序计算的结果:五.计算结果的分析通过以上结果的分析,我知道用列主元消去法解线性方程组计算的结果更为精确,误差较小些。

六.计算中出现的问题,解决方法及体会对程序的编写较为困难,通过实验,学会了用gauss顺序消去法和列主元消去法解线性方程组教师评语指导教师:年月日。

Gauss列主元素消去法实验

Gauss列主元素消去法实验

Lab06.Gauss 列主元素消去法实验【实验目的和要求】1.使学生深入理解并掌握Gauss 消去法和Gauss 列主元素消去法步骤; 2.通过对Gauss 消去法和Gauss 列主元素消去法的程序设计,以提高学生程序设计的能力;3.对具体问题,分别用Gauss 消去法和Gauss 列主元素消去法求解。

通过对结果的分析比较,使学生感受Gauss 列主元素消去法优点。

【实验内容】1.根据Matlab 语言特点,描述Gauss 消去法和Gauss 列主元素消去法步骤。

2.编写用不选主元的直接三角分解法解线性方程组Ax=b 的M 文件。

要求输出Ax=b 中矩阵A 及向量b ,A=LU 分解的L 与U ,det A 及解向量x 。

3.编写用Gauss 列主元素消去法解线性方程组Ax=b 的M 文件。

要求输出Ax=b 中矩阵A 及向量b 、PA=LU 分解的L 与U 、det A 及解向量x ,交换顺序。

4.给定方程组(1) ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--11134.981.4987.023.116.427.199.103.601.3321x x x(2) ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----15900001.582012151********.23107104321x x x x 先用编写的程序计算,再将(1)中的系数3.01改为3.00,0.987改为0.990;将(2)中的系数2.099999改为2.1,5.900001改为9.5,再用Gauss 列主元素消去法解,并将两次计算的结果进行比较。

【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。

实验讲评:实验成绩:评阅教师:200 年 月 日Lab06.Gauss 列主元素消去法实验第一题:1、算法描述:Ⅰ、Gauss 消去法由书上定理5可知 设Ax=b ,其中A ∈R^(n(1)如果()0(1,2,....,1)k kka k n ≠=-,则可通过高斯消去法将Ax=b 约化为等价的 角形线性方程组,且计算公式为:① 消元计算(k=1,2,….,n-1)()()(1)()()(1)()()/,1,...,,,,1,...,,,1,...,.k k ik ik kk k k k ij ij ik kj k k k iiik k m a a i k n a a m a i j k n b b m b i k n ++==+=-=+=-=+② 回带公式()()()()()1/,()/,1,...,2,1.n n n n nn ni i i i iii j ii j i x b a x ba x a i n =+==-=-∑(2)如果A 为非奇异矩阵,则可通过高斯消去法将方程组Ax=b 约化方程组为上三角矩阵以上消元和回代过程总的乘除法次数为332333nn nn +-≈,加减法次数为32353263nnn n+-≈以上过程就叫高斯消去法。

Gauss列主元消去法实验

   Gauss列主元消去法实验

<数值计算方法>实验报告1.实验名称实验2 Gauss 列主元消去法2.实验题目用Gauss 列主元消去法求解线性方程组。

0.0011 2.0002 3.0003 1.0001.0001 3.7122 4.6233 2.0002.0001 1.0722 5.6433 3.000x x x x x x x x x ++=⎧⎪-++=⎨⎪-++=⎩3.实验目的加深自己对Gauss 列主元消去法的理解和认识,并且通过做实验或做练习来加强自己Gauss 列主元消去法的掌握,学会并灵活运用Gauss 列主元消去法来求解方程组。

4.基础理论-------Gauss 列主元消去法1.Gauss 列主元消去法的基本思想是:在进行第k (k=1,2,...,n-1)步消元时,从第k 列的kk a 及以下的各元素中选取绝对值最大的元素,然后通过行变换将它交换到主元素kk a 的位置上,再进行消元。

2.Gauss 列主元消去法的优点:当kk a (k=1,2,...,n-1)的绝对值很小时,用Gauss 列主元消去法来求解方程组时,可以避免所的数值结果产生较大误差或失真。

5.实验环境实验系统:Win 7实验平台:VisualC++语言6.实验过程写出算法→编写程序→计算结果Gauss 列元消去法的算法Input:方程组未知量的个数n;增广矩阵()()1,2,...,T ij A a A A An ==,其中i=1,2,…,n; j=1,2,…,n+1Output:方程组的解x1,x2,…,xn,或失败信息。

1. for i ←1ton-1 do;2. temp ←|ii a |;3. p ←I;4. for j ←i+1 to n do5. if ||ji a >temp then6. p ←j;8. end9. end10. if temp=0 then11. |return False;12. end13. if p ≠I then14. p A ⇔i A ;//i,p 两行交换15. end//列选主元16. for j ←i+1 to n do17.*j ji i A m A -ji m ←/ji ii a a ;18. j A ←*j ji i A m A -;//消元19. end7.实验结果原方程组的解为:X1=-0.490396 , x2=-0.051035 ,x3=0.3675208.附录程序清单#include<iostream.h> #include"stdio.h"#include"math.h"void main ( ){ int n=3,i,j,k,p;doubleA[10][10]={{0.001,2.000,3.000,1.000},{-1.000,3.712,4.623,2.000},{-2.0 00,1.072,5.643,3.000}},temp,m,x[100];for(i=0;i<n;i++){ //选主元temp=fabs(A[i][i]); p=i;for(k=i+1;k<n;k++)if(fabs(A[k][i])>temp){temp=fabs(A[k][i]); p=k;}if(temp==0){ printf("\n无法求解:");return;}if(p!=i)for(j=0;j<n+1;j++){ temp=A[i][j];A[i][j]=A[p][j];A[p][j]=temp;}//消元for(k=i+1;k<n;k++){ m=A[k][i]/A[i][i];for(j=i+1;j<=n;j++)A[k][j]=A[k][j]-m*A[i][j];}}//回代for(i=n-1;i>=0;i--){x[i]=A[i][n];for(j=i+1;j<n;j++)x[i]=x[i]-A[i][j]*x[j];x[i]=x[i]/A[i][i];}printf("\nx=\n");for(i=0;i<n;i++)printf("%f \n",x[i]);}。

高斯列主元消去法实验报告

高斯列主元消去法实验报告

《数值计算方法》实验报告专业:年级:学号:姓名:成绩:1.实验名称实验2高斯列主元消去法2. :用Gauss列主消去法求解线性方程组0.001*X1+2.000*X2+3.000*X3=1.000-1.000*X1+3.217*X2+4.623*X3=2.000-2.000*X1+1.072*X2+5.643*X3=3.0003.实验目的a.熟悉运用已学的数值运算方法求解线性方程—Gauss列主消去法;b.加深对计算方法技巧的认识,正确使用计算方法来求解方程;c.培养用计算机来实现科学计算和解决问题的能力。

4.基础理论列主元消去法:a.构造增广矩阵b.找到每列绝对值的最大数;c.行变换;d.消去;e.回代5.实验环境Visual C++语言6.实验过程实现算法的流程图:7.结果分析a.实验结果与理论一致;b.由于数值设置成双精度浮点型,所以初值对计算结果影响不大;c.运用程序能更好的实现计算机与科学计算的统一和协调。

8. 附录程序清单#include<stdio.h>#include<math.h>int main(){int n=3,i,j,k,p;double a[4][4];double b[4];double x[4];double m[4][4];double temp;a[1][1]=0.001; a[1][2]=2.000; a[1][3]=3.000; b[1]=1.000;a[2][1]=-1.000; a[2][2]=3.1712; a[2][3]=2.000; b[2]=2.000;a[3][1]=-2.000; a[3][2]=1.072; a[3][3]=5.643; b[3]=3.000;for(i=1;i<=n-1;i++){temp=a[i][i];p=i;for(j=i+1;j<=n;j++)if(fabs(a[j][i])>temp){temp=a[j][i];p=j;}if(temp==0)return 0;if(p!=i) //换行{for(j=1;j<=n;j++)a[0][j]=a[i][j];for(j=1;j<=n;j++)a[i][j]=a[p][j];for(j=1;j<=n;j++)a[p][j]=a[0][j];b[0]=b[i];b[i]=b[p];b[p]=b[0];}for(j=i+1;j<=n;j++){m[j][i]=a[j][i]/a[i][i];for(k=i;k<=n;k++)a[j][k]=a[j][k]-m[j][i]*a[i][k];}}if(a[n][n]==0)return 0;x[n]=b[n]/a[n][n];for(i=n-1;i>=1;i--)//回代{temp=0;for(j=i+1;j<=n;j++)temp=temp+a[i][j]*x[j];temp=b[i]-temp;x[i]=temp/a[i][i];}for(i=1;i<=n;i++)//输出结果{printf("输出结果为:x[%d]=%lf ",i,x[i]);}printf("\n");return 0;}。

列主元消去法解方程组实验报告

列主元消去法解方程组实验报告

实验名称:列主元消去法解方程组1 引言我们知道,高斯消去法是一个古老的解线性方程组的方法。

而在用高斯消去法解Ax=b时,其中设A为非奇异矩阵,可能出现的情况,这时必须进行带行交换的高斯消去法。

但在实际计算中即使但其绝对值很小时,用作除数,会导致中间结果矩阵元素数量级严重增长和舍入误差的扩散,使得最后的结果不可靠。

因此,小主元可能导致计算的失败,我们应该避免采用绝对值很小的主元素。

为此,我们在高斯消去法的每一步应该在系数矩阵或消元后的低阶矩阵中选取绝对值最大的元素作为主元素,保持乘数,以便减少计算过程中舍入误差对计算解的影响。

一种方式是完全主元消去法,这种消去法是在每次选主元时,选择为主元素。

这种方法是解低阶稠密矩阵方程组的有效方法,但这种方法在选取主元时要花费一定的计算机时间。

实际计算中我们常采用部分选主元的的消去法。

列主元消去法即在每次选主元时,仅依次按列选取绝对值最大的元素作为主元素,且仅交换两行,再进行消元计算。

2 实验目的和要求运用matlab编写一个.m文件,要求用列主元消去法求解方程组(实现PA=LU):要求输出以下内容:(1)计算解x;(2) L,U;(3)整形数组IP(i)(i=1,2,…,n-1)(记录主行信息)3 算法原理与流程图(1)算法原理设有线性方程组Ax=b,其中设A为非奇异矩阵。

方程组的增广矩阵为第1步(k=1):首先在A的第一列中选取绝对值最大的元素,作为第一步的主元素:,然后交换(A,b)的第1行与第i1行元素,再进行消元计算。

设列主元素消去法已经完成第1步到第k-1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组第k步计算如下:对于k=1,2,…,n-1(1)按列选主元:即确定ik使(2)如果,则A为非奇异矩阵,停止计算。

(3)如果ik≠k,则交换[A,b]第ik行与第k行元素。

(4)消元计算消元乘数满足:(5)回代求解计算解在常数项b(n)内得到。

Gauss列主元消去法程序的设计说明

Gauss列主元消去法程序的设计说明

《Gauss 列主元消去法》实验报告实验名称:Gauss 列主元消去法程序设计 成绩:___________ 专业班级:数学与应用数学1202班 :王晓阳 学号:28 实 验 日 期 : 2014 年11月10日实验报告日期: 2014年 11月10日一.实验目的1.学习Gauss 消去法的基本思路和迭代步骤.2.学会运用matlab 编写高斯消去法和列主元消去法程序,求解线性方程组.3.当()k kk a 绝对值较小时,采用高斯列主元消去法.4.培养编程与上机调试能力.二、实验容用消去法解线性方程组的基本思想是用逐次消去未知数的方法把原线性方程组Ax b =化为与其等价的三角形线性方程组,而求解三角形线性方程组可用回代的方法求解.1.求解一般线性方程组的高斯消去法.(1)消元过程:设()0k kk a ≠,第i 个方程减去第k 个方程的()()/k k ik ik kk m a a =倍,(1,,)i k n =+,得到()()11k k A x b ++=.()()()()()()()11,,1,,k k k ij ij ik kj k k k i i ik k a a m a i j k n b b m b ++⎧=-=+⎪⎨=-⎪⎩经过n-1次消元,可把方程组()()11A x b =化为上三角方程组()()n n A x b =.(2)回代过程:()()()()()1//,1,,1n n n n nn n i i i i i ij j ii j i x b a x b a x a i n =+⎧=⎪⎛⎫⎨=-=- ⎪⎪⎝⎭⎩∑以解如下线性方程组为例测试结果.1212312310773264556x x x x x x x x -=⎧⎪-++=⎨⎪-+=⎩2.列主元消去法由高斯消去法可知,在消元过程中可能出现()0k kk a =的情况,这是消去法将无法进行,即使主元素()0k kk a ≠但很小时,用其作除数,会导致其他元素数量级的严重增长和舍入误差的扩散,最后也使得计算解不可靠.这时就需要选取主元素,假定线性方程组的系数矩阵A 是菲奇异的.(1)消元过程:对于1,2,,1k n =-,进行如下步骤:1) 按列选主元,记max pk ik k i na a ≤≤=2) 交换增广阵A 的p,k 两行的元素。

试验四 Gauuss列主元消去法解线性方程组实验报告

试验四 Gauuss列主元消去法解线性方程组实验报告

for(j=0;j<m+1;j++) scanf("%lf",&ab[i][j]); printf("您输入的系数增广矩阵为:\n"); for(i=0;i<m;i++) { for(j=0;j<=m;j++) printf(" %10.9f",ab[i][j]); printf("\n"); } for(i=0;i<m-1;i++)//i 是行 { Change(ab,m,i); for(k=i+1;k<m;k++) { f=ab[i][i]; g=ab[k][i]; e=-(g/f); for(t=0;t<m+1;t++) { ab[k][t]+=ab[i][t]*e; } } } printf("经行处理后原矩阵变为:\n"); for(k=0;k<m;k++) { for(t=0;t<=m;t++) printf(" %10.9f",ab[k][t]); printf("\n"); } printf("方程组的解为:\n"); ab[2][2]=ab[2][3]/ab[2][2]; ab[1][1]=(ab[1][3]-ab[1][2]*ab[2][2])/ab[1][1]; ab[0][0]=(ab[0][3]-ab[0][2]*ab[2][2]-ab[0][1]*ab[1][1])/ab[0][0]; for(i=0;i<m;i++) printf("x%d=%10.9f\n",i+1,ab[i][i]); }

Gauss列主元消去法程序设计

Gauss列主元消去法程序设计

《Gauss列主元消去法》实验报告实验名称:Gauss列主元消去法程序设计成绩:___________专业班级:数学与应用数学1202班姓名:王晓阳学号:28实验日期:2014 年11月10日实验报告日期:2014年11月10日一.实验目的1.学习Gauss消去法的基本思路和迭代步骤.2.学会运用matlab编写高斯消去法和列主元消去法程序,求解线性方程组.3.当()ka绝对值较小时,采用高斯列主元消去法.kk4.培养编程与上机调试能力.二、实验内容用消去法解线性方程组的基本思想是用逐次消去未知数的方法把原线性方程组Ax b=化为与其等价的三角形线性方程组,而求解三角形线性方程组可用回代的方法求解.1.求解一般线性方程组的高斯消去法.(1)消元过程:设()0k kk a ≠,第i 个方程减去第k 个方程的()()/k k ik ik kk m a a =倍,(1,,)i k n =+L ,得到()()11k k A x b ++=.()()()()()()()11,,1,,k k k ij ij ik kj k k k ii ik k a a m a i j k n b b m b ++⎧=-=+⎪⎨=-⎪⎩L 经过n-1次消元,可把方程组()()11A x b =化为上三角方程组()()n n A x b =.(2)回代过程:()()()()()1//,1,,1n n n n nn n i i i i i ij j ii j i x b a x b a x a i n =+⎧=⎪⎛⎫⎨=-=- ⎪⎪⎝⎭⎩∑L 以解如下线性方程组为例测试结果.1212312310773264556x x x x x x x x -=⎧⎪-++=⎨⎪-+=⎩2.列主元消去法由高斯消去法可知,在消元过程中可能出现()0k kk a =的情况,这是消去法将无法进行,即使主元素()0k kk a ≠但很小时,用其作除数,会导致其他元素数量级的严重增长和舍入误差的扩散,最后也使得计算解不可靠.这时就需要选取主元素,假定线性方程组的系数矩阵A 是菲奇异的.(1)消元过程:对于1,2,,1k n =-L ,进行如下步骤:1) 按列选主元,记max pk ik k i na a ≤≤=2) 交换增广阵A 的p,k 两行的元素。

Gauss列主元消去法

Gauss列主元消去法

贵州师范大学数学与计算机科学学院学生实验报告课程名称: 数值分析 班级: 实验日期: 年 月 日 学 号: 姓名: 指导教师: 实验成绩:一、实验名称实验五:线性方程组的数值解法二、实验目的及要求1. 让学生掌握用列主元gauss 消去法、超松弛迭代法求解线性方程组.2. 培养Matlab 编程与上机调试能力.三、实验环境每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、MATLAB6.5(或7.0).四、实验内容1. 编制逐次超松弛迭代(SOR 迭代)函数(子程序),并用于求解方程组⎪⎪⎩⎪⎪⎨⎧=-++=+-+=++-=+++-141414144321432143214321x x x x x x x x x x x x x x x x取初始向量T x )1,1,1,1()0(=,迭代控制条件为 5)1()(1021||||--⨯≤-k k x x 请绘制出迭代次数与松弛因子关系的函数曲线,给出最佳松弛因子.SOR 迭代的收敛速度是否一定比Gauss-Seidel 迭代快?2. 编制列主元 Gauss 消去法函数(子程序),并用于解 ⎪⎩⎪⎨⎧=++-=-+-=+-615318153312321321321x x x x x x x x x要求输出方程组的解和消元后的增广矩阵. 注:题2必须写实验报告五、算法描述及实验步骤Gauss 消去法:功能 解方程组b Ax = .输入 n ,n n ij a A ⨯=)(,T n b b b b ),,,(21 =.输出 方程组的解T n x x x x ),,,(21 =或失败信息.步1 对1,,2,1-=n k 执行步2→步4 .步2 调选列主元模块 .步3 若0=kk a ,则=x “消去法失败”,结束 .步4 对n k k i ,,2,1 ++=执行步5→步6 .步5 对n k k j ,,2,1 ++=执行ij kj kk ik ij a a a a a +⨯-⇐/ .步6 i k kk ik i b b a a b +⨯-⇐/ .步7 nn n n a b x /⇐ .步8 对1,,2,1 --=n n i 执行ii n i j j ij i i a x a b x /)(1∑+=-⇐ .步9 输出T n x x x x ),,,(21 = .选列主元模块:功能 选列主元 .输入 n k k i b n k k j i a i ij ,,1,,;,,1,,, +=+= .输出 n k k i b n k k j i a i ij ,,1,,;,,1,,, +=+= .步1 kk a m ⇐;k l ⇐ .步2 对n k k i ,,2,1 ++=执行若m a ik >则ik a m ⇐;i l ⇐ .步3 若k l ≠,则交换kj a 和lj a ,n k k j ,,1, +=;交换k b 和l b .步4 返回主模块 .六、调试过程及实验结果>> A=[12,-3,3;-18,3,-1;1,1,1];>> b=[15;-15;6];>> x=Gauss1(A,b)Ab =-18.0000 3.0000 -1.0000 -15.00000 1.1667 0.9444 5.16670 0 3.1429 9.4286 index = 1x = 1.0000 2.0000 3.0000七、总结由于数)1(-k kka 在Gauss 消去法中有着突出的作用,第k 步消元时,要用)1(-k kk a 作除数,如果)1(-k kk a =0消元会失败,即使主元)1(-k kk a ≠0,但很小时,舍入误差也会使计算结果面目全非,避免这种缺陷的基本方法就是选主元。

高斯列主元消元法解线性方程组

高斯列主元消元法解线性方程组

高斯列主元消元法解线性方程组一、题目:用Gauss 列主元消去法解线性方程组Ax b =,其中,A=17.031 -0.615 -2.991 1.007 -1.006 0.000-1.000 34.211 -1.000 -2.100 0.300 -1.7000.000 0.500 13.000 -0.500 1.000 -1.5004.501 3.110 -3.907 -61.705 12.170 8.9990.101 -8.012 -0.017 -0.910 4.918 0.1001.000 2.000 3.000 4.500 5.000 21.803⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭ 0.230 -52.322 54.000 240.236 29.304 -117.818b ⎛⎫ ⎪ ⎪ ⎪= ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭T X=(0.907099 -1.961798 3.293738 -4.500708 3.029344 -5.255068)二、原理及步骤分析设nn ij R a A ⨯∈=][)1(,nn Rb b b b ∈=],,,[)1()2(2)1(1 。

若约化主元素),,2,1(0)(n k a k kk =≠,则通过高斯消元法将方程b AX =约化为三角形方程组求解。

如果在消元过程中发现某个约化主元0)(=k kk a , 则第K 次消元就无法进行。

此外,即使所有约化主元全不为零,虽然可以完成方程组的求解,但也无法保证结果的可靠性,因为计算过程中存在舍入误差。

为减少计算过程中的舍入误差对解的影响,在每次消元前,应先选择绝对值尽可能大的元作为约元的主元,如果在子块的第一列中选取主元,则相应方法称为列主元消元法。

相应过程为:(1)选主元:在子块的第一列中选择一个元)(k k i k a 使)(max k ik ni k kk i a a k ≤≤=并将第k 行元与第k i 行元互换。

高斯消元实验报告

高斯消元实验报告

实验报告一Gauss消去法求解线性方程组实验一、实验内容分别用顺序Gauss消去法和列选主元gauss消去法求解方程组=二.算法原理对一般的形如的线性方程组,记增广矩阵.Guass消去法包括消元过程和回代过程,消去过程实际上是把通过有限步的初等变换(即把的某行的一个倍数加到另一行或变换的某两行),最终化成上三角阵,图示如下:而回带过程是自下而上求解上三角方程组在消元过程中将扔放在的位置上,具体算法过程(不做行交换的消元):三、变量说明:n 方程组的阶数.A[3][3] 系数矩阵A.B[3] 常数项Bm[3][3] 经过Guass消元法后的系数矩阵i,j,k 随机变动量x[3] 3个变量X1,X2,X3四.程序设计#include<stdio.h>#include<math.h>main(){int n=3,i,j,k=0;doubleA[3][3]={{0.2641,0.1735,0.8642},{0.9411,-0.0175,0.1463},{-0.8641,-0.4243,0.0711}};double B[3]={-0.7521,0.6310,0.2501};double m[3][3];double X[3]={0,0,0};double s;for(k=0;k<=n-1;k++){for(i=k+1;i<n;i++){m[i][k]=A[i][k]/A[k][k];for(j=k+1;j<n;j++)A[i][j]=A[i][j]-m[i][k]*A[k][j];B[i]=B[i]-m[i][k]*B[k];}}for(i=n-1;i>=0;i--){s=0;for(j=i;j<n;j++)s+=A[i][j]*X[j];X[i]=(B[i]-s)/A[i][i];}for(i=0;i<3;i++)printf("%f\n",X[i]);}五.上机结果六.上机体会。

Gauss消去法和列主元消去法

Gauss消去法和列主元消去法
while s<=n
max=abs(C(s,s));big=0;
if det(C(s:n,s:n))==0
disp('此方程无解');
answer=0;
break;
end
for i=s:n
if max<abs(C(i,s))
max=abs(C(i,s));
k=i;
big=1;
else continue
for i=n:(-1):1
X(i,1)=C(i,n+1);
for j=(i+1):n
X(i,1)=X(i,1)-E(i,j)*X(j,1);
end
X(i,1)=X(i,1)/E(i,i);
ห้องสมุดไป่ตู้end
disp('此方程的解为:')
X
end
5、实验结果
请输入未知数系数矩阵A:
A=[2,-1,3;4,2,5;1,2,0]
3、实验原理
高斯列主元消去法
4、实验内容
clc;clear;format short
disp('请输入未知数系数矩阵A:');
A=input('A=');
disp('请输入常数项列向量B:');
B=input('B=');
C=[A,B];
[m,n]=size(A);
s=1;answer=1;P=zeros(1,n);L=zeros(n);I=eye(n);
y=a(i,k:n+1);a(i,k:n+1)=a(k,k:n+1);a(k,k:n+1)=y;
break;

高斯消元法与列主元消去法实验报告

高斯消元法与列主元消去法实验报告

实验报告:Gauss消元法小组成员:李岚岚、邱粉珊、缪晓浓、杨水清学号:0917020040、0917010078、0917010073、0917010112一、实验问题编写两个程序,分别利用Gauss消元法和列主元消去法求解方程组二、分析及其计算过程Gauss顺序消元法:源程序:function [x]=gaussl(A,b)[n1,n2]=size(A);n3=size(b);if n1~=n2|n2~=n3|n1~=n3disp('A的行和列的维数不同!');return;endif det(A)==0disp('系数矩阵A奇异');return;end%消元过程L=eye(n1);for j=2:n1for i=j:n1L(i,j-1)=A(i,j-1)/A(j-1,j-1);A(i,:)=A(i,:)-L(i,j-1)*A(j-1,:);b(i)=b(i)-L(i,j-1)*b(j-1);endend%回代过程x(n1)=b(n1)/A(n1,n1);for t=n1-1:-1:1for k=n1:-1:t+1b(t)=b(t)-A(t,k)*x(k);endx(t)=b(t)/A(t,t);end程序的运行以及结果:>>A=[1 2/3 1/3;9/20 1 11/20;2/3 1/3 1];>>b=[2 2 2];>> [x]=gaussl(A,b)x =1 1 1Gauss列主元消去法:源程序:function [x]=gaussll(A,b) [n1,n2]=size(A);n3=size(b);if n1~=n2|n1~=n3|n2~=n3disp('输入的方程错误!');return;endif det(A)==0disp('系数矩阵A奇异');return;endmax=zeros(n1);for m=1:n1%找主元for i=m:n1if abs(A(i,m))>maxmax=A(i,:);A(i,:)=A(m,:);A(m,:)=max;maxb=b(i);b(i)=b(m);b(m)=maxb;endend%消元过程L=eye(n1);for j=2:n1for i=j:n1L(i,j-1)=A(i,j-1)/A(j-1,j-1);A(i,:)=A(i,:)-L(i,j-1)*A(j-1,:);b(i)=b(i)-L(i,j-1)*b(j-1);endendend%回代过程x(n1)=b(n1)/A(n1,n1);for t=n1-1:-1:1for k=n1:-1:t+1b(t)=b(t)-A(t,k)*x(k);endx(t)=b(t)/A(t,t);end程序的运行以及结果:>>A=[-0.002 2 2;1 0.78125 0;3.996 5.5625 4]; >>b=[0.4 1.3816 7.4178];>>[x]= gaussll(A,b)x =1.9273 -0.6985 0.9004。

列主元素消去法实验报告

列主元素消去法实验报告

列主元素消去法一、实验要求1、编程实现用列主元素消去法求解方程组二、实验目的1、进一步了解如何求解方程组2、熟悉关于C语言的一些基本编程操作三、实验内容1、用列主元素消去法求解线性方程:#include<iostream>#include<cmath>#define N 20using namespace std;void load();float a[N][N];int m;int main(){int i,j;int c,k,n,p,r;float x[N],l[N][N],s,d;cout<<"下面请输入未知数的个数m=";cin>>m;cout<<endl;cout<<"请按顺序输入增广矩阵a:"<<endl;load();for(i=0;i<m;i++){for(j=i;j<m;j++)c=(fabs(a[j][i])>fabs(a[i][i]))?j:i; /*找列最大元素*/for(n=0;n<m+1;n++){s=a[i][n]; a[i][n]=a[c][n]; a[c][n]=s;} /*将列最大数防在对角线上*/ for(p=0;p<m+1;p++)cout<<a[i][p]<<"\t";cout<<endl;for(k=i+1;k<m;k++){l[k][i]=a[k][i]/a[i][i];for(r=i;r<m+1;r++) /*化成三角阵*/a[k][r]=a[k][r]-l[k][i]*a[i][r];}}x[m-1]=a[m-1][m]/a[m-1][m-1];for(i=m-2;i>=0;i--){d=0;for(j=i+1;j<m;j++)d=d+a[i][j]*x[j];x[i]=(a[i][m]-d)/a[i][i]; /*求解*/ }cout<<"该方程组的解为:"<<endl;for(i=0;i<m;i++)cout<<"x["<<i<<"]="<<x[i]<<"\t";//system("pause");return 0;}void load(){int i,j;for(i=0;i<m;i++)for(j=0;j<m+1;j++)cin>>a[i][j];}2、LU分解法#include<stdio.h>void solve(float l[][100],float u[][100],float b[],float x[],int n) {int i,j;float t,s1,s2;float y[100];for(i=1;i<=n;i++) /* 第一次回代过程开始*/{s1=0;for(j=1;j<i;j++){t=-l[i][j];s1=s1+t*y[j];}y[i]=(b[i]+s1)/l[i][i]; }for(i=n;i>=1;i--) /* 第二次回代过程开始*/{s2=0;for(j=n;j>i;j--){t=-u[i][j];s2=s2+t*x[j];}x[i]=(y[i]+s2)/u[i][i];}}void main(){float a[100][100],l[100][100],u[100][100],x[100],b[100];int i,j,n,r,k;float s1,s2;for(i=1;i<=99;i++)/*将所有的数组置零,同时将L矩阵的对角值设为1*/ for(j=1;j<=99;j++){l[i][j]=0,u[i][j]=0;if(j==i) l[i][j]=1;}printf ("input n:\n");/*输入方程组的个数*/scanf("%d",&n);printf ("input array A:\n");/*读取原矩阵A*/for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%f",&a[i][j]);printf ("input array B:\n");/*读取列矩阵B*/for(i=1;i<=n;i++)scanf("%f",&b[i]);for(r=1;r<=n;r++)/*求解矩阵L和U*/{for(i=r;i<=n;i++){s1=0;for(k=1;k<=r-1;k++)s1=s1+l[r][k]*u[k][i];u[r][i]=a[r][i]-s1;}for(i=r+1;i<=n;i++){s2=0;for(k=1;k<=r-1;k++)s2=s2+l[i][k]*u[k][r];l[i][r]=(a[i][r]-s2)/u[r][r];} }。

列主元高斯消去法实验报告

列主元高斯消去法实验报告
a[i][j]=a[i][j]-l*a[k][j];
}
}
printf("高斯消去:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n+1;j++)
printf("%f",a[i][j]);
printf("\n");
}
if(fabs(a[n-1][n-1])<DETLA)
{
printf("A奇异,break \n");
int i,j,n,k,m;
printf("确定一个初元数:n=");
scanf("%d",&n);
printf("输入数组:a[%d][%d]\n",n,n+1);
for(i=0;i<n;i++)
{
for(j=0;j<n+1;j++)
scanf("%f",&a[i][j]);
}
printf("得到数组:\n");
若m≠k,交换第k行与第m行对应的元素(换行):
消元:
对i=k+1,…,n-1,计算l=lik=aik/akk;
对j=k+1,…,n-1,n,计算aij=aij-lik*akj=aij-l*akj
回代:
若|ann|<DELTA,则A奇异,结束程序,否则继续
xn-1=an-1,n/ an-1, n-1
对i=n-2 ,…, 1, 0,计算:
编程要求:
1)方程组的矩阵系数用二维数组表示,不用指针,且其值要求用输入语句输入。(数组形式的完成,经检查后,有能力的可以改用指针方式)

计算方法实验报告_列主元高斯消去法

计算方法实验报告_列主元高斯消去法
double row_first; //行首元素 //主对角元素单位化 for(int i=0;i<n;i++) {
row_first=A[i][i]; for(int j=0;j<n+1;j++)
计算方法实验报告
{ A[i][j]=A[i][j]/row_first;
} }
for(int k=n-1;k>0;k--) {
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
A_B[i][j]=A[i][j]; } A_B[i][N]=B[i][0]; } return A_B; }
3
//输出矩阵 A 的 row x col 个元素 void Show_Matrix(double **A,int row,int col) {
for(int i=0;i<N;i++)
{
int row=Choose_Colum_Main_Element(N,A_B,i);
if(Main_Element<=e) goto A_0;
Exchange(A_B,N+1,row,i);
Elimination(N,A_B,i);
cout<<"选取列主元后第"<<i+1<<"次消元:"<<endl;
double factor; for(int i=start+1;i<n;i++) {
factor=A[i][start]/A[start][start]; for(int j=start;j<n+1;j++) {

计算方法实验报告(2)----Gauss列主元法

计算方法实验报告(2)----Gauss列主元法

计算方法实验报告实验名称:班级:学生姓名:学号:班级序号:课内序号:指导老师:2018-2019学年第2学期一、实验名称:Gauss消去法二、实验学时: 2学时三、实验目的和要求1、掌握高斯列主元法基础原理2、掌握高斯列主元法解方程组的步骤3、能用程序语言对Gauss列主元法进行编程实现四、实验过程代码及结果1、代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication_Gauss{public class GaussBase{private double[,] a;public double[,] A{get { return a; }set { a = value; }}private double[] x;public double[] X{get { return x; }set { x = value; }}public int n;public void CalcuX(){for (int i = n - 1; i >= 0; i--){double sum = 0;for (int j = i + 1; j < n; j++){sum += a[i, j] * x[j];}x[i] = (a[i, n] - sum) / a[i, i];}}public virtual void CalcuA(){}public void Output(){for (int i = 0; i < n; i++){//string s="";for (int j = 0; j <= n; j++){//s += string.Format("{0,-4}", a[i, j]);Console.Write("{0,6}", a[i, j]);}Console.WriteLine();}}public void Output(bool isX){Console.WriteLine("------最终的解为:----------");for (int i = 0; i < n; i++){Console.WriteLine("x[{0}]={1}", i, x[i]);}}public void Input(){Console.WriteLine("请输入方程阶数N:");n = int.Parse(Console.ReadLine());a = new double[n, n + 1];x = new double[n];Console.WriteLine("请输入方程系数A(i,j):");for (int i = 0; i <= n - 1; i++){string s = Console.ReadLine();string[] ss = s.Split(' ');for (int j = 0; j <= n; j++){a[i, j] = Convert.ToDouble(ss[j]);}}}public void Calcu(){//Input();Console.WriteLine("------原始的矩阵为:----------");Output();CalcuA();Console.WriteLine("------应用高斯列主元法消元之后的矩阵A(i,j)为:----------");Output();CalcuX();Output(true);}public class GaussCol : GaussBase{public int FindMaxCol(int k){int ik = k;for (int i = k; i < n; i++){if (Math.Abs(A[i, k]) > Math.Abs(A[ik, k])){ik = i;}}if (A[ik, k] == 0) return -1;if (ik != k){for (int j = k; j <= n; j++){double t = A[ik, j];A[ik, j] = A[k, j];A[k, j] = t;}}return ik;}public override void CalcuA(){for (int k = 0; k < n - 1; k++){//-----------------------------------------int ik = FindMaxCol(k);//------------------------------------for (int i = k + 1; i < n; i++){//double Lik = a[i, k] / a[k, k];// for (int j = k ; j <= n; j++)for (int j = n; j >= k; j--){A[i, j] = A[i, j] - A[i, k] / A[k, k] * A[k, j];}//a[i, k] = 0;}//Output}}}class Program{static void Main(string[] args){GaussBase obj = new GaussCol();obj.Input();obj.Calcu();Console.ReadLine();}}}}2、结果:。

Gauss消去法实验报告

Gauss消去法实验报告
2、实验步骤:首先,在电脑上安装matlab,然后,启动matlab,新建一个M文件。
程序代码
程序代码说明
function x=gauss(A,b)
n=length(A);
a=[A,b];
for k=1:n-1
maxa=max(abs(a(k:n,k)));
if maxa==0
return;
end
for i=k:n
end
end
x=zeros(n,1);
x(n)=b(n)/a(n,n);
for k=n-1:-1:1
s=b(k);
for j=k+1:n
s=s-a(k,j)*x(j);
end
x(k)=s/a(k,k);
end
x
%调用M文件gauss. m
%形成增广矩阵
%计算乘子
% 对k+1~n项进行消元
%增广矩阵第i行减去第k行的乘子倍目的是将该矩阵中的第k列中a(k,k)以下的元素全部消为零
二、实验原理:
由一般线性方程组在使用Gauss消去法求解时,从求解过程中可以清楚地看到,若 ,必须施以行交换的手续,才能使消去过程继续下去。有时既使 ,但其绝对值很小,由于舍入误差的影响,消去过程也会出现不稳定现象。因此,为使这种不稳定现象发生的可能性减至最小,在施行消去过程时每一步都要选主元素,即要寻找行 ,使
这样就完成了第1步消元。
回代过程:
在最后的一方程中解出 ,得:
再将 的值代入倒数第二个方程,解出 ,依次往上反推,即可求出方程组的解:
其通项为
三、实验内容与步骤:
1、实验内容:依照实验原理编写gauss消去法的程序。
2、实验步骤:首先,在电脑上安装matlab,然后,启动matlab,新建一个M文件。

解线性方程组实验

解线性方程组实验

实验报告专用纸实验项目名称解线性方程组的直接法课程名称数值方法教师评语及成绩:实验成绩:教师签字:(请按照实验报告的有关要求书写。

一般必须包括:1、实验目的;2、实验内容;3、实验步骤与方法;4、实验数据与程序清单;5、出现的问题与解决方法;6、实验结果、结果分析与体会等内容)1、实验目的(1)掌握Gauss消元法及Gauss列主元消去法,能用这两种方法求解线性方程组;(2)掌握平方根法与追赶法;(3)掌握相应数值算法的程序编写;(4)理解方程组的性态、条件数及误差分析。

2、实验内容1.应用高斯消元法和高斯列主元素法解线性方程组Ax=b。

2.解线性方程组Ax=b的LU分解法。

用熟悉的算法语言编写程序,用高斯消去法和高斯列主元消去法求解方程组,输出Ax=b 中矩阵A、b、解向量x及detA。

3、实验步骤和方法(1)要求上机实验前先编写出程序代码;(2)编辑录入程序;(3)调试程序并记录调试过程中出现的问题及修改程序的过程;(4)经反复调试后,运行程序并验证程序运行是否正确;(5)记录运行时的输入和输出;(6)对程序的运行结果进行分析;(7)根据实验情况和结果撰写并提交实验报告。

4、实验原理(1)实验结果图1Gauss消元法图2Gauss消元法近似为0(2)结果分析在Gauss消元法中,可以看到3的值是一个非常接近于0的数,如果将消元后的系数矩阵打印出来,可以看到消元后的系数矩阵并不是一个真正的上三角矩阵,下三角部分有几处是绝对值极小的值,这是由于计算机的浮点计算造成的,浮点在计算机中本身就不是一个精确的数,在消元的过程中,一些浮点运算有误差,最后得到的是近似值而不是0。

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

for(j=0;j<m+1;j++) scanf("%lf",&ab[i][j]); printf("您输入的系数增广矩阵为:\n"); for(i=0;i<m;i++) { for(j=0;j<=m;j++) printf(" %10.9f",ab[i][j]); printf("\n"); } for(i=0;i<m-1;i++)//i 是行 { Change(ab,m,i); for(k=i+1;k<m;k++) { f=ab[i][i]; g=ab[k][i]; e=-(g/f); for(t=0;t<m+1;t++) { ab[k][t]+=ab[i][t]*e; } } } printf("经行处理后原矩阵变为:\n"); for(k=0;k<m;k++) { for(t=0;t<=m;t++) printf(" %10.9f",ab[k][t]); printf("\n"); } printf("方程组的解为:\n"); ab[2][2]=ab[2][3]/ab[2][2]; ab[1][1]=(ab[1][3]-ab[1][2]*ab[2][2])/ab[1][1]; ab[0][0]=(ab[0][3]-ab[0][2]*ab[2][2]-ab[0][1]*ab[1][1])/ab[0][0]; for(i=0;i<m;i++) printf("x%d=%10.9f\n",i+1,ab[i][i]); }
kj
x j / akk )
1、程序设计 2、计算实例 3、撰写实验报告
1、Gauuss Байду номын сангаас主元消去实验结果如图: 调 试 过 程 及 实 验 结 果
108 2 3 A 1 3.712 4.623 , 2 1.072 5.643
1 b 2 3
实 验 内 容
会出现不稳定现象。因此,为使这种不稳定现象发生的可能性减至最小, 在施行消去过程时每一步都要选主元素,即要寻找行 r ,使 ( k 1) ( k 1) | ark | max | aik |
i k
( k 1) ( k 1) 并将第 r 行与第 k 行交换,以使 akk 的当前值(即 aik 的数值)远大于 0。
108 2 3 (1) A 1 3.712 4.623 , 2 1.072 5.643
4 2 4 (2) A 2 17 10 , 4 10 9
1 b 2 3
10 b 3 7
图一 第一题选主元消去法实验结果
4 2 4 A 2 17 10 , 4 10 9 10 b 3 7
图二 第二题选主元消去法实验结果 2、不选主元消去法实验结果:
108 2 3 A 1 3.712 4.623 , 2 1.072 5.643
这种列主元消去法的主要步骤如下: 1.消元过程 对 k 1, 2,, n 1 ,做 1º 选主元,记
| ark | max | aik |
i k
若 ark 0 ,说明方程组系数矩阵奇异,则停止计算,否则进行 2º。 2º 交换 A (增广矩阵)的 r , k 两行元素
arj akj
4、与不选主元的 Gauss 消去法结果比较并分析原因。 实 验 环 境 Microsoft Visual C++ 6.0
由解一般线性方程组在使用 Gauss 消去法求解时,从求解过程中可以清楚 ( k 1) 地看到,若 akk 0 ,必须施以行交换的手续,才能使消去过程继续下去。
( k 1) 有时既使 akk 0 ,但其绝对值很小,由于舍入误差的影响,消去过程也
课程实验报告
课程名称 姓名 实验名称 实 验 目 的 及 要 求 班级 学号 实验日期 实验成绩
试验四 Gauuss 列主元消去法解线性方程组 1、熟悉 Gauss 列主元消去法,编出实用程序。 2、认识选主元技术的重要性。 3、明确对于哪些系数矩阵 A ,在求解过程中不需使用选主元技术。 编制程序,用 Gauss 列主元消去法求解线性方程组 Ax b ,并打印结 果,其中
1 b 2 3
图三 第一题不选主元消去法实验结果
4 2 4 A 2 17 10 , 4 10 9 10 b 3 结果: 7
总 结
附 录
图四 第二题不选主元消去法实验结果 1、通过这次实验,我掌握了使用 Gauuss 列主元消去法解线性方程组的方 法,加深了我对 Gauuss 元消去法的理解。 2、当使用不选主元的 Gauss 消去法时,如果主元素绝对值很小时,用它做 除数会导致结果错误,由于数值过大,位数过多,就会出现图三所是结 果。 程序清单: #include <iostream> #include <iomanip> #include <math.h> using namespace std; void Change(double ab[][40],int m,int j) { int i,max,temp=0,t,h=j; max=fabs(ab[0][j]); for(i=1;i<m;i++) { if(max<fabs(ab[i][j])) { max=ab[i][j]; temp=i; } } for(j=0;j<m+1;j++) { t=ab[h][j]; ab[h][j]=ab[temp][j]; ab[temp][j]=t; } } void main () { int i,j,m,k,t; double f=0,n=0,ab[40][40]={0},g,e,x=0; printf("请输入未知数的个数:\n m="); scanf("%d",&m); printf("请输入系数增广矩阵:\n"); for(i=0;i<m;i++)
3º 计算
j k ,, n 1
aij aij aik akj / akk
i k 1, , n
j k 1,, n 1
2.回代过程 对 k n, n 1,, 2,1,计算
n
xk (ak ,n1
算 法 描 述 及 实 验 步 骤
j k 1
a
相关文档
最新文档