当前位置:文档之家› 高斯消元法讲解

高斯消元法讲解

高斯消元法讲解
高斯消元法讲解

#include "Stdio.h"

#include "Conio.h"

/*L是矩阵的行减1,从程序上看是最外层循环的次数

N 对应矩阵的行数,M对应矩阵的列数

可以通过改变L、N、M来控制矩的阶数 */

#define L 3

#define N 4

#define M 5

void gauss(double a[N][M],double x[N])

{int i,j,l,n,m,k=0;

double temp[N];

/*第一个do-while是将增广矩阵消成上三角形式*/

do{n=0;

for(l=k;l

for(m=0,i=k;i

for(j=k;j

k++;

}while(k

/*第二个do-while是将矩阵消成对角形式,并且重新给k赋值*/ k=L-1;

do{n=0;

for(l=k;l>=0;l--)temp[n++]=a[k-l][k+1]/a[k+1][k+1];

for(m=0,i=k;i>=0;i--,m++)

for(j=k;j

k--;

}while(k>=0) ;

/*下一个for是解方程组*/

for(i=0;i

}

void menu()

{printf("\n _ _ _ _ _\n");

printf(" 1.operation\n");

printf(" 2.exit");

printf("\n _ _ _ _ _\n");

}

main()

{int i,j,choose;

double a[N][M]={0},answer[N];

clrscr();

while(1){

leep:menu();

scanf("%d",&choose);

switch(choose){

case 1:

printf("!!The size of Maxrix is %d * %d,each line enter %d element:\n ",N,M,M); for(i=0;i

{printf("Enter the Matrix's %d line:\n",i);

for(j=0;j

scanf("%lf",&a[i][j]);

}

printf("\nthe corss matrix is:\n_ _ _ _ _\n");

gauss(a,answer);

for(i=0;i

{for(j=0;j

printf("%-2lf ",a[i][j]);

putchar('\n');

}

printf("_ _ _ _ _\nthe solve is:\n");

for(i=0;i

case 2:

exit(0);

default:printf("input error:\n");goto leep;

}

}

getch();

}

/*试验:

西安交通大学出版社出版的《计算方法》书上28页的例2.1:

1 2 3 -4 -2

_ -3 -4 -12 13 5

A= 2 10 0 -3 10

4 14 9 -13 7

试验结果:x1=1,x2=2,x3=3,x4=4 */

#include "Stdio.h"

#include "Conio.h"

/*L是矩阵的行减1,从程序上看是最外层循环的次数

N 对应矩阵的行数,M对应矩阵的列数

可以通过改变L、N、M来控制矩的阶数 */

#define L 3

#define N 4

#define M 5

void gauss(double a[N][M],double x[N])

{int i,j,l,n,m,k=0;

double temp[N];

/*第一个do-while是将增广矩阵消成上三角形式*/

do{n=0;

for(l=k;l

for(m=0,i=k;i

for(j=k;j

k++;

}while(k

/*第二个do-while是将矩阵消成对角形式,并且重新给k赋值*/ k=L-1;

do{n=0;

for(l=k;l>=0;l--)temp[n++]=a[k-l][k+1]/a[k+1][k+1];

for(m=0,i=k;i>=0;i--,m++)

for(j=k;j

k--;

}while(k>=0) ;

/*下一个for是解方程组*/

for(i=0;i

}

void menu()

{printf("\n _ _ _ _ _\n");

printf(" 1.operation\n");

printf(" 2.exit");

printf("\n _ _ _ _ _\n");

}

main()

{int i,j,choose;

double a[N][M]={0},answer[N];

clrscr();

while(1){

leep:menu();

scanf("%d",&choose);

switch(choose){

case 1:

printf("!!The size of Maxrix is %d * %d,each line enter %d element:\n ",N,M,M); for(i=0;i

{printf("Enter the Matrix's %d line:\n",i);

for(j=0;j

scanf("%lf",&a[i][j]);

}

printf("\nthe corss matrix is:\n_ _ _ _ _\n");

gauss(a,answer);

for(i=0;i

{for(j=0;j

printf("%-2lf ",a[i][j]);

putchar('\n');

}

printf("_ _ _ _ _\nthe solve is:\n");

for(i=0;i

break;

case 2:

exit(0);break;

default:printf("input error:\n");goto leep;

}

}

getch();

}

/*试验:

西安交通大学出版社出版的《计算方法》书上28页的例2.1:

1 2 3 -4 -2

_ -3 -4 -12 13 5

A= 2 10 0 -3 10

4 14 9 -13 7

试验结果:x1=1,x2=2,x3=3,x4=4 */

程序实现:

int n = 3;

double[] x = new double[n];

double[,] lines = { {2,1,-1,8},{-3,-1,2,-11},{-2,1,2,-3}};

public static void Gauss(int n, double[,] a, double[] x)

{

double d;

Console.WriteLine("高斯消去法解方程组的中间过程");

Console.WriteLine("============================");

Console.WriteLine("中间过程");

Console.WriteLine("增广矩阵:");

printArray(n, a); Console.WriteLine();

// 消元

for(int k = 0; k < n; k++)

{

Console.WriteLine("第{0}步", k + 1);

Console.WriteLine("初始矩阵:");

printArray(n, a); Console.WriteLine();

selectMainElement(n, k, a); // 选择主元素

Console.WriteLine("选择主元素后的矩阵:");

printArray(n, a); Console.WriteLine();

// for (int j = k; j <= n; j++ ) a[k, j] = a[k, j] / a[k, k];

// 若将下面两个语句改为本语句,则程序会出错,因为经过第1次循环

// 后a[k,k]=1,a[k,k]的值发生了变化,所以在下面的语句中先用d

// 将a[k,k]的值保存下来

d = a[k, k];

for (int j = k; j <= n; j++ ) a[k, j] = a[k, j] / d;

Console.WriteLine("将第{0}行中a[{0},{0}]化为1后的矩阵:", k + 1);

printArray(n, a); Console.WriteLine();

// Guass消去法与Jordan消去法的主要区别就是在这一步,Gauss消去法是从k+1 // 到n循环,而Jordan消去法是从1到n循环,中间跳过第k行

for(int i = k + 1; i < n; i++)

{

d = a[i, k];

// 这里使用变量d将a[i,k]的值保存下来的原理与上面注释中说明的一样

for (int j = k; j <= n; j++) a[i, j] = a[i, j] - d * a[k, j];

} Console.WriteLine("消元后的矩阵:");

printArray(n, a); Console.WriteLine();

} // 回代

x[n - 1] = a[n - 1, n];

for (int i = n - 1; i >= 0; i--)

{

x[i] = a[i, n];

for (int j = i + 1; j < n; j++) x[i] = x[i] - a[i, j] * x[j];

}

} // 选择主元素

public static void selectMainElement(int n, int k, double[,] a)

{ // 寻找第k列的主元素以及它所在的行号

double t, mainElement;

// mainElement用于保存主元素的值

int l;

// 用于保存主元素所在的行号

// 从第k行到第n行寻找第k列的主元素,记下主元素mainElement和所在的行号l mainElement = Math.Abs(a[k, k]); // 注意别忘了取绝对值

l = k;

for(int i = k + 1; i < n; i++)

{

if (mainElement < Math.Abs(a[i, k]))

{

mainElement = Math.Abs(a[i, k]);

l = i;

// 记下主元素所在的行号

}

}

// l是主元素所在的行。将l行与k行交换,每行前面的k个元素都是0,不必交换 if (l != k)

{

for (int j = k; j <= n; j++)

{

t = a[k, j]; a[k, j] = a[l, j]; a[l, j] = t;

}

}

}

// 打印矩阵

public static void printArray(int n, double[,] a)

{

for(int i = 0; i < n; i++)

{

for (int j = 0; j <= n; j++ )

Console.Write("{0,10:F6} ", a[i, j]);

Console.WriteLine();

}

}

此函数的作用是将A化作上三角阵,当然这个过程中B和Q也有相应的变化。CSS code

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。 一、线性方程组 设含有n 个未知量、有m 个方程式组成的方程组 a x a x a x b a x a x a x b a x a x a x b n n n n m m mn n m 11112211211222221122+++=+++=+++=???????ΛΛΛΛΛΛΛΛΛ (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 M 21, B = ????? ???????n b b b M 21 称A 为方程组(3.1)的系数矩阵,X 为未知矩阵,B 为常数矩阵。将系数矩阵A 和常数矩阵B 放在一起构成的矩阵

高斯消元法 主元消去法

实验内容 1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. (1) 123 123 123 0.101 2.304 3.555 1.183 1.347 3.712 4.623 2.137 2.835 1.072 5.643 3.035 x x x x x x x x x ++= ? ? -++= ? ?-++= ? (2) 123 123 123 528 28321 361 x x x x x x x x x ++= ? ? +-= ? ?--= ? MATLAB计算源程序 1. 用高斯消元法解线性方程组b AX=的MATLAB程序 输入的量:系数矩阵A和常系数向量b; 输出的量:系数矩阵A和增广矩阵B的秩RA,RB, 方程组中未知量的个数n 和有关方程组解X及其解的信息. function [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,所以此方程组无解.') 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 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

高斯消元法讲解

#include "Stdio.h" #include "Conio.h" /*L是矩阵的行减1,从程序上看是最外层循环的次数 N 对应矩阵的行数,M对应矩阵的列数 可以通过改变L、N、M来控制矩的阶数 */ #define L 3 #define N 4 #define M 5 void gauss(double a[N][M],double x[N]) {int i,j,l,n,m,k=0; double temp[N]; /*第一个do-while是将增广矩阵消成上三角形式*/ do{n=0; for(l=k;l=0;l--)temp[n++]=a[k-l][k+1]/a[k+1][k+1]; for(m=0,i=k;i>=0;i--,m++) for(j=k;j=0) ; /*下一个for是解方程组*/ for(i=0;i

完整版高斯消元法MATLAB实现

《数值分析》实验报告 一、实验目的与要求 1.掌握高斯消去法的基本思路和迭代步骤; 2.培养编程与上机调试能力。 二、实验内容 1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. 5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2) 21x?8x?32x?2.137x?3.712x?4.623?1.347x???312312??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312 2.编写用列主元高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. 5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2) 2x?8x?3x?212.137?4.6231.347?x?3.712x?x??321321??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312三.MATLAB计算源程序 AX?b MATLAB1. 程序用高斯消元法解线性方程组的b;输入的量:系数矩阵和常系数向量A RA,RB, n方程组中未知量的个数的秩输出的量:系数矩阵和增广矩阵BA.及其解的信息和有关方程组解X gaus(A,b) function [RA,RB,n,X]=B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>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 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);

高斯消元法简介

高斯消元法简介 一,教学目标 知识与技能:了解高斯消元法 过程与方法:直接演示说明,学习做简单练习 情感,态度和价值观:进一步体会解方程组的根本思想消元,通过高斯消元的学习增强学习数学的能力 二,重点与难点:高斯消元法 三,课型:新授课 四,教学过程: 1.在前面的几节课,已经用加减消元和代入消元法求解二元或者三元一次方程组,其基本的思想就是从已知的方程导出未知数较少的方程组,直到最后得到一个一元一次方程,这种做法可适用于一般的n 元线性方程组(线性方程组),但是由于未知数的增加,我们希望我们的消元是有规律的,以避免混乱,下面介绍高斯消元法 2.例1:解方程组 1234123412341234251027612632517315292763 x x x x x x x x x x x x x x x x ---=?? -++-=?? ---=??--++=-? 解:把第一个方程的2倍,-3倍,5倍分别加到第2,3,4个方程上,可以消去2,3,4个 方程的未知数1x 12342342342342510 522226 2 1 7213 x x x x x x x x x x x x x ---=?? +-=?? +-=??--+=-? 为了使以后少出现分数运算,交换第二,三个方程的位置 12342342342342510 2 1 522226 7213 x x x x x x x x x x x x x ---=?? +-=?? +-=??--+=-? 把第2个方程的-5倍,7倍分别加到第3,4个方程,可以消去第3,4个方程未知数2x 123423434342510 2 1 31221 6126 x x x x x x x x x x x ---=?? +-=?? --=??-=-? 整理一下方程,第3个方程的左右两边乘以13 - ,第4个方程左右两边乘以1 6 123423434342510 2 1 47 21 x x x x x x x x x x x ---=?? +-=?? +=-??-=-?

高斯消元法

求解线性方程组的直接解法 5.1 Gauss 消去法 ① 三角方程组 先举一个简单的例子来说明消去法的基本思想. 例1. 用消去法解方程组 ??? ??=+-=-=++(3) .122(2) ,54(1) ,6321 32321x x x x x x x x 解 第一步.将方程(1)乘上-2加到方程(3)上去,消去(3)中的未知数1x ,得到 (4) .11432-=--x x 第二步.将方程(2)加到方程(4)上去,消去方程(4)中的未知数2x ,得到与原方程组等 价的三角形方程组 (5) .62 ,54 ,6332321?? ? ??-=-=-=++x x x x x x 显然,方程组(5)是容易求解的,解为.)3,2,1(T x =* 上述过程相当于 332331 (-2) 6-56 20014011111-56 140140111156 122140111)|(r r r r r r b A →+→+??? ? ?? ??--→????? ??---→????? ??--= 其中用i r 表示矩阵的第i 行. 下面我们讨论求解一般线性方程组的高斯消去法. 一般地 ???????==++=+++n n nn n n n n b x a b x a x a b x a x a x a 2 222211212111 当a 11a 22…a nn ≠0时,可解出 x n =b n /a nn for k=n-1:1 x k =(b 1- a k,k+1x k +1-…- a kn x n )/ a kk end

注: k k b x ,可用同一组单元.并可解出一个未知数即代入其它方程消去该未知数 Gauss 消元法的流程图为: 流程图中,,(,1,2,...,)ij i a b i j n 分别为线性方程组的系数矩阵和常数向量; k 是循环次数。 ② 顺序消去法 一般地,k =1对n 阶方程组消去第k 个元(a kk ≠0):

高斯消元法

这里向你推荐一下克鲁特算法(其实就是对高斯列主元消元法进行优化,使之更适合于计算机编程),首先将矩阵A进行LU分解(将系数矩阵分解成一个上三角矩阵和一个下三角矩阵),分解的过程中用到了隐式的主元寻找法,同时利用克鲁特算法可以将两个n*n矩阵压缩到一个n*n矩阵中,大大节省了存储空间提高了计算速度。 方程可化为L*U*x=B,令U*x=y --->L*y=B 然后利用回代先求y,再利用y求x 因为该方法在求解过程中不涉及增广矩阵所以矩阵B几乎不参与什么运算,所以它的计算速度应该能够达到高斯列主元消元法的三倍,但原理与其基本一致。 而且我在程序中使用了动态数组方便你今后进行扩展。 以下程序按照《矩阵论第二版》和《C语言数值计算法方法大全》编写,LU分解部分程序主要参考了《C语言数值计算法方法大全》第二章的程序 如果你需要详细的理论讲解我可以将这两本书和源程序发给你.,我的邮箱 hu_hu605@https://www.doczj.com/doc/3b14904803.html, 计算结果: A矩阵: 2 2 5 3 4 7 1 3 3 B矩阵: 5 6 5 解矩阵: x 1=-7 x 2=0.333333 x 3=3.66667 Press any key to continue #include #include #include #include #include #include #include using namespace std; #define TINY 1.0e-20 //A small number. #define N 3

高斯消元法(完整)教学内容

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。 一、线性方程组 设含有n 个未知量、有m 个方程式组成的方程组 a x a x a x b a x a x a x b a x a x a x b n n n n m m mn n m 11112211211222221122+++=+++=+++=??????? (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 为常数矩阵。将系数矩阵A 和常数矩阵B 放在一起构成的矩阵

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

高斯列主元消元法解线性方程组 一、题目:用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) 二、原理及步骤分析 设 n n ij R a A ?∈=][)1(,n n R b 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 n i k k k i a a k ≤≤= 并将第k 行元与第k i 行元互换。 (2)消元计算:对k=1,2,……n-1依次计算 ()()()???? ?????++=-=++=-=++==++n k k i b m b b n k k j i a m a a n k k i a a m k k ik k i k i k kj ik k ij k ij k kk k ik k ik ,,2,1,,2,1,,,2,1)()() 1() ()()1()() ()( (3)回代求解 ???? ????????? ??-==∑+=) (1) ()()() (i ii n i j j i ij i i i n nn n n n a x a b x a b x ()1,,2,1 --=n n i

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术与工程管理中有许多问题经常可以归结为线性方程组类型得数学模型,这些模型中方程与未知量个数常常有多个,而且方程个数与未知量个数也不一定相同.那么这样得线性方程组就是否有解呢?如果有解,解就是否唯一?若解不唯一,解得结构如何呢?这就就是下面要讨论得问题. 一、线性方程组 设含有n个未知量、有m个方程式组成得方程组 (3、1) 其中系数,常数都就是已知数,就是未知量(也称为未知数)。当右端常数项,,…,不全为0时,称方程组(3、1)为非齐次线性方程组;当== …== 0时,即 (3、2) 称为齐次线性方程组. 由n个数, , …, 组成得一个有序数组(,,…,),如果将它们依次代入方程组(3、1)中得,,…, 后,(3、1)中得每个方程都变成恒等式,则称这个有序数组(,,…,)为方程组(3、1)得一个解。显然由=0, =0, …, =0组成得有序数组(0,0,…,0)就是齐次线性方程组(3、2)得一个解,称之为齐次线性方程组(3、2)得零解,而当齐次线性方程组得未知量取值不全为零时,称之为非零解. (利用矩阵来讨论线性方程组得解得情况或求线性方程组得解就是很方便得。因此,我们先给出线性方程组得矩阵表示形式。) 非齐次线性方程组(3、1)得矩阵表示形式为: AX =B 其中 A=,X=,B = 称A为方程组(3、1)得系数矩阵,X为未知矩阵,B为常数矩阵。将系数矩阵A与常数矩阵B放在一起构成得矩阵 = 称为方程组(3、1)得增广矩阵。 齐次线性方程组(3、2)得矩阵表示形式为:AX=O 二、高斯消元法 (下面介绍利用矩阵求解方程组得方法,那么矩阵初等行变换会不会改变方程组得解呢?我们先瞧一个定理。) 定理3、1若用初等行变换将增广矩阵化为,则AX= B与CX =D就是同解方程组。 证由定理3、1可知,存在初等矩阵,,…, ,使 …= 记…= P,则P可逆,即存在。 设为方程组A X=B得解,即 A= B 在上式两边左乘P,得 P A = PB 即 C=D 说明也就是方程组C X=D得解。反之,设为方程组C X =D得解,即

高斯消元法求解线性方程组

数值分析 程 序 设 计 学院:计算机学院 姓名:袁薪洋 时间:2012年10月10日

1.实验目的: 1熟练掌握C语言程序设计,编程求解问题。 2.运用高斯消元法求解线性方程组。 2.实验内容: 用高斯消元法求解方程组。 0.001 2.000 3.000 x1 1.000 -1.000 3.172 4.623 x2 = 2.000 -2.000 1.072 5.643 x3 3.000 程序的完整代码: #include #include #define row 3 void M_Print(float(*a)[row],float* b) { int i,j; printf("**********************************\n\n"); printf("用高斯主元消去法求解线性方程组:\n\n"); printf("**********************************\n\n");

for(i=0;i

(Gauss-Jordan)消元法

(Gauss-Jordan)消元法 选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵、解线性方程组(插一句:LM算法求解的一个步骤),等等。它的速度不是最快的,但是它非常稳定(来自网上的定义:一个计算方法,如果在使用此方法的计算过程中,舍入误差得到控制,对计算结果影响较小,称此方法为数值稳定的),同时它的求解过程也比较清晰明了,因而人们使用较多。下面我就用一个例子来告诉你Gauss-Jordan法的求解过程吧。顺便再提及一些注意事项以及扩展话题。 对本文中所提到的“主元”等概念的解释,可以参考此链接。 假设有如下的方程组: 写成矩阵形式就是:AX=B,其中: 且X=(X 1, X2, X3)T。 文章来源:https://www.doczj.com/doc/3b14904803.html,/ 现对矩阵A作初等变换,同时矩阵B也作同样的初等变换,则当A化为单位矩阵的时候,有: 显而易见,我们得到了方程组的解X=(1, 2, 4)T。

所以,我们要以一定的策略,对A和B施以一系列的初等变换,当A化为单位矩阵的时候,B就为方程组的解。 选主元的G-J消元法通过这样的方法来进行初等变换:在每一个循环过程中,先寻找到主元,并将主元通过行变换(无需列变换)移动到矩阵的主对角线上,然后将主元所在的行内的所有元素除以主元,使得主元化为1;然后观察主元所在的列上的其他元素,将它们所在的行减去主元所在的行乘以一定的倍数,使得主元所在的列内、除主元外的其他元素化为0,这样就使得主元所在的列化为了单位矩阵的形式。这就是一个循环内做的工作。然后,在第二轮循环的过程中,不考虑上一轮计算过程中主元所在的行和列内的元素,在剩下的矩阵范围内寻找主元,然后(如果其不在主对角线上的话)将其移动到主对角线上,并再次进行列的处理,将列化为单位矩阵的形式。余下的步骤依此类推。具体的计算过程的一个例子,请看下面我举的求逆矩阵的过程。 如果要解系数矩阵相同、右端向量不同的N个方程组,在设计程序的时候,没有必要”解N 次方程组“,我们完全可以在程序中,将所有的右端向量以矩阵的数据结构(类似于二维数组)来表示,在系数矩阵作行变换的时候,矩阵里的每一个右端向量也做同样的变换,这样,我们在一次求解运算的过程中,实际上就是同时在解N个方程组了,这是要注意的地方。 文章来源:https://www.doczj.com/doc/3b14904803.html,/ 那么,G-J法为什么可以用来求逆矩阵? 假设AX=E,其中,A为n阶系数矩阵(与上面的解线性方程组对照);E为单位矩阵,即E=(e1,e2,…,e n),其中e i (i=1,2,…,n) 为单位列向量;X为n个列向量构成的矩阵,即 X=(x1,x2,…,x n),其中x i (i=1,2,…,n) 为列向量。于是,可以把等式AX=E看成是求解n个线性方程组Ax i=e i(i=1,2,…,n),求出了所有的x i之后,也即得到了矩阵X。而由AX=E可知,矩阵X是A的逆矩阵,即X=A-1。这样,就求出了A的逆矩阵了。于是,求逆矩阵的过程被化成了解线性方程组的过程,因此我们可以用Gauss-Jordan消元法来求逆矩阵。 求逆矩阵时,系数矩阵A和单位矩阵E可以共用一块存储区,在每一次约化过程中,系数矩阵逐渐被其逆矩阵替代。 在这里,我用一个实际的例子来说明G-J法求逆矩阵的过程: 有如下的方程组: 显而易见,该方程组对应的系数矩阵A和右端向量矩阵B(此处只有一个右端向量)分别为:

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。 一、线性方程组 设含有n 个未知量、有m 个方程式组成的方程组 a x a x a x b a x a x a x b a x a x a x b n n n n m m mn n m 11112211211222221122+++=+++=+++=??????? (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 21 2222111211,X = ????????????n x x x 21,B = ????????????n b b b 21 称A 为方程组(3.1)的系数矩阵,X 为未知矩阵,B 为常数矩阵。将系数矩阵A 和常数矩阵B 放在一起构成的矩阵

相关主题
文本预览
相关文档 最新文档