消元法实验报告4
C++实验报告高斯消元法
高斯肖元法C++上机实验报告学生姓名: 学 号: 专业班级: 实验类型: 综合一 实验项目名称全选主元高斯消去法解线性方程组 二 实验原理设有n 元线性方程组(考虑便于C++程序数组表示,方程的下标从0开始),0000110,1100000110,111101,111,111n n n n n n n n n n a x a x a x b a x a x a x b a x a x a x b ---------+++=⎧⎪+++=⎪⎨⎪⎪+++=⎩写为矩阵形式为Ax=b,其中A 为线性方程组的系数矩阵,x 为列向量,是方程组的解,b 也是列向量.一般来讲,可以假定矩阵A 是非奇异阵。
(n 阶矩阵A 的行列式不为零,即 |A|≠0,则称A 为非奇异矩阵)00010,10111,1,01,11,1n n n n n n a a a a a a A a a a ----⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦,011n x x x x -⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ ,011n b b b b -⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦将系数矩阵A 和向量b 放在一起,形成增广矩阵B :00010,010111,11,01,11,11(,)n n n n n n n a a a b a a a b b A b a a a b -----⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎣⎦全选主元消去就在矩阵B 上进行,整个过程分为如下两个步骤: 第一步:消去过程。
对于k 从0开始到n-2结束,进行以下三步。
1. 首先,从系数矩阵A 的k 行k 列开始的子矩阵中选取绝对值最大的元素作为主元素。
例如:11,max 0i j ij k i n k j na a ≤<≤<=≠然后交换B的第k行与第1i行,第k列与第1k列,这样,这个子矩阵中具有最大绝对值的元素被交换到k行k列的位置上.2.其次,进行归一化计算。
计算方法为:/,1,,1/kj kj kkk k kka a a j k nb b a==+-⎧⎪⎨=⎪⎩3.最后进行消去计算:,,1,,1,1,,1 ij ij ik kji i ik ka a a a j i k nb b a b i k n=-=+-⎧⎪⎨=-=+-⎪⎩第二步,回带过程:111,111/,2,,1,0 n n n nni i ij jj ix b ax b a x i n-----=+=⎧⎪⎨=-=-⎪⎩∑三代码的实现整个程序分为5个独立文件,Matrix.h文件中包括矩阵类Matrix的定义,Matrix.cpp文件中包括该类成员函数的实现,LinearEqu.h文件中包括线性方程组类LinearEqu的定义,LinearEqu.cpp文件中包括该类的成员函数实现文件;7-9.cpp文件包括程序的主函数,主函数中定义了一个类LinearEqu的对象,通过这个对象求解一个四元线性方程组。
guess消元法
{
for(j=1;j<=n+1;j++)
{
cin>>a[i][j];
}
}
for(k=1;k<=n-1;k++)
{
for(i=k+1;i<=n;i++)
{
for(j=k+1;j<=n+1;j++)
{
a[i][j]=a[i][j]-(a[i][k]/a[k][k])*a[k][j];
《数值分析》实验报告
实验序号:实验一题目名称:Gauss消元法解方程组
学号:XXXXXXX姓名:XXX
任课教师:XXXX专业班级:算机科学与技术(师范)
1、实验目的:
编写用Gauss消元法解线形方程组的程序
2、实验分析:
计算方法分析:
Gauss消元法的基本做法就是把方程组转化成为一个如下图的等价的三角方程组,这个过程叫做消元。得到三角方程组后,就可以逐个求出Xn,Xn-1,…,X1,这个过程叫回代。
程序代码分析:
建立两个数组a和b,通过循环语句将n阶增广矩阵输入进去,通过对列的循环对每一列进行消去未知数,通过n小步n大步把矩阵化简成上三角形矩阵,最后通过迭代法解得方程组得解。
3、函数分析:
程序中只用到一个主函数,求解线形方程组得算法都放在主函数中,
利用以下函数进行求解:
a[i][j]=a[i][j]-a[i][k]/a[k][k]*a[k][j];
b[i]=b[i]-a[i][k]/a[k][k]*b[k];
迭代:
for(i=n-1;i>0;i--)
线性方程组的消元法
线性方程组的消元法线性方程组的消元法是解决线性方程组的常用方法之一,通过逐步消去未知数的系数,将方程组转化为更简单的形式,从而求得方程组的解。
本文将详细介绍线性方程组的消元法及其应用。
1. 消元法简介消元法是一种通过逐步消除未知数的系数,将线性方程组转化为更简单形式的方法。
它的基本思想是通过不断的代入与消去操作,将方程组转化为三角形式或最简形式,从而求得方程组的解。
2. 线性方程组的一般形式线性方程组的一般形式可以表示为:a₁₁x₁ + a₁₂x₂ + ... + a₁ₙxₙ = b₁a₂₁x₁ + a₂₂x₂ + ... + a₂ₙxₙ = b₂...aₙ₁x₁ + aₙ₂x₂ + ... + aₙₙxₙ = bₙ其中,a₁₁、a₁₂、...、aₙₙ为未知数的系数,b₁、b₂、...、bₙ为常数项。
3. 消元法的步骤(1)选取主元:根据方程组的特点,选择一项作为主元,并将其系数置为1,并且使其所在的其他行对应的列的系数皆为0,这样可以简化计算过程并减少误差。
(2)代入消元:选择一个非主元进行代入,将其代入主元所在的其他方程中,从而消去该未知数。
(3)重复步骤(1)和(2),直至将所有的非主元都消去为止。
(4)最后得到一个三角形形式的线性方程组,可以通过回代法求解该方程组的解。
4. 消元法的应用消元法广泛应用于各个领域,特别是在科学和工程领域中具有重要作用。
以下是几个应用实例:(1)经济学中的输入产出模型:通过消元法可以分析不同产业之间的投入产出关系,从而得出经济模型的解释。
(2)物理学中的电路分析:通过消元法可以简化复杂的电路方程组,从而计算出电路中各个节点的电压和电流。
(3)化学反应平衡问题:通过消元法可以解决化学反应平衡过程中的复杂线性方程组,从而得到反应物和生成物的浓度。
5. 总结消元法是一种解决线性方程组的有效方法,通过逐步消除未知数的系数,将方程组转化为更简单的形式,从而求得方程组的解。
试验四 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]); }
高斯消去算法实验报告
高斯消去算法实验报告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实验体会:通过这次实验我了解了高斯消元法和列主消元方法的基本思想,虽然这两个程序的编写是有点困难的,但运行起来还是比较容易的,解决了不少实际问题的计算。
高斯消元实验报告
实验报告一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。
简单消元法
简单消元法在代数学中,消元法是一种常用的解方程的方法。
它通过逐步消去未知数的系数或变量,将复杂的方程化简为简单的形式,从而求得未知数的值。
消元法的基本思想是利用等式两边的等值性,通过适当的运算将方程两边的未知数系数消去,最终得到只含有一个未知数的简单方程。
这种方法常用于解一元一次方程、一元二次方程等。
我们来看一元一次方程的消元法求解过程。
一元一次方程的一般形式为ax + b = 0,其中a和b为已知常数,x为未知数。
我们的目标是求解方程中的未知数x。
消元法的第一步是将方程两边的常数项b移到方程的另一边,得到ax = -b。
接着,我们可以通过除以系数a的方式将方程化简为x = -b/a。
这样,我们就得到了方程的解。
对于一元二次方程的消元法求解过程,稍微复杂一些。
一元二次方程的一般形式为ax^2 + bx + c = 0,其中a、b和c为已知常数,x为未知数。
消元法的第一步是将方程两边的常数项c移到方程的另一边,得到ax^2 + bx = -c。
接着,我们可以通过除以系数a的方式将方程化简为x^2 + (b/a)x = -c/a。
接下来,我们需要通过添加适当的常数项将方程的左边变为一个完全平方。
具体的做法是,我们将方程左边的(b/a)^2/4添加到方程的两边,得到x^2 + (b/a)x + (b/a)^2/4 = -c/a + (b/a)^2/4。
这样,我们可以将方程的左边写成一个完全平方的形式,即(x + b/2a)^2 = -c/a + (b/a)^2/4。
接着,我们可以通过开方的方式求得方程的解。
总结起来,消元法是一种通过适当的运算将方程化简为简单形式的方法。
它在解方程的过程中,通过消去未知数的系数或变量,将复杂的方程转化为简单的形式,从而更容易求解。
在应用消元法解决问题时,我们需要注意以下几点。
首先,要仔细观察方程的形式,确定合适的消元方法。
其次,要注意运算的准确性和规范性,避免出现计算错误。
列主元消去法解方程组实验报告
实验名称: 列主元消去法解方程组 1 引言我们知道,高斯消去法是一个古老的解线性方程组的方法。
而在用高斯消去法解Ax=b时,其中设A 为非奇异矩阵,可能出现()0k kka =的情况,这时必须进行带行交换的高斯消去法。
但在实际计算中即使()0k kk a ≠但其绝对值很小时,用()k kka 作除数,会导致中间结果矩阵()k A 元素数量级严重增长和舍入误差的扩散,使得最后的结果不可靠。
因此,小主元可能导致计算的失败,我们应该避免采用绝对值很小的主元素。
为此,我们在高斯消去法的每一步应该在系数矩阵或消元后的低阶矩阵中选取绝对值最大的元素作为主元素,保持乘数1ik m ≤,以便减少计算过程中舍入误差对计算解的影响。
一种方式是完全主元消去法,这种消去法是在每次选主元时,选择()()max 0k kk k i j ij k i nk j na a ≤≤≤≤=≠为主元素。
这种方法是解低阶稠密矩阵方程组的有效方法,但这种方法在选取主元时要花费一定的计算机时间。
实际计算中我们常采用部分选主元的的消去法。
列主元消去法即在每次选主元时,仅依次按列选取绝对值最大的元素作为主元素,且仅交换两行,再进行消元计算。
2 实验目的和要求运用matlab 编写一个.m 文件,要求用列主元消去法求解方程组(实现PA=LU ):12345671111111721111118321111110432111113543211117654321122765432128x x x x x x x ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎣⎦要求输出以下内容: (1) 计算解x ; (2) L,U ;(3) 整形数组IP (i )(i=1,2,…,n-1)(记录主行信息)3 算法原理与流程图(1) 算法原理设有线性方程组A x =b ,其中设A 为非奇异矩阵。
消元法实验报告3
西京学院数学软件实验任务书实验一全主元消去法【实验内容】1.掌握全主元消去法的基本思路和迭代步骤2.并能够利用全主元的高斯消去法解任意阶数的线性方程组;3、从课后题中选一题进行验证,得出正确结果,交回实验报告与计算结果。
【实验方法与步骤】全主元消去法基本思路(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,计算(3)恢复解的顺序【实验目的】能熟练运用全消元来解线性方程组%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 【实验程序】function [x,XA]=GuassQuan(A,b)N=size(A);n=N(1);index_l=0;index_r=0;order=1:n;for i=1:(n-1)me=max(abs(A(1:n,i)));for k=i:nfor r=i:nif(abs(A(k,r))==me) index_l=k;index_r=r;k=n;break;endendendtemp=A(i,1:n);A(i,1:n)=A(index_l,1:n);A(index_l,1:n)=temp;bb=b(index_l);b(index_l)=b(i);b(i)=bb;temp=A(1:n,i);A(1:n,i)=A(1:n,index_r);A(1:n,index_r)=temp;pos=order(i);order(i)=order(index_r);order(index_r)=pos;for j=(1+i):nif(A(i,i)==0)disp('对角元素为0!');return;endl=A(j,i);m=A(i,i);A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; b(j)=b(j)-l*b(i)/m;endendx=solveUpTriangle(A,b);y=zeros(n,1);for i=1:nfor j=1:nif(order(j)==i)y(i)=x(j);endendendx=y;XA=A;end例:A=[1 3 8;-5 2 9;0 1 4]>> b=[1;1;1]运行结果:x =0.3158-1.31580.5789XA =-5.0000 2.0000 9.0000 0 3.4000 9.8000 0 0 1.1176。
高斯消元法_实验报告(两篇)
引言概述:本实验报告是关于高斯消元法的实验,主要研究了高斯消元法在解决线性方程组中的应用。
高斯消元法是一种用于求解线性方程组的重要方法,通过矩阵运算将线性方程组转化为简化的上三角矩阵,从而得到方程组的解。
本实验从理论和实际实验两个方面进行了探讨,并针对高斯消元法的优缺点进行了总结。
正文内容:一、高斯消元法的基本原理1.将线性方程组化为增广矩阵形式;2.通过行变换将增广矩阵转化为上三角矩阵;3.从最后一行开始,逐行回代求解未知数;4.得到方程组的解。
二、高斯消元法的详细步骤1.初始化:将线性方程组转化为增广矩阵形式;2.主元选取:选取当前列中绝对值最大的元素作为主元,通过行交换将主元移到当前行的对角线位置;3.消元过程:利用主元将当前列下方的元素消为零;4.上三角矩阵:重复执行主元选取和消元过程,直到将增广矩阵转化为上三角矩阵;5.回代求解:从最后一行开始,逐行回代求解未知数。
三、高斯消元法的优点1.算法简单:高斯消元法的步骤清晰明确,易于实现;2.稳定性好:高斯消元法可以稳定地求解非奇异矩阵的线性方程组;3.适用范围广:高斯消元法可以用于求解任意大小的线性方程组。
四、高斯消元法的缺点1.数值稳定性问题:当矩阵的主元非常小的时候,高斯消元法可能造成数值不稳定性,导致计算误差增大;2.增加计算时间和空间:高斯消元法的计算复杂度较高,当矩阵规模较大时,计算时间和内存消耗也会相应增加;3.对特殊矩阵的适应性不强:高斯消元法在处理具有稀疏矩阵或者特殊结构矩阵时,效率不高。
五、实验结果及分析1.通过实验验证了高斯消元法的正确性和有效性;2.分析了在一些特殊情况下,高斯消元法可能会遇到的问题;3.对使用高斯消元法解决线性方程组的实际应用进行了探讨;4.对高斯消元法与其他求解线性方程组的方法进行了比较分析;5.提出了可能的改进方向,以提升高斯消元法的效率和稳定性。
总结:本实验报告基于高斯消元法的原理和步骤,详细阐述了高斯消元法在解决线性方程组中的应用。
数值分析列主元消去法的实验报告
实验一 列主元消去法【实验内容】1.掌握列主元消去法的基本思路和迭代步骤2.并能够利用列主元的高斯消去法解任意阶数的线性方程组;3、从课后题中选一题进行验证,得出正确结果,交回实验报告与计算结果。
【实验方法与步骤】1.列主元消去法基本思路设有线性方程组Ax b =,设A 是可逆矩阵。
列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。
2.列主元高斯消去法算法描述将方程组用增广矩阵[]()(1)|ij n n B A b a ⨯+==表示。
步骤1:消元过程,对1,2,,1k n =-L(1) 选主元,找{},1,,k i k k n ∈+L 使得,max k i k ik k i na a ≤≤= (2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3);(3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ↔,,,1j k n =+L ;(4) 消元,对,,i k n =L ,计算/,ik ik kk l a a =对1,,1j k n =++L ,计算.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 =-L ,计算,11/n i i n ij j ii j i x a a x a +=+⎛⎫=- ⎪⎝⎭∑[实验程序]#include<math.h>#include<stdio.h>#include<iostream>#include<conio.h>#define NUMBER 20#define Esc 0x1b#define Enter 0x0dusing namespace std;float A[NUMBER][NUMBER+1] ,ark;int flag,n;void exchange(int r,int k);float max(int k);void message();void main(){float x[NUMBER];int r,k,i,j;char celect;void clrscr();printf("\n\nUse Gauss.");printf("\n\n1.Jie please press Enter.");printf("\n\n2.Exit press Esc.");celect=getch();if(celect==Esc)exit(0);printf("\n\n input n=");scanf("%d",&n);printf(" \n\nInput matrix A and B:");for(i=1;i<=n;i++){printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); }for(k=1;k<=n-1;k++){ark=max(k);if(ark==0){printf("\n\nIt’s wrong!");message();}else if(flag!=k)exchange(flag,k);for(i=k+1;i<=n;i++)for(j=k+1;j<=n+1;j++)A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k]; }x[n]=A[n][n+1]/A[n][n];for( k=n-1;k>=1;k--){float me=0;for(j=k+1;j<=n;j++){me=me+A[k][j]*x[j];}x[k]=(A[k][n+1]-me)/A[k][k];}for(i=1;i<=n;i++){printf(" \n\nx%d=%f",i,x[i]);}message();}void exchange(int r,int k){int i;for(i=1;i<=n+1;i++)A[0][i]=A[r][i];for(i=1;i<=n+1;i++)A[r][i]=A[k][i];for(i=1;i<=n+1;i++)A[k][i]=A[0][i];}float max(int k){int i;float temp=0;for(i=k;i<=n;i++)if(fabs(A[i][k])>temp){temp=fabs(A[i][k]);flag=i;}return temp;}void message() {printf("\n\n Go on Enter ,Exit press Esc!"); switch(getch()){case Enter: main();case Esc: exit(0);default:{printf("\n\nInput error!");message();} }}【实验结果】。
高斯列主消元数值分析实验报告
数值分析实验报告之高斯列主消元法一、实验目的:清楚高斯列主元消去法与高斯主元素消去法的区别,以及它提出的必要性;掌握高斯列主元消去法的原理及推导过程,会用其解简单的线性方程组。
二、实验内容:用高斯列主元消去法解方程组⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--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 =,下一阶段的回代过程不变。
消元法解二元一次方程组
消元法解方程组的应用实例
x + y = 30
使用加减消元法解得:x = 16, y = 14
x - y = (3 - 2) times (x/3 + y/2)
因此,甲比乙多走了16 14 = 2公里。
05 消元法的优缺点
优点
简单易行
消元法是一种基础的解二元一次方程组的方 法,其步骤简单明了,易于理解和操作。
结合其他方法
对于一些特殊形式的二元一次方程组,可以考虑结合其他方法如代 入法、参数法等来求解,以提高求解效率和准确性。
THANKS FOR WATCHING
感谢您的观看
代入消元法
通过将一个方程中的一个未知数 用另一个未知数表示,代入另一 个方程中,将二元一次方程组转 化为一元一次方程。
二元一次方程组的解的性质
解的唯一性
对于给定的二元一次方程组,其解是唯一的。
解的稳定性
当方程组的系数发生变化时,解不会发生改变。
03 消元法的步骤
代入消元法
1
代入消元法是通过将一个方程中的一个未知数用 另一个方程表示,然后将其代入另一个方程中求 解的方法。
在此添加您的文本16字
y = 2x - 1
在此添加您的文本16字
将第二个方程代入第一个方程中,得到
在此添加您的文本16字
2x + 3(2x - 1) = 7
在此添加您的文本16字
解得:x = 2, y = 1
加减消元法实例
加减消元法是通过两个方程相加或相 减来消除一个未知数的方法。例如,
对于方程组
在解二元一次方程组时,可以先尝试代入消元法,如果不行再考虑加减消 元法。
04 消元法解二元一次方程组 实例
数值分析实验(Gauss消元法)
end
%这里采用增广矩阵行变换的方式求解
c=n+1;
A(:,c)=b;
%%消元过程
for k=1:n-1
A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c);
end
%%回代结果
x=zeros(length(b),1);
x(n)=A(n,c)/A(n,n);
教师签名
年月日
重庆大学
学生实验报告
实验课程名称数值计算
开课实验室DS1421
学院2009年级土木专业班11班
学生姓名周波学号********
开课时间2010至2011学年第一学期
总成绩
教师签名
课程
名称
数值计算
实验项目
名称
Gauss消元法
实验项目类型
验证
演示
综合
设计
其他
指导
教师
何光辉
成绩
√
实验目的、实验原理
通过高斯消元法的实践环节,达到加深对高斯消元法理解和培养学生程序设计能力的目的。
在Matlab命令窗口中输入Gauss得出结果如下:
>> Gauss
x=
2.0000
1.0000
-1.0000
实验中遇到的问题及解决办法
消元过程要求a(ii)≠0,(i=1,2,…,n-1),回代过程则进一步要求a(nn)≠0。
Matlab求解线性方程的几种命令如下(方程组的一般形式可用矩阵和向量表示成: ,但运用下列方法的前提必须保证所求解的方程为恰定方程,即方程组存在唯一的一组解) :
运用求逆思想 : 或 ;
实验二:列主元消元法实验报告
《数值分析》实验报告实验序号:实验二题目名称: 列主元Gauss消元法解n阶线性代数方程组学号: 姓名:任课教师: 马季骕专业班级:计算机科学与技术(非师范)1、实验目的:用列主元Gauss消元法解n阶线性代数方程组编写一个程序实现用列主元消元法实现解方程组的问题。
2、算法分析:其基本做法是把上述方程组通过列主元Gauss消元转化为一个等价的三角形方程组,然后再进行回代就可以求出方程组的解。
列主元消元的基本做法是选取系数矩阵的每一列中绝对值最大的作为主元,然后采取和顺序Gauss 消元法相同的步骤进行,求得方程组的解。
1. 列主元Gauss消元法的算法思想:1.输入系数矩阵A,右端项b,阶n。
2.对k=1,2,…,n,循环:(a)按列选主元保存主元所在行的指标。
(b)若a=0,则系数矩阵奇异,计算停止;否则,顺序进行。
(c)若=k则转向(d);否则换行(d)计算乘子(e)消元:3. 回代:用右端项b来存放解。
3、实验分析:建立两个数组a和b,通过循环语句将n阶增广矩阵输入进去,通过对列的循环对每一列进行消去未知数,通过n小步n大步把矩阵化简成上三角形矩阵,最后通过迭代法解得方程组得解。
3、函数分析:具体程序设计:for(i=1;i<=n;i++) //消元的第一重循环{p=0;q=0;for(m=i;m<n+1;m++){if(p<abs(a[m][i])) //比较选取列主元{p=abs(a[m][i]); //确定列主元q=m; //记录列主元所在的行序列号}}for(m=1;m<n+1;m++) //交换系数{a[0][0]=a[q][m]; //用a[0][0]做暂存单元a[q][m]=a[i][m];a[i][m]=a[0][0];}b[0]=b[q]; //交换常数项,用b[0]做暂存单元b[q]=b[i];b[i]=b[0];for(t=i;t<=n-1;t++) //具体的Gauss消元算法{w=a[t+1][i];for(j=i;j<=n;j++){a[t+1][j]=a[t+1][j]-a[i][j]*(w/a[i][i]);}b[t+1]=b[t+1]-b[i]*(w/a[i][i]);}k++;}for(i=n;i>=1;i--) //回代过程{for(j=1;j<=n;j++)v=a[i][j]*x[j]+v;x[i]=(b[i]-v)/a[i][i];v=0;}4、实验数据截频:5、程序说明:本程序在Dev C++ 环境中编译运行并且通过测试,也可以在VC++ 6.0环境中编译运行。
一般化的消元法
一般化的消元法消元法是解决方程组的一种常用方法,通过对方程组中的变量进行消元操作,最终得到一个只含有一个变量的方程,从而求解出该变量的值。
一般化的消元法指的是将方程组进行一般化处理,使得每个方程都包含相同的变量,并通过消元操作将方程组简化为最简形式。
一般化的消元法可以用于解决线性方程组、非线性方程组以及含有参数的方程组等多种问题。
在解决线性方程组时,一般化的消元法可以转化为高斯消元法或克拉默法则等具体的求解方法。
在解决非线性方程组时,一般化的消元法可以通过代入法、加减消元法等方式进行求解。
在使用一般化的消元法解决方程组时,首先需要将方程组中的所有方程进行一般化处理,使得每个方程都包含相同的变量。
这可以通过引入新的变量或通过变换等方式实现。
一般化处理后,可以使用消元操作将方程组简化为最简形式。
消元操作的具体方法根据方程组的形式而定。
对于线性方程组,可以使用加减消元法将方程组化为上三角形式,进而求解出各个变量的值。
对于非线性方程组,可以使用代入法将一个方程的解代入到其他方程中,从而将方程组化为更简单的形式。
对于含有参数的方程组,可以通过消元操作将参数与变量分离,进而求解出变量的取值范围。
一般化的消元法在实际问题中具有重要的应用价值。
它可以帮助我们解决各种类型的方程组,从而求解出问题的解。
例如,在物理学中,我们经常遇到需要求解多个未知量的方程组,通过使用一般化的消元法,可以简化问题的求解过程。
在工程学中,一般化的消元法可以用于求解电路中的电流和电压等问题。
在经济学中,一般化的消元法可以用于求解供需关系、成本收益等问题。
一般化的消元法是解决方程组问题的一种重要方法。
它通过对方程组进行一般化处理,并通过消元操作将方程组简化为最简形式,从而求解出方程组的解。
在实际应用中,我们可以根据具体问题的特点选择适合的消元方法,从而高效地解决问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西京学院数学软件实验任务书
《数值分析》实验报告
实验一
一、实验目的与要求
1.掌握高斯列主元消去法解线性方程组的基本思路;
2.了解一些计算机的算法,会以某种汇编语言实现算法结果(本实验主要用matlab编程)
二、实验内容
1.编写用高斯列主元消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证.
(1)
123
123
123
221
1
221
x x x
x x x
x x x
+-=
⎧
⎪
++=
⎨
⎪++=
⎩
(2)
123
123
123
21
1
21
x x x
x x x
x x x
-+=
⎧
⎪
++=
⎨
⎪+-=
⎩
2.列主元消元法及其matlab程序function [Ra,Rb,n,X]=GaussXQLineMain(A,b) %高斯列主元消元法,其中B为增广矩阵
B=[A b];
%读入b的长度
n=length(b);
%读出矩阵a,b秩
Ra=rank(A);
Rb=rank(B);
if (Rb-Ra)>0
disp('因为Ra不等于Rb,所以此方程组无解.') return
end
if Ra==Rb
if Ra==n
disp('因为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:n
m= B(k,p)/ B(p,p);
B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end
end
b=B(1:n,n+1);A=B(1:n,1:n);
X(n)=b(n)/A(n,n);
for q=n-1:-1:1
X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);
end
else
disp('因为Ra=Rb<n,所以此方程组有无穷多解.') end
end
%调用格式
% clear;
% A=[1 2 3;4 5 6;7 8 9 ];
% b=[21;22;23];
% [Ra,Rb,n,X] =GaussXQLineMain(A,b)三、实验过程
方程组(1)过程
>> clear;
A=[1 2 -2;1 1 1;2 2 1 ];
b=[1;1;1];
[Ra,Rb,n,X] =GaussXQLineMain(A,b) 因为Ra=Rb=n,所以此方程组有唯一解.
Ra =
3
Rb =
3
n =
3
X =
-3.0000
3.0000
1.0000
方程组(2)过程
clear;
A=[2 -1 1;1 1 1;1 1 -2 ];
b=[1;1;1];
[Ra,Rb,n,X] =GaussXQLineMain(A,b)
因为Ra=Rb=n,所以此方程组有唯一解.
Ra =
3
Rb =
3
n =
3
X =
0.6666
0.3333
在MATLAB中利用逆矩阵法检验结果:
(1) 在command windows中直接运行命令:
A=[1 2 -2;1 1 1;2 2 1 ];
b=[1;1;1];
X=A\b
结果
X =
-3.0000
3.0000
1.0000
(2) 在command windows中直接运行命令:
A=[2 -1 1;-1 1 1;1 1 -2 ];
b=[1;1;1];
X=A\b
结果
X =
0.6666
0.3333
四、实验总结
通过本次实验再次熟悉了高斯列主元消元法的思想,加深了对matlab语言的理解,简洁明了,在实验过程中函数编写实现不了,最后参考matlab算法通过实验,学会了matlab函数的调用使得matlab编写的函数通用实用。