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

合集下载

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

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

《数值计算方法》实验报告专业:年级:学号:姓名:成绩: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. 准备工作:在实验开始前,我们需要准备一个包含n个未知数和n个方程的线性方程组。

这个方程组可以通过手工构造或从实际问题中得到。

2. 构建增广矩阵:将方程组写成增广矩阵的形式,其中矩阵的左边是系数矩阵,右边是常数向量。

通过这样的构建,我们可以将方程组的运算转化为矩阵的运算,更加方便和高效。

3. 主元素选取:在高斯消去法中,我们需要选取主元素来进行消元操作。

主元素的选取可以采用多种策略,如选取绝对值最大的元素或者选取对角线元素。

在本实验中,我们选择选取对角线元素作为主元素。

4. 消元操作:通过行变换,将主元素所在的列下方的元素消为0。

这一步骤需要反复进行,直到得到上三角矩阵。

5. 回代求解:通过回代求解,我们可以得到方程组的解。

回代求解是从最后一行开始,逐步求解未知数的值,直到求解出所有未知数。

实验结果:通过实验,我们得到了以下结论:1. 高斯消去法能够有效地解决线性方程组。

无论方程组的规模如何,高斯消去法都可以将其转化为上三角矩阵,并求解出方程组的解。

2. 高斯消去法的计算复杂度较低。

相比于其他解线性方程组的方法,如迭代法或矩阵求逆法,高斯消去法的计算复杂度较低,适用于大规模的方程组求解。

3. 主元素选取对解的精度有一定影响。

在实验中,我们发现主元素的选取对解的精度有一定的影响。

如果主元素选取不当,可能会导致解的误差较大。

结论:高斯消去法是一种有效且可靠的解线性方程组的方法。

通过本实验,我们验证了高斯消去法的有效性和可靠性。

在实际应用中,我们可以根据具体问题的特点和要求,选择适当的主元素选取策略,以获得更准确的解。

同时,我们也要注意高斯消去法的局限性,如主元素选取对解的精度的影响,以及方程组可能存在无解或多解的情况。

计算方法-实验三列主元高斯消去法

计算方法-实验三列主元高斯消去法

计算方法课程设计报告实验三高斯列主元消去法姓名:黄仁化学号:031010151551017班级:计算机科学与技术2004班日期:二○○六年六月十日一、实验目的:1、掌握高斯消去法的基本思路和迭代步骤。

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

二、高斯列主元消去法的基本思路与计算步骤:列主元高斯消去法计算步骤:将方程组用增广矩阵[]()(1)ij n n B A b a ⨯+==表示。

步骤1:消元过程,对1,2,,1k n =-(1) 选主元,找{},1,,k i k k n ∈+使得,max k i k ikk i n a a ≤≤=(2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3)。

(3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ↔,,,1j k n =+。

(4) 消元,对,,i k n =,计算/,ik ik kk l a a =对1,,1j k n =++,计算.ij ij ik kj a a l a =-步骤 2:回代过程: (1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2)。

(2) ,1/;n n n nn x a a +=对1,,2,1i n =-,计算,11/ni i n ij j ii j i x a a x a +=+⎛⎫=-⎪⎝⎭∑三:程序流程图四:程序清单:function X=uptrbk(A,b)% A 是一个n 阶矩阵。

% b 是一个n 维向量。

% X 是线性方程组AX=b 的解。

[N N]=size(A);X=zeros(1,N+1);Aug=[A b];for p=1:N-1[Y,j]=max(abs(Aug(p:N,p)));C=Aug(p,:);Aug(p,:)=Aug(j+p-1,:);Aug(j+p-1,:)=C;if Aug(p,p)==0'A是奇异阵,方程无惟一解'breakendfor k=p+1:Nm=Aug(k,p)/Aug(p,p);Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1);endend% 这里用到程序函数backsub来进行回代。

高斯消去算法实验报告

高斯消去算法实验报告

高斯消去算法实验报告1. 实验背景高斯消去算法,也称为高斯消元法,是一种用于求解线性方程组的常用方法。

通过进行一系列的行变换,将方程组化简为阶梯矩阵,从而得到方程组的解。

本实验旨在使用高斯消去算法,解决给定的线性方程组。

2. 实验过程2.1 算法原理高斯消去算法的基本思想是通过进行行变换,将线性方程组化简为阶梯矩阵。

具体流程如下:1. 对于每一列,从对角线开始,选取主元(即该列中绝对值最大的元素),并将该主元所在的行与对角线所在的行交换位置。

这样可以避免除法中的误差积累。

2. 通过进行行变换,将主对角线以下的元素全部清零。

具体方法是,对于每一行i,通过消去第i+1行到最后一行的第i列元素,从而将下三角矩阵的元素清零。

3. 倒序遍历每一行,通过行变换,将主对角线以上的元素清零。

具体方法是,消去第i-1行到第1行的第i列元素,从而将上三角矩阵的元素清零。

4. 将矩阵化简为阶梯矩阵。

2.2 实验步骤1. 取得待解线性方程组的系数矩阵A和常数向量b。

2. 将矩阵A和向量b合并为增广矩阵Ab。

3. 通过高斯消去算法,将增广矩阵化简为阶梯矩阵。

4. 根据化简后的阶梯矩阵,求解线性方程组。

3. 实验结果以一个3阶线性方程组为例进行实验,方程组如下:2x + 3y + z = 93x + 2y + 4z = 124x + 3y + 6z = 18按照操作步骤,我们将系数矩阵A和常数向量b合并为增广矩阵Ab:markdownA = [[2, 3, 1],[3, 2, 4],[4, 3, 6]]b = [9, 12, 18]Ab = [[2, 3, 1, 9],[3, 2, 4, 12],[4, 3, 6, 18]]然后,通过高斯消去算法,将增广矩阵Ab化简为阶梯矩阵:markdownAb = [[2, 3, 1, 9],[0, 1.5, 2.5, 6],[0, 0, 0, 0]]根据化简后的阶梯矩阵,我们可以得到方程组的解:x = 1y = 2z = 0因此,该线性方程组的解为x=1,y=2,z=0。

数值分析实验报告高斯消元法和列主消元法

数值分析实验报告高斯消元法和列主消元法

《计算方法》实验指导书 实验三、高斯消元法和列主消元法一、实验目的:1. 通过matlab 编程解决高斯消元发和列主消元发来解方程组的问题, 加强编程能力和编程技巧,要熟练应用matlab 程序来解题,练习从数值分析的角度看问题进而来解决问题。

更深一步体会这门课的重要性,练习动手能力,同时要加深对数值问题的理解,要熟悉matlab 编程环境。

二、实验要求:用matlab 编写代码并运行高斯消元法和列主消元发来解下面的方程组的问题,并算出结果。

三、实验内容:用高斯消元法和列主消元法来解题。

1.实验题目:用高斯消元法和列主消元法来解下列线性方程组。

⎪⎪⎩⎪⎪⎨⎧−=+−−−=+−−=+−−=−+−.142,16422,0,13143214321432432x x x x x x x x x x x x x x x 2.实验原理高斯消元法:就是把方程组变成上三角型或下三角形的解法。

上三角形是从下往上求解,下三角形是从上向下求解,进而求得结果。

而列主消元法是和高斯消元法相类似,只不过是在开始的时候找出x1的系数的最大值放在方程组的第一行,再化三角形再求解。

3.设计思想高斯消元法:先把方程组的第一行保留,再利用第一行的方程将其余几行的含有x1的项都消去,再保留第二行,同理利用第二行的方程把第二行以下的几行的含有x2项的都消去,以此类推。

直到最后一行只含有一个未知数,化为上三角形,求得最后一行的这个未知数的值,再回带到倒数第二个方程求出另一个解,再依次往上回带即可求出这个方程组的值。

而列主消元法与高斯消元法类似,只不过在最开始时找出x1项系数的最大值与第一行交换再进行与高斯算法相似的运算来求出方程组的解。

4.源代码高斯消元法的程序:f unction [RA,RB,n,X]=gaus(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1for k=p+1:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m*B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n);X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.')endend在工作窗口输入程序:A=[1 -1 1 -3; 0 -1 -1 1;2 -2 -4 6;1 -2 -4 1];b=[1;0; -1;-1]; [RA,RB,n,X] =gaus (A,b)请注意:因为RA=RB=n,所以此方程组有唯一解.运行结果为:RA =4RB =4n =4X =-0.50000.5000.列主消元发的程序:function [RA,RB,n,X]=liezhu(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1[Y,j]=max(abs(B(p:n,p))); C=B(p,:);B(p,:)= B(j+p-1,:); B(j+p-1,:)=C;for k=p+1:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m*B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n);X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.')endend在工作窗口输入程序:A=[1 -1 1 -3; 0 -1 -1 1;2 -2 -4 6;1 -2 -4 1];b=[1;0; -1;-1]; [RA,RB,n,X]=liezhu(A,b)请注意:因为RA=RB=n,所以此方程组有唯一解.运行结果为:RA =4RB =4n =4X =-0.50000.5000实验体会:通过这次实验我了解了高斯消元法和列主消元方法的基本思想,虽然这两个程序的编写是有点困难的,但运行起来还是比较容易的,解决了不少实际问题的计算。

数值分析实验报告(包括高斯消去、二分法、牛顿迭代法)

数值分析实验报告(包括高斯消去、二分法、牛顿迭代法)
N=input('please enter the largest number of iterations:N=');
for k=1:N
x=(a+b)/2;
fx=feval(f,x);fa=feval(f,a);
if abs((b-a)/2)<e || abs(fx)<e
disp('the number of iterations is');k
f=input('please enter a function:f(x)=');
x0=input('please enter the initial value:x0=');
e=input('please enter error:e=');
N=input('please enter the largest number of iterations:N=');
disp('the approximate solution is');x
disp('f(x) is');fx
disp('the number of iterations is');k
return
else
x0=x;
end
end
end
disp('The maximum number of iterations is reached, stop calculation');
开课学院、实验室:实验时间:2014年1月1日
课程
名称
数值分析基础性实验
实验项目
名称
数值计算算法及实现

计算方法实验报告习题2(浙大版)

计算方法实验报告习题2(浙大版)

计算方法实验报告实验名称: 实验2 列主元素消去法解方程组 1 引言工程实际问题中,线型方程的系数矩阵一般为低阶稠密矩阵和大型稀疏矩阵。

用高斯消去法解Ax =b 时,可能出现)(k kk a 很小,用作除数会导致中间结果矩阵元素数量级严重增长和舍入误差的扩散,使结果不可靠;采用选主元素的三角分解法可以避免此类问题。

高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A =LU ,并求解Ly =b 的过程。

回带过程就是求解上三角方程组Ux =y 。

所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法。

采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度。

2 实验目的和要求通过列主元素消去法求解线性方程组,实现P A =LU 。

要求计算解x ,L ,U ,整形数组IP (i ),(i =1,2,…,)(记录主行信息)。

3 算法原理与流程图(1)原理将A 分解为两个三角矩阵的乘积A =LU 。

对方程组的增广矩阵[]b A A ,=经过k-1步分解后,可变成如下形式:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡→-------------n nnnjnkk n n n i in ij ik k i i i k kn kj kk k k k k k n k j k k k k k k k n j k k n j k k b a a a l l l b a a a l l l b a a a l l l y u u u u l l y u u u u u l y u u u u u u A1,211,211,211,1,1,11,12,11,122221,2222111,1,11,11211第k 步分解,为了避免用绝对值很小的数kku 作除数,引进量1111 (,1,,;1,2,,) ()/ (1,2,,;1,2,,)k kj kj km mj m k ik ik im mk kk m u a l u j k k n k n l a l u u i k k n k n -=-=⎧=-=+=⎪⎪⎨⎪=-=++=⎪⎩∑∑11(,1,,)k i ik im mkm s a l u i k k n -==-=+∑,于是有kk u =ks 。

高斯消元实验报告

高斯消元实验报告

实验报告一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消元法小组成员:李岚岚、邱粉珊、缪晓浓、杨水清学号: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。

数值分析实验报告--列主元高斯消去

数值分析实验报告--列主元高斯消去

2、用列主元高斯消去法解线性方程组b =Ax .⑴ ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--34.981.4987.023.116.427.199.103.601.3⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡321x x x =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡111 ⑵ ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--34.981.4990.023.116.427.199.103.600.3⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡321x x x =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡111 分别输出A b A det ,,,解向量x ,(1)中A 的条件数。

分析比较(1)(2)的计算结果。

程序1(列主元高斯消去解线性方程组):#include<stdio.h>#include<math.h>#define n 3void LZYGSXQ(double a[n][n],double b[n]){double x[3],L,max,det=1;int r,t,i,j,k;for(k=0;k<n-1;k++) //选组员{{max=fabs(a[k][k]);r=k;}for(i=k+1;i<n;i++){if(fabs(a[i][k])>max)r=i;for(t=k;t<n;t++){L=a[k][t];a[k][t]=a[r][t];a[r][t]=L;}L=b[k];b[k]=b[r];b[r]=L;det=-det;}for(i=k+1;i<n;i++) //高斯消去{L=a[i][k]/a[k][k];for(j=k;j<n;j++){a[i][j]=a[i][j]-L*a[k][j];}b[i]=b[i]-L*b[k];}det=a[k][k]*det;}det=a[k][k]*det;printf("高斯消去后的方程系数\n"); //输出高斯消去后的系数矩阵for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%f ",a[i][j]);}printf("%f ",b[i]);printf("\n");}printf("\n");printf("行列式的值det=%f\n",det);x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){ //回代求解xfor(j=i+1;j<n;j++)b[i]=b[i]-a[i][j]*x[j];x[i]=b[i]/a[i][i];}printf("方程的解向量=(");for(i=0;i<=n-1;i++)printf("%f ",x[i]);printf(")\n");}void main(){double a1[3][3]={{3.01,6.03,1.99},{1.27,4.16,-1.23},{0.987,-4.81,9.34}},b1[3]={1,1,1};double a2[3][3]={{3.00,6.03,1.99},{1.27,4.16,-1.23},{0.987,-4.81,9.34}},b2[3]={1,1,1};LZYGSXQ(a1,b1);printf("\n\n\n");LZYGSXQ(a2,b2);}计算结果:方程组(1)的解向量为),,493.617725-631.911376-51592.59962(1=x ,方程组(2)的解向量为)644123.41-336653.53163940.135(2,,=x 。

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

列主元高斯消去法实验报告
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)方程组的矩阵系数用二维数组表示,不用指针,且其值要求用输入语句输入。(数组形式的完成,经检查后,有能力的可以改用指针方式)

高斯消元法_实验报告(两篇)

高斯消元法_实验报告(两篇)

引言概述:本实验报告是关于高斯消元法的实验,主要研究了高斯消元法在解决线性方程组中的应用。

高斯消元法是一种用于求解线性方程组的重要方法,通过矩阵运算将线性方程组转化为简化的上三角矩阵,从而得到方程组的解。

本实验从理论和实际实验两个方面进行了探讨,并针对高斯消元法的优缺点进行了总结。

正文内容:一、高斯消元法的基本原理1.将线性方程组化为增广矩阵形式;2.通过行变换将增广矩阵转化为上三角矩阵;3.从最后一行开始,逐行回代求解未知数;4.得到方程组的解。

二、高斯消元法的详细步骤1.初始化:将线性方程组转化为增广矩阵形式;2.主元选取:选取当前列中绝对值最大的元素作为主元,通过行交换将主元移到当前行的对角线位置;3.消元过程:利用主元将当前列下方的元素消为零;4.上三角矩阵:重复执行主元选取和消元过程,直到将增广矩阵转化为上三角矩阵;5.回代求解:从最后一行开始,逐行回代求解未知数。

三、高斯消元法的优点1.算法简单:高斯消元法的步骤清晰明确,易于实现;2.稳定性好:高斯消元法可以稳定地求解非奇异矩阵的线性方程组;3.适用范围广:高斯消元法可以用于求解任意大小的线性方程组。

四、高斯消元法的缺点1.数值稳定性问题:当矩阵的主元非常小的时候,高斯消元法可能造成数值不稳定性,导致计算误差增大;2.增加计算时间和空间:高斯消元法的计算复杂度较高,当矩阵规模较大时,计算时间和内存消耗也会相应增加;3.对特殊矩阵的适应性不强:高斯消元法在处理具有稀疏矩阵或者特殊结构矩阵时,效率不高。

五、实验结果及分析1.通过实验验证了高斯消元法的正确性和有效性;2.分析了在一些特殊情况下,高斯消元法可能会遇到的问题;3.对使用高斯消元法解决线性方程组的实际应用进行了探讨;4.对高斯消元法与其他求解线性方程组的方法进行了比较分析;5.提出了可能的改进方向,以提升高斯消元法的效率和稳定性。

总结:本实验报告基于高斯消元法的原理和步骤,详细阐述了高斯消元法在解决线性方程组中的应用。

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

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

选列主元的高斯消去法实验报告令狐烈一,实验目的:(1)掌握gauss消去法的基本算法思想和学会编写其MATLAB代码。

(2)掌握选列主元的gauss消去法的基本算法思想和学会编写其MATLAB代码。

(3)分析选列主元的gauss消去法相比于gauss消去法的优点。

(4)对选列主元的gauss消去法和gauss消去法进行误差分析二,实验原理对于非奇异矩阵A,求解线性方程组Ax=b可以使用gauss消去法进行。

但是,gauss消去法要求系数矩阵A的顺序主子式非奇异。

为此做出改进:每次消元之前,首先选出第i列(i<=k)中最大的作为列主元,这样,就能保证消元乘数不仅不被系数矩阵A的顺序主子式非奇异的限制,还这样就能有效的防止误差的传播与放大。

算法:(1)对增广矩阵[a b]进行第i次消元,首先选取列主元a(i,k)=Max|a(I,i:n),交换第i行与第k行;(2)以列主元进行消元,计算公式为a(k,i)= a(k,i)/a(i,i); (k=i+1:n)a(k,j)=a(k,j)-a(k,i)*a(i,j); (j=i:n)(3)回代法计算结果,计算公式为:x(n)=b(n)/a(n,n);x(p)=[b(p)-∑a(p,j)x(j)]/a(p,p) (j=p+1:n)注:gauss(a,b)为选取列主元gauss消去法,gauss2(a,b)为gauss消去法。

三,实验MATLAB程序代码实验的MATLAB程序代码如下四,实验结果与分析1,两种算法对系数矩阵的顺序主子式奇异线性方程的效果分析实验结果(如图一)对于顺序主子式奇异的系数矩阵,使用gauss消去法(gauss2(a,b))不能解出,而使用选列主元的gauss消去法(gauss(a,b))能够解出。

主要是选列主元的gauss消去法每次都选出最大的列主元,从而保证了每次用作除数的a(I,i)≠0.图一:两种算法对系数矩阵的顺序主子式奇异线性方程的效果2,两种算法对舍入误差的放大效应分析用随机生成函数random('Normal',1,7,10,10)生成10*10矩阵,分别gauss消去法和选列主元的高斯消去法解出,并用公式er(x)=||x−x∗||||x||≤cond(a)∗||r||||b||估计其误差,结果如下图。

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

计算方法实验报告_列主元高斯消去法
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++) {

Gauss消去法实验报告

Gauss消去法实验报告
%如果最大的数为零,则矩阵奇异,停机退出
%进行行变换
%计算乘子
% 对k+1~n项进行消元
%回代求解
%输出最终的解X
实验程序如下:
四、实验数据及结果:
1、实验送的初值为:
A=[0.729,0.810,0.900;1.000,1.000,1.000;1.331,1.210,1.100]
b=[0.6867;0.8338;1.0000]
3、根据gauss消去法的原理编写matlab程序,并运行出相应的结果,提高matlab编程能力。
二、实验原理:
消元过程:
设 ,令乘数 ,做(消去第i个方程组的 )操作 ×第1个方程+第i个方程(i=2,3,.....n)
则第i个方程变为
这样消去第2,3,。。。,n个方程的变元 后。原线性方程组变为:
4.输入矩阵时的分行符号是英文分号而不是中文分号,否则会出现运行错误。
实验二、列主元法解线性方程组
一、实验目的:
1、学习使用matlab编写数值计算程序。
2、了解列主元消去法的基本原理和解法思路及相应的编程方法。
3、根据列主元法的原理编写matlab程序,并运行出相应的结果,提高matlab编程能力。
二、实验原理:
由一般线性方程组在使用Gauss消去法求解时,从求解过程中可以清楚地看到,若 ,必须施以行交换的手续,才能使消去过程继续下去。有时既使 ,但其绝对值很小,由于舍入误差的影响,消去过程也会出现不稳定现象。因此,为使这种不稳定现象发生的可能性减至最小,在施行消去过程时每一步都要选主元素,即要寻找行 ,使
4.输入矩阵时的分行符号是英文分号而不是中文分号,否则会出现运行错误。
5.在没有语法错误及其他提示的情况下,运行结果错误,可以进行动态定点定位查询,方便检查错误

高斯消元法_实验报告

高斯消元法_实验报告

- - 华中科技大学数值分析实验报告系、年级研究生院2012级****类别硕士2013年5月6日实验6.1实验要求:根据教材实验6.1做出相应改编:分别使用Gauss 消元、列选主元。

全选主元的方法求解线性方程组,分别比拟三种消元方法的结果和算法的区别,并说明主元的选取在Gauss 消元的中的作用。

问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。

但由于计算机的数值运算是在一个有限的浮点数集合上进展的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。

主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。

一般来说书本上采用的列选主元的方法对其线性方程组进展求解的,则我们是否可以选择一种行列都选取主元消去的方法来减小相应的误差呢?全主元消元法和列主元消元法一样都是由高斯消元法演变而来。

只不过选取主元的*围有所加大。

全选主元相对于列选主元的更加复杂化了,因为在运算的过程中导致了元的位置发生了变化,这样我们就不得不追踪每个元的位置。

本次实验就几个问题进展了matlab 实验分析,比拟几种计算方法的优劣性。

实验内容:考虑线性方程组编制一个程序:分别能进展Gauss 消去、列选主元Gauss 消去、全选主元Gauss 消去法进展解线性方程组。

对三种算法所得到的结果进展比拟,分析三种计算方法的准确性。

具体内容:〔1〕取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。

取n=10、n=20计算矩阵的条件数。

分别编写利用matlab 编写运算程序,实现Gauss消去、列选主元消去以及全选主元消去的方法。

比拟三种计算方法的运算结果。

在列选主元的过程中分别采用每步消去过程总选取按模最小或按模尽可能小的元素作为主元或每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。

高斯列主消元数值分析实验报告

高斯列主消元数值分析实验报告

数值分析实验报告之高斯列主消元法一、实验目的:清楚高斯列主元消去法与高斯主元素消去法的区别,以及它提出的必要性;掌握高斯列主元消去法的原理及推导过程,会用其解简单的线性方程组。

二、实验内容:用高斯列主元消去法解方程组⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--643.5072.1000.2623.4712.3000.1000.3000.2001.0⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡321x x x =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡000.3000.2000.1 三、实验原理:在采用高斯消去法解方程组时,小主元可能产生麻烦,即用其做除数,会导致其他元素数量级的严重增长和舍入误差的扩散,最终使得计算的解不可靠。

故应避免采用绝对值小的主元素。

在消元之前,选择一个绝对值最大的元素作为主元,用其做除数来进行消元,这样就具有较好的数值稳定性。

这就是选主元消去法。

下面详细说明列主元素消去法。

第一步:在Ax=b 即)1()1(b x A =的系数矩阵)1(A 的第一列元素中选择一个绝对值最大的元素,不妨设为)1(1l a 。

对调)1(1j a 和)1(lj a 及)1(1b 和)1(l b (j=1,2,……,n ,1≤l ≤n)。

以)1(1l a 作为新的)1(11a 进行消元(消去对调后的第2~n 个方程中的1x )。

第k 步:(1≤k ≤n-1)设第k-1步消元过程完成,得到)()(k k b x A =,检查)(k A 中第k 列的后n-k+1个元素)(k kk a ,)(1k k k a +,…,)(k nk a ,从中选出绝对值最大者,不妨设是)(k pk a ,称它为第k 列主元素。

若p=k ,则取)(k kk a 做除数直接进行消元。

若p ≠k,则将第p 个方程与第k 个方程对调,使)(k pk a 成为新的)(k kk a ,然后以其作为除数进行消元,继续这一过程,直至得到等价的三角形方程组)()(n n b x A =,下一阶段的回代过程不变。

解线性方程组的列主元素高斯消去法和LU分解法

解线性方程组的列主元素高斯消去法和LU分解法

解线性方程组的列主元素高斯消去法和LU分解法数值试验报告分析一、实验名称:解线性方程组的列主元素高斯消去法和LU分解法二、实验目的及要求:通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。

三、算法描述:本次试验采用的是高斯列主元消去法和LU分解法求解线性方程组的解。

其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到底的条件:当A可逆时,列主元Gau(高斯)消去法一定能进行到底。

优点:具有很好的数值稳定性;具有与顺序Gau消去法相同的计算量。

列主元Gau(高斯)消去法的精度显著高于顺序Gau(高斯)消去法。

注意:省去换列的步骤,每次仅选一列中最大的元。

矩阵的三角分解法是A=LU,L是下三角阵,U是上三角阵,Doolittle分解:L是单位下三角阵,U是上三角阵;Crout分解:L是下三角阵,U是单位上三角阵。

矩阵三角分解的条件是矩阵A有唯一的Doolittle分解的充要条件是A的前n-1顺序主子式非零;矩阵A有唯一的Crout分解的充要条件是A的前n-1顺序主子式非零。

三角分解的实现是通过(1)Doolittle分解的实现;(2)Doolittle分解的缺点:条件苛刻,且不具有数值稳定性。

(3)用Doolittle分解求解方程组:A某=bLU某=bLY=bA=LUU某=Y;四、实验内容:解下列两个线性方程组3.016.031.99某114.161.23某21(1)1.270.9874.819.34某1371032.099999(2)51211某1862某25.90000151某3502某410a、用你熟悉的算法语言编写程序用列主元高斯消去法和LU分解求解上述两个方程组,输出A某=b中矩阵A及向量b,A=LU分解的L及U,detA及解向量某.b、将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量某及detA,并与(1)中结果比较。

消元法实验报告2

消元法实验报告2

西京学院数学软件实验任务书一、实验目的:了解高斯消元法的基本原理,熟悉高斯顺序消元法和高斯列主元消元法的基本算法。

运用Matlab/C/C++/Java/Maple/Mathematica 等其中一种语言实现高斯消元法。

对于输入的任意矩阵能解其线性方程组。

二、实验基本原理和内容:用高斯消元法求解线性方程组的基本思想是设法消去方程组的系数矩阵A 的主对角线下的元素,而将A x b =化为等价的上三角方程组,然后再回代过程便可以获得方程组的解。

这种解线性方程组的方法,常称为高斯消元法。

内容高斯消元法解方程组: 1230.001 2.000 3.000 1.0001.000 3.712 4.623 2.0002.0001.0725.643 3.000x x x ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥-=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦(1)高斯顺序消元法:第一步:消元 对1,2,,1k n =-若()0k kk a =则停止计算对1,2,,i k k n =++计算因子()()/k k ik ik kk l a a =;对1,2,,j k k n =++计算(1)()()(1)()()k k k ijij ik kj k k k ii ik k a a l a b b l b ++⎧=-⎪⎨=-⎪⎩;第二步:回代 对,1,,1i n n =-()()1ni i iij jj i i i iib a x x a=+-=∑(高斯消元的条件)若A 的所有顺序主子式均不为0,则高斯消元无需换行即可进行到底,且得到唯一解。

若消元过程中允许对增广矩阵进行行交换,则方程组A x b =可用消元法求解的充要条件是A 可逆。

(二)高斯列主元消元法第一步:在A x b =即(1)(1)A x b =的系数矩阵(1)A 的第一列元素中选择一个绝对值最大的元素,不妨设(1)1i a 。

对调(1)1j a 和(1)ij a 及(1)1b 和(1)ib (1,2,,,1)j n i n =≤≤ 。

选主元素法实验报告

选主元素法实验报告

选主元素高斯消去法求解非线性方程组的实验报告一、实验题目利用选主元素高斯消去法求解以下线性方程组:二、实验引言1.实验目的①掌握用直接法,即选主元素高斯消去法求解线性方程组的基本思想和步骤,熟。

悉fortran 语言精确求解该方程组;②并能够利用选主元的高斯消去法解任意阶数的线性方程组。

2.实验意义消去法虽程序复杂,对高阶矩阵易受到计算机容量的限制,适用于中小型方程组,但该方法精确度高且工作量小三、算法设计1.选主元消去法基本思路(1)消元过程。

对于k=1,2,...,n-1,进行下列运算:①选主元,确定r ,t 使得若art=0,则系数矩阵为奇异的,停止计算;否则进行下一步。

②交换A 中的r 、t 两行及t 、k 两列,并记下交换的号码t 、k 。

③对于i=k+1,k+2,…n ;j=k+1,k+2,…n+1,计算(2)回代过程。

对于k=n ,n-1,…,1,计算⎪⎩⎪⎨⎧=+--=-+-=--2.453.82102.7210321321321x x x x x x x x x(3)恢复解的顺序2.算法流程图主程序选主元素四、程序设计program maininteger,parameter::n=3real::a(3,3)=(/10.0,-1.0,-1.0,-1.0,10.0,-1.0,-2.0,-2.0,5.0/) real::b(3)=(/7.2,8.3,4.2/)integer::k,i,j,lreal::m,tdo k=1,nm=abs(a(k,k))l=kdo i=k+1,nif(abs(a(i,k))>m) thend=a(i,k)l=iend ifif (d/=0) thenwrite(*,*) "!"end ifif(l/=k) thent=a(l,j)a(l,j)=a(k,j)a(k,j)=tt=b(l)b(l)=b(k)b(k)=tend ifend dodo j=k+1,na(k,j)=a(k,j)/a(k,k)end dob(k)=b(k)/a(k,k)do i=k+1,ndo j=k+1,na(i,j)=a(i,j)-a(k,j)*a(i,k)end dob(i)=b(i)-b(k)*a(i,k)end doend dodo i=n,1,-1do j=i+1,nb(i)=b(i)-a(i,j)*b(j)end doend dowrite(*,*) b(1),b(2),b(3)end五、结果及讨论1.实验结果1.100000 1.200000 1.3000002.讨论分析(1)误差运用选主元素法,减小了舍入误差对解的影响。

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

选列主元的高斯消去法实验报告
令狐烈
一,实验目的:
(1)掌握gauss消去法的基本算法思想和学会编写其MATLAB代码。

(2)掌握选列主元的gauss消去法的基本算法思想和学会编写其MATLAB代码。

(3)分析选列主元的gauss消去法相比于gauss消去法的优点。

(4)对选列主元的gauss消去法和gauss消去法进行误差分析
二,实验原理
对于非奇异矩阵A,求解线性方程组Ax=b可以使用gauss消去法进行。

但是,gauss消去法要求系数矩阵A的顺序主子式非奇异。

为此做出改进:每次消元之前,首先选出第i列(i<=k)中最大的作为列主元,这样,就能保证消元乘数
不仅不被系数矩阵A的顺序主子式非奇异的限制,还这样就能有效的防止误差的传播与放大。

算法:
(1)对增广矩阵[a b]进行第i次消元,首先选取列主元a(i,k)=Max|a(I,i:n),交换第i行与第k行;
(2)以列主元进行消元,计算公式为
a(k,i)= a(k,i)/a(i,i); (k=i+1:n)
a(k,j)=a(k,j)-a(k,i)*a(i,j); (j=i:n)
(3)回代法计算结果,计算公式为:
x(n)=b(n)/a(n,n);
x(p)=[b(p)-∑a(p,j)x(j)]/a(p,p) (j=p+1:n)
注:gauss(a,b)为选取列主元gauss消去法,gauss2(a,b)为gauss消去法。

三,实验MATLAB程序代码
实验的MATLAB程序代码如下
四,实验结果与分析
1,两种算法对系数矩阵的顺序主子式奇异线性方程的效果分析
实验结果(如图一)对于顺序主子式奇异的系数矩阵,使用gauss消去法(gauss2(a,b))不能解出,而使用选列主元的gauss消去法(gauss(a,b))能够解出。

主要是选列主元的gauss消去法每次都选出最大的列主元,从而保证了每次用作除数的a(I,i)≠0.
图一:两种算法对系数矩阵的顺序主子式奇异线性方程的效果
2,两种算法对舍入误差的放大效应分析
用随机生成函数random('Normal',1,7,10,10)生成10*10矩阵,分别gauss消
去法和选列主元的高斯消去法解出,并用公式er(x)=||x−x∗||
||x||≤cond(a)∗||r||
||b||
估计其误差,
结果如下图。

图二:两种算法对舍入误差的放大效应分析
可以看到,对同一个方程组,选列主元的高斯消去法得到的结果中范数norm(r=a*ans'-b,inf)= 6.6613e-016<高斯消去法得到的结果中范数norm(r=a*ans'-
b,inf)= 7.6605e-015,两者相差一个数量级,由公式 er(x)=||x−x∗||
||x||≤cond(a)∗||r||
||b||
可知,
对应的误差也就相差一个数量级。

选列主元的高斯消去法因为每次消元之前,首先选出第i列(i<=k)中最大的作为列主元,这样,就能保证消元乘数小于1,因此选列主元的高斯消去法能有效的防止误差的传播与放大。

3,对于恶性矩阵:希尔伯特矩阵,选列主元的高斯消去法的表现:
由以下代码生成希尔伯特矩阵:
for i=1:n
for j=1:n
a(i,j)=1/(i+j-1);
end
end
取方程组Hx=ones(n,1);
当n=5, 结果为:
norm(a*ans'-b,inf)= 8.7311e-011;
er(x)=||x−x∗||
||x||≤cond(a)∗||r||
||b||
= (4.7661e+005*1.4211e-014)/ 2.2361=3.0290*-09;
可见误差比较小;结果还可以接受。

当n=10, 结果为:
norm(a*ans'-b,inf)=8.7311e-011;
er(x)=||x−x∗||
||x||≤cond(a)∗||r||
||b||
= (1.6025e+013*8.7311e-011)/ 3.1623=4.4720*+02;
此时,误差已经大到无法接受。

对于这样的情况,需要用以下方法改进:
(1)算出残余矩阵r= b -a*x;
(2)解出a*y=r;
(3)X’=x+y;
但是这种改进只对病态不是很严重的矩阵有帮助,对病态严重的矩阵,比如对于H10,我们有:
改进后,解得:
x=(x+y) = 1.0e+006 *[ -0.0000 0.0010 -0.0238 0.2402 -1.2611 3.7834 -6.7260 7.0006 -3.9379 0.9237],
对应误差为
er(x)=||x−x∗||
||x||≤cond(a)∗||r||
||b||
= (1.6025e+013* 8.0036e-011)/
3.1623=
4.0558*+02,
可见改进并无很好效果。

五,实验心得
(1)通过具体的实验,我真正明白了gauss消去法的原理,而且明白了选列主元的gauss消去法对于减小系数矩阵的要求和减少舍入误差的传
播方面的优点。

(2)由于MATLAB我是才开始接触,因此在编程的时候碰到了许多问题,花了不少时间,但是也让我对MATLAB的使用有了进一步的了解。

相关文档
最新文档