利用高斯列主元消去法求如下线性方程组的解
用列主元高斯消元法求线性代数方程组的解
课程设计任务书前 言回顾普通解方程组的方法,一般都是先逐个削去未知变量,最终得到只有一个未知变量的方程,解之,把得到的值回代到消去变量过程中得到的方程组,逐个求出未知变量。
这种解线性方程组的基本方法就是这里要介绍的高斯消去法。
数学上,高斯消元法(或译:高斯消去法),是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。
当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。
高斯消元法可以用在电脑中来解决数千条等式及未知数。
高斯消元法可以用来找出一个可逆矩阵的逆矩阵。
用关联矩阵表述网络拓扑结构,并根据厂站拓扑结构和网络拓扑结构等概念简化了电力系统的拓扑结构。
根据广义乘法和广义加法的运算规则,将改进的高斯消元算法应用于电力系统拓扑结构分析中,并引入稀疏、分块处理等技术提高了上述拓扑分析的效率。
采用上述高斯消元算法对山东电网220kV 以上的变电站进行拓扑结构分析,结果表明了运用该高斯消元法进行网络拓扑分析的正确性和有效性。
用列主元素法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
然后换行使之变到主元位子上,在进行消元计算。
设)()(k k b X A ,确定第k 列主元所在位置k i ,在交换k i 行和k 行后,在进行消元,并用MATLAB 软件进行求解。
目录摘要....................................................................................... 错误!未定义书签。
第1章绪论 ......................................................................... 错误!未定义书签。
第2章高斯消元法的算法描述 (2)2.1高斯消元法的原理概述 (2)c231730658" 2.1.1高斯消元法的消元过程 (2)c231730658" 2.1.2高斯消元法的回带过程 (3)c231730658" 2.1.3高斯消元法的复杂度分析 (4)c231730658" 2.2列主高斯消元法原理简介 (5)c231730658" 2.2.1列主高斯消元法的消元过程 (6)c231730658" 2.2.2列主高斯消元法的回带过程 (6)c231730658" 2.2.3列主高斯消元法的算法描述 (6)c231730662"第3章高斯消元法的物理应用 (9)3.1c231730663"电网模型的描述 (9)c231730658" 3.2电网模型的问题分析 (9)c231730658"3.3求解计算 (11)c231730693"参考文献 (13)摘 要用列主元素高斯消去法法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
解线性方程组的列主元素高斯消去法和lu分解法
数值试验报告分析一、实验名称:解线性方程组的列主元素高斯消去法和LU 分解法二、实验目的及要求:通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
三、算法描述:本次试验采用的是高斯列主元消去法和LU 分解法求解线性方程组的解。
其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到底的条件:当A 可逆时,列主元Gauss(高斯)消去法一定能进行到底。
优点:具有很好的数值稳定性;具有与顺序Gauss 消去法相同的计算量。
列主元Gauss(高斯)消去法的精度显著高于顺序Gauss(高斯)消去法。
注意:省去换列的步骤,每次仅选一列中最大的元。
矩阵的三角分解法是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 分解求解方程组: AX=b LUX=b LY=bA=LU UX=Y ;四、实验内容:解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x a 、用你熟悉的算法语言编写程序用列主元高斯消去法和LU 分解求解上述两个方程组,输出Ax=b 中矩阵A 及向量b, A=LU 分解的L 及U ,detA 及解向量x.b 、将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x及detA,并与(1)中结果比较。
用高斯消元法求解线性代数方程组
用高斯消元法求解线性代数方程组12341115-413-2823113-21041513-21719x x x x ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ 1111X *⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(X*是方程组的精确解)1 高斯消去法1.1 基本思想及计算过程高斯(Gauss )消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解。
为便于叙述,先以一个三阶线性方程组为例来说明高斯消去法的基本思想。
⎪⎩⎪⎨⎧=++II =++I =++III)(323034)(5253)(6432321321321x x x x x x x x x 把方程(I )乘(23-)后加到方程(II )上去,把方程(I )乘(24-)后加到方程(III )上去,即可消去方程(II )、(III )中的x 1,得同解方程组⎪⎩⎪⎨⎧=+-II -=-I =++III)(20223)(445.0)(64323232321x x x x x x x将方程(II )乘(5.03)后加于方程(III ),得同解方程组: ⎪⎩⎪⎨⎧-=-II -=-I =++III)(42)(445.0)(6432332321x x x x x x由回代公式(3.5)得x 3 = 2,x 2 = 8,x 1 = -13。
下面考察一般形式的线性方程组的解法,为叙述问题方便,将b i 写成a i , n +1,i = 1, 2,…,n 。
⎪⎪⎩⎪⎪⎨⎧=++++=++++=+++++++1,3322111,223232221211,11313212111n n n nn n n n n n n n n n a x a x a x a x a a x a x a x a x a a x a x a x a x a(1-1)如果a 11 ≠ 0,将第一个方程中x 1的系数化为1,得)1(1,1)1(12)1(121+=+++n n n a x a x a x其中)0(11)0()1(1aa aijj=, j = 1, …, n + 1(记ij ij a a =)0(,i = 1, 2, …, n ; j = 1, 2, …, n + 1)从其它n –1个方程中消x 1,使它变成如下形式⎪⎪⎩⎪⎪⎨⎧=++=++=++++++)1(1,)1(2)1(2)1(1,2)1(22)1(22)1(1,1)1(12)1(121n n n nn n n n n n n n a x a x a a x a x a a x a x a x(1-2)其中n i a m a aij i ij ij ,,2)1(1)1( =⋅-=,1,,3,211)1(11+==n j a a m i i由方程(1-1)到(1-2)的过程中,元素11a 起着重要的作用,特别地,把11a 称为主元素。
高斯消元法与线性方程组的解法知识点总结
高斯消元法与线性方程组的解法知识点总结在数学中,线性方程组是一个常见的问题。
解决线性方程组的一个重要方法是高斯消元法。
本文将对高斯消元法及其相关知识点进行总结。
一、高斯消元法概述高斯消元法是一种通过进行行变换将线性方程组转化为简化行阶梯形矩阵,从而求解方程组的方法。
它通过不断的行变换,将系数矩阵化为单位矩阵,从而得到方程组的解。
二、高斯消元法的步骤1. 构造增广矩阵:将线性方程组中的系数矩阵和常数矩阵合并,形成增广矩阵。
2. 主元选择:选取增广矩阵中的第一个非零元作为主元,将主元所在列的其他元素进行行变换,使其化为零。
3. 交换行:如果主元所在行的系数为零,则可以进行行交换,将非零行移到主元所在行。
4. 迭代计算:从第二行开始,重复进行主元选择和行变换,使整个增广矩阵形成简化行阶梯形矩阵。
5. 回代求解:根据形成的简化行阶梯形矩阵,反向求解线性方程组,得到方程组的解。
三、高斯消元法的优缺点1. 优点:a. 算法简单,易于实现。
b. 可以准确求解线性方程组的解。
c. 可以判断线性方程组的解的个数和解的形式。
2. 缺点:a. 当方程组的系数矩阵存在大量零元或接近零元时,可能会产生较大的舍入误差。
b. 在某些情况下,方程组的解可能无法唯一确定,或者无解。
四、高斯消元法的应用高斯消元法在科学与工程领域有着广泛的应用,特别是在线性代数、计算机图形学、金融数学等领域。
它可以用于求解线性方程组的解,计算矩阵的逆、行列式等。
五、高斯消元法的拓展1. 高斯-约旦消元法:在高斯消元法的基础上,通过对主元所在列的其他元素进行行变换,将主元化为1,从而形成行简化阶梯形矩阵。
2. 列主元高斯消元法:在主元选择时,选取主元所在列中绝对值最大的元素作为主元,从而减小舍入误差的影响。
3. 高斯消元法的数值稳定性:在进行高斯消元法计算时,需要注意舍入误差的积累,通过一些数值稳定的改进方法,可以提高计算的精度。
六、总结高斯消元法是解决线性方程组的一种常用方法,通过不断的行变换,将系数矩阵化为简化行阶梯形矩阵,从而求解方程组的解。
高斯列主元消去法例题
高斯列主元消去法例题高斯列主元消去法是解线性方程组的一种方法,也称为高斯-约旦(Gauss-Jordan)消去法。
它的基本思想是通过矩阵的初等行变换,将矩阵化为简化行阶梯形矩阵,然后根据系数矩阵的行列式是否等于0来求得唯一或无穷多解。
下面以一个例题来讲解高斯列主元消去法的步骤。
例题:解下列线性方程组x1 + 2x2 + 3x3 = 94x1 + 5x2 + 6x3 = 247x1 + 8x2 + 10x3 =40首先,将方程组表示为增广矩阵的形式:1 2 3 | 94 5 6 | 247 8 10| 40接下来,要使用高斯列主元消去法,将增广矩阵化为简化行阶梯形矩阵。
具体步骤如下:1.将第一列中的绝对值最大的元素移到第一行。
7 8 10| 404 5 6 | 241 2 3 | 92.用第一行的首元素消元。
7 8 10| 400 1 -2| 60 -6 -21| -273.将第二列中的绝对值最大的元素移到第二行。
7 8 10| 400 -6 -21| -270 1 -2| 64.用第二行的次元素消元。
7 8 10| 400 1 -2| 60 0 -9| 95.将第三列中的绝对值最大的元素移到第三行。
7 8 10| 400 1 -2| 60 0 -9| 96.用第三行的末元素消元。
7 8 10| 400 1 -2| 60 0 1 | -1现在,我们得到了一个简化行阶梯形矩阵,可以根据系数矩阵的行列式是否等于0来求得唯一或无穷多解。
我们发现,最后一行只有一个非零元素,因此,对应的未知数x3的系数不为0,可以直接利用倒推法求得方程组的解。
7.用第二行解出x2x2 - 2x3 = 6x2 = 2x3 + 68.用第一行解出x1x1 + 8x2 + 10x3 = 40x1 + 8(2x3 + 6) + 10x3 = 40x1 + 26x3 = 8综上所述,该线性方程组的解为:x1 = -26t + 8x2 = 2t + 6x3 = t其中,t为任意常数。
(最新)用高斯消元法解一元线性方程组
(最新)用高斯消元法解一元线性方程组简介本文将介绍如何使用高斯消元法来解一元线性方程组。
高斯消元法是一种常见的线性方程组求解方法,通过消元和回代的过程,将线性方程组转化为上三角形矩阵,从而得到方程组的解。
步骤1. 将线性方程组写成增广矩阵的形式,其中每一行表示一个方程,每一列表示一个未知数和等号。
2. 选取第一个未知数系数不为零的行,将该行称为主元素所在的行。
3. 将第一个未知数系数不为零的行的首个系数乘以一个适当的常数,使其等于1。
4. 对于主元素所在行以下的每一行,计算一个常数将其首个系数消为零。
5. 上述步骤完成后,得到上三角形矩阵。
6. 从最后一行开始,代入已求得的未知数值,通过回代的方式依次求解其他未知数。
示例假设我们有以下一元线性方程组:2x + y = 5x - 3y = -7按照上述步骤进行计算,首先将线性方程组转化为增广矩阵的形式:[ 2 1 | 5 ][ 1 -3 | -7 ]选取第一个未知数系数不为零的行作为主元素所在的行,即第一行。
将第一行的首个系数乘以适当的常数,使其等于1:[ 1 0.5 | 2.5 ][ 1 -3 | -7 ]接下来,将主元素所在行以下的每一行,通过计算一个常数将其首个系数消为零:[ 1 0.5 | 2.5 ][ 0 -3.5 | -9 ]上述步骤完成后,得到上三角形矩阵。
然后,通过回代的方式求解未知数的值。
首先,代入最后一行的解,计算出最后一个未知数的值:x = -9 / -3.5 = 2.571然后,代入第一行的解,计算出第一个未知数的值:2x + y = 52 * 2.571 + y = 5y = 5 - 2 * 2.571 = -0.142因此,方程组的解为 `x = 2.571` 和 `y = -0.142`。
结论通过高斯消元法,我们可以解一元线性方程组。
这种方法简单有效,适用于各种线性方程组求解问题。
在实际应用中,可以使用计算机程序来实现高斯消元法,提高计算效率和准确性。
高斯列主元消元法解方程组
A(a,c)=1/(a+c-1);
end
end
b=[1:n]';
x=gauss(A,b);
fprintf('%12.8f ',x)
实验结果为:
-216.000000047350.00000120-57120.00000827
166320.00002178 -201600.00002425 85932.00000962
3、当n为50时,在command窗口输入如下代码:
format long
n=50;
for a=1:n;
for c=1:n;
A(a,c)=1/(a+c-1);
end
end
b=[1:n]';
x=gauss(A,b);
fprintf('%12.8f ',x)
实验结果为:
23964.74834020-4122991.37806186176597502.11690632-3260288682.1972771031898227709.80876200-181566275672.69705000 619956768219.91504000-1230092760464.934800001193508577123.06670000 -71714652666.11485300-587044042244.59863000-454093769462.97290000 1744941129911.71780000-2715153157131.341300002706193814657.00730000 758555481068.28345000-2729174782832.09330000-650678553386.91565000 770544482197.08948000661071297466.389400003114329102228.31640000 -2419453655729.64110000-2498342518894.922900001991167370388.64180000 806469536595.88586000-3357159715176.254400003434745294165.19480000 -1115456797533.65920000835226816241.179930001614362560020.15380000 -2300534244207.34180000781205861296.42358000-3724002810480.48780000 -101978267755.295900003815588397071.54350000-269576755745.41956000 -2354847317920.947800005144417865217.228500001355869718979.75980000 1213622862842.97950000-11349162850658.63300000367430197567.42474000 2362009479539.30520000712955508308.938350005794833430082.82320000 -2649289143449.391600002040834706833.95900000-2941986228491.25980000 -2402163300368.774400002234821162570.22750000
高斯列主元消元法解线性方程组
高斯列主元消元法解线性方程组一、题目:用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 行元互换。
高斯列主元消去法解线性方程组的实现
高斯列主元消去法解线性方程组的实现班级学号姓名榴莲一、实验任务采用高斯列主元消去法求解线性方程组,以下消解方程为例。
1 2 1 x1 02 2 2 x2 = 3-1 -3 0 x3 2二、编程环境Windows7,Codeblock.三、算法步骤Gauss 消去法的基本思想是,通过将一个方程乘或除某个数以及两个方程相加减这两种运算手续,逐步减少方程组中变元的数目,最终使某个方程只含有一个变元,从而得出所求的解。
对于,G auss消去法的求解思路为:(1)若,先让第一个方程组保持不变,利用它消去其余方程组中的,使之变成一个关于变元的n-1阶方程组。
(2)按照(1)中的思路继续运算得到更为低阶的方程组。
(3)经过n-1步的消元后,得到一个三角方程。
(4)利用求解公式回代得到线性方程组的解。
四、程序流程图数据结构:i,j 变量double a[10][10] a 矩阵double b[10] b 矩阵double x[10] 求解的x矩阵n 矩阵的维度五、程序#include<stdio.h>#include<math.h>void guess(double a[][10],double b[],double x[],int n) { int k,i,j;for(k=0; k<n-1; k++){ double ma =a[k][k]; int tab = k;for(i=k+1; i<n; i++) {if(fabs(ma)<fabs(a[i][k])){ ma = a[i][k];tab = i;}}double mid; mid= b[k]; b[k] =b[tab]; b[tab] =mid; for(i=k; i<n;i++) {mid = a[k][i];a[k][i] = a[tab][i];a[tab][i] = mid;}for(i=k+1; i<n; i++) { b[i]=b[i]-a[i][k]/a[k][k]* b[k];for(j=k+1; j<n; j++) {a[i][j]=a[i][j]-a[i][k]/a[k][k]*a[k][j];}a[i][k]=0;}}for(k=n-1; k>=0; k--){ double s =0;for(j=k+1; j<n; j++) s += a[k][j]*x[j];x[k]=(b[k]-s)/a[k][k];}}int main(){ int i,j;double a[10][10] = {{1,2,1},{2,2,3},{-1,-3,0}};double b[10] = {0,3,2};double x[10];int k,n=3;guess(a,b,x,n);printf("三角化矩阵A:\n");for(i=0; i<n; i++) {for(j=0; j<n; j++){ printf("%7.2lf",a[i][j]);}printf("\n");}printf("\n 方程数值 b:\n");for(i=0; i<n; i++) printf("%7.2lf",b[i]);printf("\n");printf("\n 求得的函数值 x:\n");for(i=0; i<n; i++) printf("%7.2lf",x[i]);printf("\n");}六、实验结果及分析高斯消去法由消元和回代两个过程组成。
(完整版)2.3高斯列主元消去法
2.3高斯列主元消去法解线性方程组一:问题的提出我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。
就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。
实际运算的时候因为只能有限小数去计算,因此只能得到近似值。
在实际运算的时候,我们很多时候也常用高斯消去法。
但是高斯消去法在计算机中运算的时候常会碰到两个问题。
1.一旦遇到某个主元等于0,消元过程便无法进行下去。
2.在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值很小时,求解出的结果与真实结果相差甚远。
为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。
其中又可以分为列选主元和全面选主元两种方法。
目前计算机上常用的按列选主元的方法。
因此我在这里做的也是列选主元高斯消去法。
二、算法的基本思想大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。
我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。
然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们可以很方便地求出方程组的解。
高斯消元法的目的就是把一般线性方程组简化成上三角方程组。
于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。
三、算法的描述1、设有n 元线性方程组如下:1111n n nn a a a a ⎛⎫ ⎪ ⎪ ⎪⎝⎭K M OM L1n x x ⎛⎫ ⎪ ⎪ ⎪⎝⎭M =1n b b ⎛⎫ ⎪ ⎪ ⎪⎝⎭M 2、 第一步:如果a 11!=0, 令l i1= ai1/a11, I= 2,3,……,n用(-li1)乘第一个方程加到第i 个方程上,得同解方程组:a (1)11 a (1)12 . . . a (1)1nx 1 b (1)1a (1)21 a (1)22 . . . a (1)2n x 2b (1)2. . . . . . . = .a (1)n-11 a (1)n-12 . . a (1)n-1n x n-1b (1)n-1a (1)n1 a (1)n2 . . . a (1)nn x nb (1)n简记为:A (2) x = b (2)其中a (2)ij = a (1)ij – l i1 * a (1)1j , I ,j = 2,3,..,nb(2)I = b(1)I– l i1 * b(1)1 , I = 2,3,...,n第二步:如果a(2)22 != 0,令l i2= a(2)i2/a(2)22, I= 3,……,n依据同样的原理,对矩阵进行化间(省略),依次下去,直到完成!最后,得到上三角方程组:a(1)11a(1)12 . . . a(1)1n x1b(1)10 a(1)22 . . . a(1)2n x2b(1)2. . . . . . . = .0 0 . . a(n-1)n-1n x n-1b(n-1)n-10 0 . . . a(n)nn x n b(n)n简记为:A(n) x = b(n)最后从方程组的最后一个方程进行回代求解为:X n = b(n) / a(n)nnX i = ( b(k)k - a(k)kj x j ) / a(k)kk以上为高斯消去法的基本过程。
计算方法实验报告_列主元高斯消去法
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++) {
高斯列主元消去法解线性方程组
高斯列主元消去法解线性方程组c语言编写的源程序:#include <stdio.h>#include<math.h>int n;float a[100][100],b[100];void output (){int i,j;printf("the array a,b is\n");for (i=0;i<n;i++){ for (j=0;j<n;j++)printf("%-10f",a[i][j]);printf("%-10f",b[i]);printf("\n");}}void input(){int i,j;printf("input sting a ");scanf("%d",&n);printf("input array a:\n");for(i=0;i<n;i++)for(j=0;j<n;j++){scanf("%f",&a[i][j]);}printf("input array b:\n");for(i=0;i<n;i++)scanf("%f",&b[i]);}void gaosi (){ int k,i,j,max;float ta,tb,m;for(k=0;k<n;k++){max=k;for(i=k+1;i<n;i++){if(fabs(a[i][k])>fabs(a[max][k]))max=i;}if(i!=k){for(j=0;j<n;j++){ta=a[k][j];a[k][j]=a[max][j];a[max][j]=ta;}tb=b[k];b[k]=b[max];b[max]=tb; }output();for(i=k+1;i<n;i++){m=a[i][k]/a[k][k];for(j=k;j<n;j++)a[i][j]=a[i][j]-a[k][j]*m;b[i]=b[i]-m*b[k];output();}}}void qiujie (){ int i,j;float sum;b[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){sum=0;for(j=i+1;j<n;j++)sum=sum+a[i][j]*b[j];b[i]=(b[i]-sum)/a[i][i];}printf("the result is:\n");for(i=0;i<n;i++)printf("x%d=%f\n",i+1,b[i]);}void main(){ input();gaosi();qiujie();}以下是运行结果:输出矩阵的大致变化过程input sting a 4input array a:1.003 0.333 1.504 -0.333-2.011 1.455 0.506 2.9564.329 -1.952 0.006 2.0875.113 -4.004 3.332 -1.112input array b:3.005 5.407 0.136 3.772the result is:x1=-0.325438x2=0.327990x3=2.372718x4=1.040163计算如下方程组:1.003 x1+ 0.333x2+ 1.504x3 -0.333x4=3.005 -2.011x1 + 1.455 x2+ 0.506x3 + 2.956x4=5.4074.329 x1 -1.952x2+ 0.006 x3+ 2.087x4=0.1365.113 x1-4.004x2 + 3.332x3 -1.112x4= 3.772。
高斯列主元消去法
问题提出:采用高斯列主元消去法解线性方程组。
算法(公式)推导:高斯顺序消去法有一个最大的缺点就是一旦对角元素为0,就进行不下去了,为了解决这个问题就有了高斯主元消去法。
如果在高斯顺序消去法消去过程进行到第i 步时,先选取a ri ()n r i ≤≤中(即第i 列)绝对值最大的元素,设为第j 行的元素aji ,然后将第i+1行至第n 行中的每一行减去第i 行乘以ii kj a a (k 代表行号),依次进行消元,这样得到的算法叫高斯按列主元消去法。
高斯按列主元消去法的算法步骤介绍如下:1. 将方程组写成以下的增广矩阵的形式: 432144434241343332312423222114131211b b b b a a a a a a a a a a a a a a a a 2. 对k=1,2,3,…..,n-1,令∑==nk s sk pk a a max ,交换增广矩阵的第k 行与第p 行;对j=k+1,K+2,……..,n,计算*km jkjm jm kk a a a a a =-(m=k,k+1,....n)kk jk k j j a a b b b *-=算法结束。
3. 在MATLABE 中编程实现的高斯按列主元消去法函数为:GaussXQLineMain功能:高斯按列主元消去法求线性方程组Ax=b 的解调用格式:[x,XA]=GaussXQLineMain(A,b)其中,A :线性方程组的系数矩阵;B:线性方程组中的常数向量;x:线性方程组的解:XA:消元后的系数矩阵(可选的输出参数)。
高斯列主元消去法用MATLAB实现如下所示:4.其中用到上三角矩阵求解函数:在MATLABE中编程实现的上三角系数矩阵求解函数为:SolveUPTriangle 功能:求上三角系数矩阵的线性方程组Ax=b的解调用格式:x=SolveUpTriangel(A,b)其中,A :线性方程组的系数矩阵;b :线性方程组中的常数向量; X :线性方程组的解;上三角系数矩阵求解函数用MATLAB 实现如下所示:高斯按列主元消去法解线性方程组应用实例:用高斯按列主元消去法求解下列线性方程组的解。
用Gauss列主元消去法求解方程组
\\本程序适用于n个方程,n个未知数的线性代数方程组# include "stdio.h"# include"math.h"# define eps 1e-8# define n 2\\以上为定义部分main(){int t,i,j,k;double T,m[3][3],x[3];double A[3][3]={{2,2,3},{4,7,7},{-2,4,5}};double b[3]={3,1,-7};\\以上为输入部分for(k=0;k<n;k++){t=k;for(i=k+1;i<=n;i++){if(fabs(A[t][k])<fabs(A[i][k]))t=i;}\\寻找第k列的主元素(绝对值最大的数)for(j=k;j<=n;j++){T=A[t][j];A[t][j]=A[k][j];A[k][j]=T;}T=b[k];b[k]=b[t];b[t]=T;\\把主元素及其所在的行与第k行交换if(fabs(A[k][k])<=eps){printf("fail!");exit();}\\判断系数矩阵的行列式的值是否为0,确定是否有唯一解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];A[i][k]=0.000000;}\\消元,把第k列对角线以下的系数通过矩阵变换化为0 for(i=0;i<=n;i++){for(j=0;j<=n;j++)printf("%f\t",A[i][j]);printf("%f\n",b[i]);}printf("\n");}\\输出消元后的系数矩阵和右端项\\上述过程为消元过程,以下为回代过程if(fabs(A[n][n])<=eps){printf("A[%d][%d]=0,fail!",n,n);exit(); }\\判断是否有唯一解elsex[n]=b[n]/A[n][n];\\最后一行求解xnfor(i=n-1;i>=0;i--){for(j=i+1;j<=n;j++){ b[i]=b[i]-A[i][j]*x[j];}x[i]=b[i]/A[i][i];}\\从n-1行依次求解x(n-1) (x1)printf("Result is:\n");for(i=0;i<=n;i++)printf("X%d=%f\t",i,x[i]);}\\输出结果。
数值分析整理版试题及答案
例1、已知函数表求的解:(1)故所求二次拉格朗日插值多项式为(2)一阶均差、二阶均差分别为例2、设,,试求在[0,1]上关于,的最佳平方逼近多项式。
解:若,则,,且,这样,有所以,法方程为,经过消元得再回代解该方程,得到,故,所求最佳平方逼近多项式为例3、设,,试求在[0, 1]上关于,的最佳平方逼近多项式。
解:若,则,,这样,有所以,法方程为解法方程,得到,,故,所求最佳平方逼近多项式为例4、用的复合梯形和复合辛普森公式计算积分。
解:(1)用的复合梯形公式由于,,,所以,有(2)用的复合辛普森公式由于,,,,所以,有例5、用列主元消去法求解下列线性方程组的解。
解:先消元再回代,得到,,所以,线性方程组的解为,,例6、用直接三角分解法求下列线性方程组的解。
解:设则由的对应元素相等,有,,,,,,,,因此,解,即,得,,解,即,得,,所以,线性方程组的解为,,1、若是阶非奇异阵,则必存在单位下三角阵和上三角阵,使唯一成立。
()2、当时,Newton-cotes型求积公式会产生数值不稳定性。
()3、形如的高斯(Gauss)型求积公式具有最高代数精确度的次数为。
()4、矩阵的2-范数=9。
()5、设,则对任意实数,方程组都是病态的。
(用)()6、设,,且有(单位阵),则有。
()7、区间上关于权函数的直交多项式是存在的,且唯一。
()1、(Ⅹ) 2、(∨)3、(Ⅹ) 4、(∨)5、( Ⅹ)6、(∨)7、(Ⅹ) 8、( Ⅹ)一、判断题(10×1′)1、若A是n阶非奇异矩阵,则线性方程组AX=b一定可以使用高斯消元法求解。
( ×)2、解非线性方程f(x)=0的牛顿迭代法在单根x*附近是平方收敛的。
( √)3、若A为n阶方阵,且其元素满足不等式则解线性方程组AX=b的高斯-—塞德尔迭代法一定收敛。
(×) 4、样条插值一种分段插值。
(√)5、如果插值结点相同,在满足相同插值条件下所有的插值多项式是等价的。
用部分选主元的高斯消去法并行求解线性方程组
用部分选主元的高斯消去法并行求解线性方程组作者:田希山来源:《电脑知识与技术》2011年第16期摘要:高斯消去法,又称高斯消元法,实际上就是我们俗称的加减消元法。
数学上,高斯消去法或称高斯-约当消去法,由高斯和约当得名(很多人将高斯消去作为完整的高斯-约当消去的前半部分),它是线性代数中的一个算法,用于决定线性方程组的解,决定矩阵的秩,以及决定可逆方矩阵的逆。
当用于一个矩阵时,高斯消去产生“行消去梯形形式”。
用高斯消去法求解线性方程组的解是一种比较常见的解线性方程组的方法,这种方法尤其在利用计算机求解线性方程组时是更是常用。
但大多数情况下都是用串行的算法来解方程组,该文介绍了利用高斯消去法并行求解线性方程组的方法。
关键词:高斯消去法;线性方程组;并行中图分类号:TP301文献标识码:A文章编号:1009-3044(2011)16-3960-041 高斯消去法在求解线性方程组的算法中,有两类最基本的算法:直接法和迭代法。
在直接方法中最主要的就是高斯消去法,它可以分为消元和回代两个过程,消元过程是将方程组转换为一个等价的三角方程组,而回代过程则是逆反求解这个三角方程组[1-2]。
2 部分选主元的高斯消去思想前述的消去过程中,未知量是按其出现于方程组中的自然顺序消去的,所以又叫顺序消去法。
实际上已经发现顺序消去法有很大的缺点。
设用作除数的为主元素,首先,消元过程中可能出现为零的情况,此时消元过程亦无法进行下去;其次如果主元素很小,由于舍入误差和有效位数消失等因素,其本身常常有较大的相对误差,用其作除数,会导致其它元素数量级的严重增长和舍入误差的扩散,使得所求的解误差过大,以致失真。
我们来看一个例子:例它的精确解为:用顺序消去法,第一步以0.0001为主元,从第二个方程中消x1后可得:-10000x2= -10000 x2=1.00回代可得x1 = 0.00显然,这不是解。
造成这个现象的原因是:第一步主元素太小,使得消元后所得的三角形方程组很不准确所致。
高斯列主元消去法解线性方程组--课程设计报告
北京化工大学北方学院课程设计报告课程名称课程设计设计题目线性方程组求解专业、班级计科0701 学号 070202021 姓名张海艳指导教师刘佩贤设计时间 2010.9.1——2010.9.30 2010年 9 月 30 日一、引言1.1编写目的测试分析报告是把测试的结果写成文档,并对测试结果进行分析,为纠正软件的缺陷提供依据,也为软件验收和交付打下基础。
是软件开发的另一里程碑。
及时记录测试阶段的工作过程和工作成果,如实反映测试过程中所解决的各种问题,把集成测试和确认测试的结果以文件形式加以记载,使开发者能在第一时间对遇到的问题做迅速反应。
1.2 背景软件名称:线性方程组求解具体要求:输入是N(N<256)元线性方程组Ax=B,输出是方程组的解,也可能无解或有多组解。
1.3算法说明首先将线性方程组做成增广矩阵,对增广矩阵进行行变换。
对元素aii,在第i列中,第i行及以下的元素选取绝对值最大的元素,将该元素最大的行与第i行交换,然后采用高斯消元法将新得到的aii消去第i行以下的元素。
一次进行直到ann。
从而得到上三角矩阵。
再对得到的上三角矩阵进行回代操作,即可以得到方程组的解。
二、正文(1)设计部分该软件用于求解线性方程组的解。
执行过程:(1)首先执行main()(主函数),输入待求解方程组的增广矩阵的行数,接着输入增广矩阵。
i. 调用uptrbk(double *A,int N)(上三角变换函数),在此函数中又调用了两个函数:FindMax(int p,int N,double *A)和ExchangeRow(int p,int j,double *A,int N)。
ii. FindMax()函数用于找出列向量中绝对值最大项的标号,ExchangeRow()用于交换两行。
iii. uptrbk()函数将矩阵行数N、增广矩阵指针A、行号p传给FindMax()函数,找出绝对值最大项的标号;iiii. 接着将绝对值最大项的标号传给ExchangeRow()函数,最终将绝对值最大的那行换到第一行。
高斯消元法解线性方程组
高斯消元法解线性方程组在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。
那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。
一、线性方程组设含有n 个未知量、有m 个方程式组成的方程组a x a x a xb a x a x a x b a x a x a x b n n n n m m mn n m11112211211222221122+++=+++=+++=⎧⎨⎪⎪⎩⎪⎪ (3.1) 其中系数a ij ,常数b j 都是已知数,x i 是未知量(也称为未知数)。
当右端常数项b 1,b 2, …, b m 不全为0时,称方程组(3.1)为非齐次线性方程组;当b 1=b 2= … =b m = 0时,即a x a x a x a x a x a x a x a x a x n n n n m m mn n 111122121122221122000+++=+++=+++=⎧⎨⎪⎪⎩⎪⎪ (3.2) 称为齐次线性方程组。
由n 个数k 1, k 2, …, k n 组成的一个有序数组(k 1, k 2, …, k n ),如果将它们依次代入方程组(3.1)中的x 1, x 2, …, x n 后,(3.1)中的每个方程都变成恒等式,则称这个有序数组(k 1, k 2, …, k n )为方程组(3.1)的一个解。
显然由x 1=0, x 2=0, …, x n =0组成的有序数组(0, 0, …, 0)是齐次线性方程组(3.2)的一个解,称之为齐次线性方程组(3.2)的零解,而当齐次线性方程组的未知量取值不全为零时,称之为非零解。
(利用矩阵来讨论线性方程组的解的情况或求线性方程组的解是很方便的。
因此,我们先给出线性方程组的矩阵表示形式。
)非齐次线性方程组(3.1)的矩阵表示形式为:AX = B其中A = ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡mn m m n n a a a a a a a a a 212222111211,X = ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡n x x x 21,B = ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡n b b b 21 称A 为方程组(3.1)的系数矩阵,X 为未知矩阵,B 为常数矩阵。
用高斯消元法求解线性方程组
⽤⾼斯消元法求解线性⽅程组线性⽅程组问题可以利⽤矩阵变换求解。
利⽤⾼斯消元法,将矩阵转换成⼀个⾏阶梯矩阵,最后得到⼀个简化⾏阶梯矩阵,就是⽅程的解。
参考资料()Java代码public class FunctionResolver {public static class LinearEquationGroup {/**代表线性⽅程组的矩阵。
⽅程组已经经过归⼀化处理,带未知变量的部分全部位于“=”左边,常数合并后位于“=”右边。
⽐如:2a + b - c = 8-3a - b + 2c = -11-2a + b + 2c = -3对应的矩阵为:2 1 -1 8-3 -1 2 -11-2 1 2 -3*/private BigDecimal[][] matrix;//未知变量的名称,排列顺序和矩阵⼀致,⽐如上⾯的例⼦中,对应的变量名列表就是a, b, cprivate List<String> variantes;public LinearEquationGroup() {}public LinearEquationGroup(BigDecimal[][] matrix) {this.matrix = matrix;check();}private void check() {for (int i = 0; i < matrix.length; i++) {if (matrix.length != (matrix[i].length - 1)) {throw new IllegalArgumentException("输⼊矩阵有误! 必须为n*(n+1)矩阵");}}}public Map<String, BigDecimal> solve() {check();sortRows();eliminateVarianteDownwards();normalize();eliminateVarianteUpwards();Map<String, BigDecimal> ret = new HashMap<>();int i = 0;int lastCol = variantes.size();for (String var : variantes) {ret.put(var, matrix[i++][lastCol]);}return ret;}/*** 重排序⾏, 以便做⾼斯消元. 保证第i⾏的第i列元素不为0*/void sortRows() {int row = 0;int below = 0;int col = 0;for (; row < matrix.length - 1; ++row) {col = row;if (matrix[row][col].compareTo(BigDecimal.ZERO) == 0) {for (below = row + 1; below < matrix.length; below++) {if (matrix[below][col].compareTo(BigDecimal.ZERO) != 0) {BigDecimal[] temp = matrix[row];matrix[row] = matrix[below];matrix[below] = temp;break;}}if (below >= matrix.length) {throw new IllegalArgumentException("⽅程组⽆解或者⽆唯⼀解!");}}}}/*** 从上往下消元。
高斯消元法解线性方程组
高斯消元法解线性方程组在工程技和工程管理中有多常可以性方程型的数学模型,些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。
那么的性方程是否有解呢如果有解,解是否唯一假设解不唯一,解的构如何呢就是下面要的。
一、性方程含有n个未知量、有m个方程式成的方程a11x1a12x2a1n x n b1a 21x1a22x2a2n x n b2〔〕a m1x1a m2x2amn x n b m其中系数a ij,常数b j都是数,x i是未知量〔也称未知数〕。
当右端常数b1, b2,⋯,b m不全0,称方程〔〕非次性方程;当b1=b2=⋯=b m=0,即a 11x1a12x2a1n x n0a 21x1a22x2a2n x n0〔〕a m1x1am2x2amn x n0称次性方程。
由n个数k1,k2,⋯,k n成的一个有序数〔k1,k2,⋯,k n〕,如果将它依次代入方程〔〕中的x1,x2,⋯,x n后,〔〕中的每个方程都成恒等式,称个有序数〔k1,k2,⋯,k n〕方程〔〕的一个解。
然由x1=0,x2=0,⋯,x n=0成的有序数〔0,0,⋯,0〕是次性方程〔〕的一个解,称之次性方程〔〕的零解,而当次性方程的未知量取不全零,称之非零解。
〔利用矩来性方程的解的情况或求性方程的解是很方便的。
因此,我先出性方程的矩表示形式。
〕非次性方程〔〕的矩表示形式:AX=B其中a 11a12a1nx1b1a 21a22a2n,X=x2b2A=,B= am1a m2amnxn bn称A方程〔〕的系数矩,X未知矩,B常数矩。
将系数矩A和常数矩B放在一起构成的矩a11a12 a1n b1a21a 22a2nb2[AB]=am1am2amnb m称方程〔〕的增广矩。
次性方程〔〕的矩表示形式: AX=O二、高斯消元法〔下面介利用矩求解方程的方法,那么矩初等行会不会改方程的解呢我先看一个定理。
〕定理 假设用初等行将增广矩[A B]化 [C D] , AX=B 与 CX=D 是同解方程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%利用高斯列主元消去法求如下线性方程组的解
clear all;
A=[3 -2 1 -1;4 0 -1 2;0 0 2 3;0 0 0 5]; b=[8;-3;11;15];
function [X,XA] = UpGaussFun(A,b)
%利用高斯列主元消去法求如下线性方程组的解
%A为一个n阶上三角非奇异矩阵
%b为线性方程组的阐述向量
%X为线性方程组AX=b的解
%XA为消元后的系数矩阵
N=size(A);
n=N(1);
index=0;
for i=1:(n-1)
me=max(abs(A(1:n,i)));%选列主元
for k=i:n
if(abs(A(k,i))==me)
index=k;
break;
end;
end;
end;
temp=A(i,1:n);
A(i,1:n)=A(index,1:n);
A(index,1:n)=temp;
bb=b(index);
b(index)=b(i);
b(i)=bb;%交换主行
for j=(i+1):n
if(a(i,i)==0)
disp('¶Ô½ÇÔªËØΪ0£¡');
return;
end;
l=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;
end;
X=UpTriangleFun(A,b);
XA=A;
-----------------------------------------------------------------------------------------------------------------------------
% 函数定义
function [X,XA]= UpGaussFun(A,b)
%利用高斯列主元消去法求如下线性方程组的解
%A为一个n阶上三角非奇异矩阵
%b为线性方程组的阐述向量
%X为线性方程组AX=b的解
%XA为消元后的系数矩阵
[N,M]=size(A);
%N=sizes(A);
n=N;
index=0;
for i=1:(n-1)
me=max(abs(A(1:n,i))); %选列主元
for k=i:n
if(abs(A(k,i))==me)
index=k;
break;
end;
end;
temp=A(i,1:n);
A(i,1:n)=A(index,1:n);
A(index,1:n)=temp;
bb=b(index);
b(index)=b(i);
b(i)=bb; %交换主行
for j=(i+1):n
if(A(i,i)==0)
disp('¶Ô½ÇÔªËØΪ0£¡');
return;
end;
l=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;
end;
end;
XA=A;
%数据测试
>>clear all;
A=[3 -2 1 -1;4 0 -1 2;0 0 2 3;0 0 0 5]; b=[8;-3;11;15];
>> [X,XA]=UpGaussFun(A,b)
X =
-3.0000
10.2500
11.0000
15.0000
XA =
4.0000 0 -1.0000 2.0000
0 -2.0000 1.7500 -2.5000
0 0 2.0000 3.0000
0 0 0 5.0000。