全选主元高斯消去法求解实系数线性方程组
用列主元高斯消元法求线性代数方程组的解
课程设计任务书前 言回顾普通解方程组的方法,一般都是先逐个削去未知变量,最终得到只有一个未知变量的方程,解之,把得到的值回代到消去变量过程中得到的方程组,逐个求出未知变量。
这种解线性方程组的基本方法就是这里要介绍的高斯消去法。
数学上,高斯消元法(或译:高斯消去法),是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。
当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。
高斯消元法可以用在电脑中来解决数千条等式及未知数。
高斯消元法可以用来找出一个可逆矩阵的逆矩阵。
用关联矩阵表述网络拓扑结构,并根据厂站拓扑结构和网络拓扑结构等概念简化了电力系统的拓扑结构。
根据广义乘法和广义加法的运算规则,将改进的高斯消元算法应用于电力系统拓扑结构分析中,并引入稀疏、分块处理等技术提高了上述拓扑分析的效率。
采用上述高斯消元算法对山东电网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)摘 要用列主元素高斯消去法法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
高斯消去法和列主元高斯消去法解线性方程组的程序(C语言)精品资料
//Gauss消去法解线性方程组
//参考教材《计算方法教程》第二版,西安交通大学出版社
#include<stdio.h>
int main(void)
{
float A[7][7]={{3,-5,6,4,-2,-3,8},
{1,1,-9,15,1,-9 ,2},
for(k=0;k<size-1;k++)
{
max=fabs(A[k][k]);
col=k;
//查找最大元素所在的行
for(i=k;i<size;i++)
{
if(max<fabs(A[i][k]))
{
max=fabs(A[i][k]);
col=i;
}
}
printf("col:%d\n",col);
for(j=k;j<size;j++)
printf("\n\n");
//消去过程
for(k=0;k<size-1;k++)
{
if(!A[k][k])
return -1;
for(i=k+1;i<size;i++)
{
Aik=A[i][k]/A[k][k];
for(j=k;j<size;j++)
{
A[i][j]=A[i][j]-Aik*A[k][j];
{
A[i][j]=A[i][j]-Aik*A[k][j];
}
b[i]=b[i]-Aik*b[k];
}
具有解判定的全选主元高斯消去法解实系数线性方程组的C程序
换 后 的 第 二 个 方 程 加 到 第 ii= 3 4 … , ( , , ) 个 方 程 上 , 将 d 一 3 4 … )消 去 。 则 譬( ,, 如 此 做 下 去 , 直 到 一 1步 , 成 消 去 过 程 , 一 完
得 :
消 去 法 解 实 系 数 线 性 代 数 方 程 组 的 计 算 过 程
b 2 d2 7
● ● ●
解 和 无 穷 多 组 解 , 对 工 程 实 践 中修 正 得 到 这 的 线 性 方 程 组 很 有 好 处 。 工程 实 践 中一 般 要
求 方 程 组 有 唯 一 解 , 得 到 的 线 性 方 程 组 无 若 解 , 说 明 至 少 有一 个 方程 不 正 确 , 纠 正 错 则 需
代 数 方 程 组 的 求 解 问 题 , 仅 能 解 出唯 一 解 . 不 而 且 对 不 存 在 唯 一 解 的 情 况 , 够 判 定 出 无 能
f lT a l 】+ Ⅱ 2 , 1 2+ … 十 dh = b L
!啦
L
+ 。2 2 2+ … 上 2T 一= b 2
b】 bz
● ● ●
2 实 系 数 线 性 代 数 方 程 组 解 的
情况
多元 一 次 方 程 组 即 线 性 方 程 组 。关 于 数 的 加 、 、 、 等 运 算 的 性 质 通 常 称 为 数 的 减 乘 除 代 数 性 质 线 性 代 数 方 程 组 是 具 有 代 数 性 质 的 多 元 一 次 方 程 组 。在 此 只 讨 论 方 程 个 数 与
一
逐 步 回代 得 原 方 程 组 的 解 :
=
一
调 用 全 选 主 元 高 斯 消 去 法 解 方 程 组 , 得 就 本程 序 的计 算行 列 式 的值定 义 成 函数 ,
使用全选主元高斯消去法求解线性方程组程序
使用全选主元高斯消去法求解线性方程组程序' 参数n - Integer型变量,线性方程组的阶数' dblA - Double型n x n 二维数组,线性方程组的系数矩阵' dblB - Double型长度为n 的一维数组,线性方程组的常数向量,返回方程组的解向量' 返回值:Boolean型,求解成功为True,无解或求解失败为False'====函数代码如下====Public Function LEGauss(n As Integer, dblA() As Double, dblB() As Double) As Boolean ' 局部变量Dim i As Integer, j As Integer, k As IntegerDim nIs As IntegerReDim nJs(n) As IntegerDim d As Double, t As Double' 开始求解For k = 1 To n - 1d = 0#' 归一For i = k To nFor j = k To nt = Abs(dblA(i, j))If t > d Thend = tnJs(k) = jnIs = iEnd IfNext jNext i' 无解,返回If d + 1# = 1# ThenLEGauss = FalseExit FunctionEnd If' 消元If nJs(k) <> k ThenFor i = 1 To nt = dblA(i, k)dblA(i, k) = dblA(i, nJs(k))dblA(i, nJs(k)) = tNext iEnd IfIf nIs <> k ThenFor j = k To nt = dblA(k, j)dblA(k, j) = dblA(nIs, j)dblA(nIs, j) = tNext jt = dblB(k)dblB(k) = dblB(nIs)dblB(nIs) = tEnd Ifd = dblA(k, k)For j = k + 1 To ndblA(k, j) = dblA(k, j) / dNext jdblB(k) = dblB(k) / dFor i = k + 1 To nFor j = k + 1 To ndblA(i, j) = dblA(i, j) - dblA(i, k) * dblA(k, j) Next jdblB(i) = dblB(i) - dblA(i, k) * dblB(k)Next iNext kd = dblA(n, n)' 无解,返回If Abs(d) + 1# = 1# ThenLEGauss = FalseExit FunctionEnd If' 回代dblB(n) = dblB(n) / dFor i = n - 1 To 1 Step -1t = 0#For j = i + 1 To nt = t + dblA(i, j) * dblB(j)Next jdblB(i) = dblB(i) - tNext i' 调整解的次序nJs(n) = nFor k = n To 1 Step -1If nJs(k) <> k Thent = dblB(k)dblB(k) = dblB(nJs(k))dblB(nJs(k)) = tEnd IfNext k' 求解成功LEGauss = TrueEnd Function。
高斯列主元消去法求线性方程
MATLAB 高斯列主元消去一. 高斯列主元消去法的算法过程对于线性方程组AX=b ,A 为n*n 矩阵:(1)Step1——在增广矩阵(A ,b )第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(A ,b )做初等行变换使原方程组的第一行第一列的系数 为1,且第一列其它系数都为0.Step2——在增广矩阵(A ,b )中的第二列中(从第二行开始)找到绝对值 最大的元素,将其所在行与第二行交换,再对(A ,b )做初等行变换使原方程组的第二行第二列的系数为1,且第二列中第二行以下的系数都为0. Step3——在增广矩阵(A ,b )中的第三列中(从第三行开始)找到绝对值 最大的元素,将其所在行与第三行交换,再对(A ,b )做初等行变换使原方程组的第三行第三列的系数为1,且第三列中第二行以下的系数都为0。
重复此过程…….(2)如果增广矩阵的秩为n ,则可以将增广矩阵的前n 列化为主对角线都为1的矩阵; 如果增广矩阵的秩为m<n ,则可以将增广矩阵的前m 行m 列矩阵化为主对角线 都是1的矩阵,m 行后的系数均为0;如果增广矩阵的前n 列的秩不等于增广矩 阵的秩,此时方程组无解。
(3)接下来,通过初等变换把对角线上每个1所对应的列上的其他元素变为0,就可以得到增广矩阵的最简阶梯型。
这时可以容易得到最简阶梯型对于方程组的解,即得到方程组的解。
二. 算法的流程图三.运行结果(1)随机生成增广矩阵(6*7):C =-94 -89 -41 88 83 -57 -1441 70 -27 -30 -82 93 43-67 -24 -31 -62 -49 -14 8318 -21 26 83 -15 56 7821 -35 32 -43 15 5 -7454 11 98 10 79 -34 -77方程组的解为:x =-811/542554/10151329/1117521/628-1763/1053-673/4428检查结果:Right result!>>(2)随机生成增广矩阵(6*7):C =78 -42 24 86 68 -43 830 -54 60 -81 11 -97 -44-92 -60 -80 19 67 40 -520 -24 45 -54 -60 90 -4378 18 29 -94 24 49 92-23 -47 -6 15 -66 51 -54 方程组的解为:x =1421/1429417/650-557/592-413/1529253/304964/1123检查结果:Right result!>>四.各个重点步骤的设计方法或注意事项生成增广矩阵时,对生成0到1之间的随机数进行变换:C=floor(200*rand(n,n+1)-100)求方程组的唯一解时,对第i列做初等变换前,应该注意找出首非零元绝对值最大的一行,并与第i行进行交换。
3.1线性代数方程组的解法——列主元高斯消去算法讲解
当方程组阶数较高时,计算量很大,因此克莱姆法则通 常仅有理论上的应用价值,计算线性方程组的解还要考 虑数值解法。
求解线性方程组的数值方法分为直接解法和迭代解法:
直接解法 若计算过程没有舍入误差,经过有限次算术 运算就能求出方程组(1)精确解的数值方法。
迭代解法 若计算过程没有舍入误差,也不能经过有限 次算术运算求得方程组(1)的精确解,而只能是逐步 逼近的数值方法。
①交换矩阵的两行; ②某一行乘以一个非零的数; ③某一行乘以一个数,加到另一行。
消去法 就是对增广矩阵作上述行变换,化为可以直接求解的
3种方程之一,而后求解。
思 Gauss消去法就是先将(1)的系数矩阵A化为上三角阵, 路: 再回代求解。
School of Math. & Phys.
6
North China Elec. P.U.
1 2 3 14
r3 5r2
0 1
4
10
0 0 24 72
x3
72
24
3
1
x2
(10
4x3 ) 1
2
x1
(14
2x2
3x3 ) 1
1
x 2 3
下面看求解n元线性方程组的一般过程,
School of Math. & Phys.
9
North China Elec. P.U.
Mathematical Methods & its Applications 2020/8/13
Mathematical Methods & its Applications 2020/8/13
线性方程组的解法
考虑如下线性方程组
a11
高斯消元法求解线性方程组
高斯消元法求解线性方程组线性方程组是数学中重要的概念,它描述了一组线性方程的集合。
解决线性方程组的问题在科学和工程领域中具有广泛的应用。
高斯消元法是一种常用的方法,用于求解线性方程组。
本文将介绍高斯消元法的原理和步骤,并通过实例演示其应用。
一、高斯消元法的原理高斯消元法是一种基于矩阵变换的方法,用于将线性方程组转化为简化的行阶梯形式。
其基本思想是通过一系列的行变换,将方程组中的系数矩阵化为上三角矩阵,从而简化求解过程。
具体而言,高斯消元法的步骤如下:1. 将线性方程组的系数矩阵和常数向量写成增广矩阵的形式。
2. 选取一个主元素,通常选择第一列的第一个非零元素作为主元素。
3. 通过行变换,将主元素下方的所有元素化为零。
4. 选取下一个主元素,并重复步骤3,直到将矩阵化为上三角形式。
5. 通过回代法,求解得到线性方程组的解。
二、高斯消元法的步骤为了更好地理解高斯消元法的步骤,我们以一个具体的线性方程组为例进行演示。
假设我们有以下线性方程组:```2x + 3y - z = 14x - y + z = -2x + 2y + 3z = 3```首先,我们将其写成增广矩阵的形式:```[2, 3, -1 | 1][4, -1, 1 | -2][1, 2, 3 | 3]```接下来,我们选取第一列的第一个非零元素2作为主元素,并通过行变换将主元素下方的元素化为零。
具体步骤如下:1. 将第二行乘以2,然后与第一行相减,得到新的第二行:`[0, -7, 3 | -4]`2. 将第三行乘以0.5,然后与第一行相减,得到新的第三行:`[0, 0.5, 2.5 | 1.5]`此时,得到的矩阵为:```[2, 3, -1 | 1][0, -7, 3 | -4][0, 0.5, 2.5 | 1.5]```接下来,我们选取第二列的第二个非零元素-7作为主元素,并通过行变换将主元素下方的元素化为零。
具体步骤如下:1. 将第三行乘以14,然后与第二行相加,得到新的第三行:`[0, 0, 35 | 7]`此时,得到的矩阵为:```[2, 3, -1 | 1][0, -7, 3 | -4][0, 0, 35 | 7]```最后,我们通过回代法求解得到线性方程组的解。
线性方程组三种求解方法
线性方程组三种求解方法
线性方程组是由一组线性方程所组成的集合,它是计算机科学中最基本的抽象模型之一。
线性方程组的求解有多种方法,最常用的方法有三种:高斯消元法,全选主元法和乘法因子法。
高斯消元法是一种消除法。
它能将线性方程组变换成求解矩阵的方法,将线性方程组中的未知数从一个方程参与到另一个方程,以实现变量间的互换,当这种变形在线性方程的个数和方程式的系数不相等的时候,系数矩阵就得到了转换,最后实现方程的求解。
由于本质上利用线性变换方法,有可能不能够求解它,而异常解会出现,所以不适合解决线性方程组。
全选主元法是一种消元法,也是线性方程组求解的重要方法。
全选主元法的基本思路是:从一个给定的方程组开始,选出一个最大的系数做主元,将这个未知数代入另一个方程,不断地进行计算,直到求出所有的未知数的值,最后得到相应的解。
全选主元法的优点是计算次数少,能够求出超定方程组的解。
乘法因子法是一种简化法,也是解高维度方程组的有效方法,它是一种缩减矩阵法,把一组方程简化成新形式,其思路是把一个系数矩阵和它的乘法因子矩阵相乘,乘法因子矩阵通过消去系数矩阵中一些行和一些列,来使原始方程组变得简洁,使得求解系数矩阵变得可能,最后可以实现方程组的求解。
总的来说,三种线性方程组的求解方法都有其优势,它们都是有效的解决方案,根据实际情况应用不同的方法可以求出合适的解,同时,在计算机应用中,更多的方法也在发展和探索当中。
高斯列主元消去法解线性方程组的实现
高斯列主元消去法解线性方程组的实现班级学号姓名榴莲一、实验任务采用高斯列主元消去法求解线性方程组,以下消解方程为例。
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");}六、实验结果及分析高斯消去法由消元和回代两个过程组成。
解线性方程组的列主元素高斯消去法和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 ;四、实验内容:解下列两个线性方程组3.01 6.03 1.99 x1 11) 1.27 4.16 1.23 x2 10.987 4.81 9.34 x3 110 7 0 1 x1 83 2.099999 6 2 x2 5.9000012) 5 1 5 1x3 52 1 0 2 x4 1a、用你熟悉的算法语言编写程序用列主元高斯消去法和LU分解求解上述两个方程组,输出Ax=b 中矩阵 A 及向量b, A=LU 分解的L 及U,detA 及解向量x.b、将方程组(1)中系数 3.01 改为 3.00 ,0.987 改为0.990 ,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x 及detA ,并与(1)中结果比较。
直接三角分解法、高斯消去法、高斯列主元消去法解线性方程组
将高斯消去法的计算结果与实际结果比较可知,高斯消去法的计算,结果也是正确的。
将高斯列主元消去法的计算结果与实际结果比较可知,高斯消去法的计算结果是正确的。
3、同理,根据例4的题目以及给出的A,b的取值,可分别调用直接三角分解法(Doolittle法)、高斯消去法、高斯列主元消去法的函数来求解值;具体的输入以及运行结果如下所示:
如对于直接三角分解法(Doolittle法),有
即(malu为求Doolittle的函数,可直接使用函数名直接调用)
对于高斯消去法和高斯列主元消去法,有
3、编写完函数代码后,便可直接通过定义的函数名,输入相关的取值范围,便可验证书后的例子。具体实验输入和结果看实验数据。
实验内容
编写程序代码,在MATLAB的实验环境下,分别使用直接三角分解法(Doolittle法)、高斯消去法、高斯列主元消去法验证教材书后的P42~P47的例1、例3、例4这3个例子:
由直接三角分解法的计算结果与实际结果比较可知,直பைடு நூலகம்三角分解法的计算结果是显示出来时一个不确定的值NaN,这说明利用直接三角分解法来求解该问题存在着很大的误差,因此解决该类问题,我们将不采用直接三角分解法。
同样由高斯消去法的计算结果与实际结果比较可知,高斯消去法的计算结果也是不确定的值NaN,这说明利用高斯消去法来求解该问题同样也存在着很大的误差。
例1:用Doolittle法解方程组:
例3:用部分选主元的Doolittle法解方程组
例4:用部分选主元的Doolittle法紧凑格式解矩阵方程AX=B,其中
实验数据
1、根据例1的题目以及给出的A,b的取值,可分别调用直接三角分解法(Doolittle法)、高斯消去法、高斯列主元消去法的函数来求解值;具体的输入以及运行结果如下所示:
用高斯消元法求解线性代数方程组
用高斯消元法求解线性代数方程组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(1a a aij j =, 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 a iji ij ij ,,2)1(1)1( =⋅-=,1,,3,211)1(11+==n j a a m i i由方程(1-1)到(1-2)的过程中,元素11a 起着重要的作用,特别地,把11a 称为主元素。
(完整版)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以上为高斯消去法的基本过程。
高斯消元法解线性方程组
高斯消元法解线性方程组在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。
那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。
一、线性方程组设含有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 为常数矩阵。
用高斯消元法求解线性代数方程组
用高斯消元法求解线性代数方程组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,并且包含主系数的每一列在其他地方都为零,这个矩阵就称为行简化阶梯形。
最终的形式是独特的;换句话说,它与所使用的行操作序列无关。
例如,在接下来的行运算序列中(每一步可能进行多个初等运算),第三和第四个矩阵是行简化阶梯形矩阵,最终的矩阵是唯一的行简化阶梯形矩阵。
举例:假设目标是找到并描述下列线性方程组的解集:下表是同时应用于方程组及其增广矩阵的行约简过程。
在实践中,人们通常不使用方程来处理系统,而是使用增广矩阵,它更适合于计算机操作。
行约简过程可以总结为:从L1以下的所有方程中消去x,再从L2以下的所有方程中消去y。
这将使方程组变成三角形。
然后,用反代换法求解每个未知数。
一旦y也从第三行中删除,结果是三角形形式的线性方程组,因此算法的第一部分完成。
从计算的角度来看,以相反的顺序求解变量更快,这一过程被称为反向替换。
人们看到的解决办法是z= 1,y= 3,和x= 2。
所以原始方程组有唯一的解。
第二列描述了刚刚执行了哪些行操作。
所以第一步x从...中消除L2通过添加3 / 2 L一到L2。
接下来,x从...中消除L3通过添加L一到L3。
求线性方程组的高斯消元法
求线性方程组的高斯消元法一、功能用全选主元高斯(Gauss)消去法求解n 阶线性代数方程组AX B =。
其中00010,110111,11,01,11,1n n n n n n a a a a a a A a a a ------⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦,011n x x X x -⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦ ,012b b B b ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦ 二、方法说明为保证数值计算的稳定性,本函数采用全选主元。
全选主元高斯消去法分两步进行。
第一步 消去过程 对于k 从0到2n -作一下三步:(1)从系数矩阵A 的第k 行、第k 列开始的右下角子阵中选取绝对值最大的元素,并通过行交换和列交换将它换到主元素的位置上。
(2)归一化/,1,,k j k k k j a a a j k n⇒=+- /k k k kb a b⇒ (3)消去,,1,,i j i k k j i j a a a a i j k n -⇒=+- ,i i k k i b a b b -⇒ 1,,1i k n =+-第二步 回代过程 (1)11,11/n n n n b a x ----⇒ (2)11,2,,1,0n i ijji j i b a xx i n -=+-⇒=-∑最后对解向量中的元素顺序进行调整。
三、函数语句 int agaus(a,b,n)本函数返回一个整型标志值。
若返回的标志值为0,则表示原方程组的系数矩阵奇异,输出信息“fail ”;。
若返回的标志值不为0,则表示正常返回。
四、形参说明a —双精度实型二维数组,体积为n n ⨯。
存放方程组的系数矩阵,返回时将被破坏。
b —双精度实型一维数组,长度为n 。
存放方程组右端的常数向量;返回方程组的解向量。
n —整型变量。
存放方程组的阶数。
五、函数程序(文件名:agaus.c) 六、例求解下列4阶方程组01230123012301230.23680.24710.25681.26711.84710.19680.20711.21680.22711.74710.15811.16750.17680.18711.64711.11610.12540.13970.14901.547x x x x x x x x x x x x x x x x +++=⎧⎪+++=⎪⎨+++=⎪⎪+++=⎩主函数程序(文件名:agaus0.c)如下: #include "stdio.h"#include "math.h" #include "agaus.c" main() { int i;static double a[4][4]={ {0.0,0.2471,0.2568,1.2671}, {0.1968,0.2071,1.2168,0.2271}, {0.1581,1.1675,0.1768,0.1871}, {1.1161,0.1254,0.1397,0.1490} }; static double b[4]={1.8471,1.7471,1.6471,1.5471};a[0][0]=sin(15.0/180.0*3.14);if (agaus(a,b,4)!=0) for (i=0;i<=3;i++)printf("x(%d)=%e\n",i,b[i]); }运行结果为:x(0)=1.04058e+00x(1)=9.87051e-01x(2)=9.35040e-01x(3)=8.81282e-01。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
double d,t;
js=malloc(n*sizeof(int));/*开辟用于记忆列交换信息的动态空间*/
l=1;/*置非奇异标志*/
for (k=0;k<=n-2;k++)
{d=0.0;
for (i=k;i<=n-1;i++)/*全选主元*/
static double b[4]={1.8471,1.7471,1.6471,1.5471};
if (rgauss(4,a,b)!=0)
for (i=0; i<=3; i++)
printf(“x(%d)=%e\n”,i,b[i]);
}
程序运行结果为
x(0)=1.04058e+00
x(1)=9.87051e-01
0.1968x0+0.2071x1+1.2168x2+0.2271x3=1.7471
0.1581x0+1.1675x1+0.1768x2+0.1871x3=1.6471
1.1161x0+0.1254x1+0.1397x2+0.1490x3=1.5471
主函数程序如下:
/*rgaus0.c*/
#include “stdio.h”
#include “rgauss.c”
main()
{ int I;
static double a[4][4]=
{{0.2388,0.2471,0.2568,1.2671},
{0.1968,0.2071,1.2168,0.2271},
{0.1581,1.1675,0.1768,0.1871},
{1.1161,0.1254,0.1397,0.1490}};
x(2)=9.35040e-01
x(3)=8.81282e-01
for (j=k;j<=n-1;j++)
{t=fabs(a[i*n+j]);
if (t>0) {d=t;js[k]=j;is=i;}/*记忆行、列交换信息*/
}
if (d+1.0==1.0)l=0;/*置奇异标志*/
else
{if (js[k]!=k)
for (i=0;i<=n-1;i++)/*列交换*/
{ for (j=k+1;j<=n-1;j++)
{ p=i*n+j;
a[p]=a[p]-a[i*n+k]*a[k*n+j];
}
b[i]=b[i]-a[i*n+k]*b[k];
}
}
d=a[(n-1)*n+n-1];
if (fabs(d)+1.0==1.0)/*奇异返回*/
{ free(js); printf(“fail\n”);
if (js[k]!=k)
{ t=b[k]; b[k]=b[js][k]}; b[js[k]]=t;}/*解向量行交换*/
free(js);/*释放动态空间*/
return(l);/*返回正常标志*/
}
二、用高斯消去法求解下列方程组:
0.2388x0+0.2471x1+0.2568x2+1.2671x3=1.8471
实验3全选主元高斯消去法求解实系数线性方程组
全选主元的基本思想和基本原理在教材的第40页,全选主元高斯消去法求解线性代数方程组的步骤在教材的第41页。
一、算法描述
参数说明:
n整型变量。方程组的阶数。
a双精度实型二维数组,体积为n*n。存放方程组的系数矩阵,返回时将被破坏。
b双精度实型一维数组,长度为n。存放方程组右端的常数向量;返回方程组的解向量。
return(0);
}
b[n-1]=b[n-1]/d;/*计算解向量的最后一个分量*/
for (i=n-2; i>=0; i--)/*回代*/
{ t=0.1; j++)
t=t+a[i*n+j]*b[j];
b[i]=b[i]-t;
}
js[n-1]=n-1;
for (k=n-1;k>=0; k--)/*恢复解向量*/
}
}
if (l==0)/*奇异返回*/
{ free(js); printf(„fail\n);
return(0);
}
d=a[k*n+k];
for (j=k+1;j<=n-1;j++)/*归一化*/
{ p=k*n+j; a[p]=a[p]/d;}
b[k]=b[k]/d;
for (i=k+1;i<=n-1;i++)/*消元*/
{p=i*n+k;q=i*n+js[k];
t=a[p];a[p]=a[q];a[q]=t;
}
if (is!=k)
{ for (j=k;j<=n-1;j++)/*行交换*/
{ p=k*n+j;q=is*n+j;
t=a[p];a[p]=a[q];a[q]=t;
}
t=b[k];b[k]=b[is];b[is]=t;
本函数返回整型标志值。若返回的标志值为0,则表示原方程组的系数矩阵奇异,输出信息“fail”;若返回的标志值不为0,则表示正常返回。
#include”stdlib.h”
#include “math.h”
#include “stdio.h”
int rgauss(n,a,b)
int n;
double a[],b[];