C语言矩阵求逆程序(高斯-约旦法)

C语言矩阵求逆程序(高斯-约旦法)

高斯-约旦法

根据代数里面的知识,可以使用伴随矩阵也可以使用初等行变换来解求解,但是这样如果矩阵的维数较大的时候,使用这种方法,矩阵的维数变大时,计算量急剧的变大,计算时间和使用内存也会按着指数急剧上升,这样的算法的生命力不行。

使用以下这种算法的计算量和使用内存不会发生急剧的变化,特别是矩阵在维数大的时候。

高斯-约旦法(全选主元)求逆的步骤如下:

首先,对于 k 从 0 到 n - 1 作如下几步:

从第 k 行、第 k 列开始的右下角子阵中选取绝对值最大的元素,并记住次元素所在的行号和列号,在通过行交换和列交换将它交换到主元素位置上。这一步称为全选主元。

m(k, k) = 1 / m(k, k)

m(k, j) = m(k, j) * m(k, k),j = 0, 1, ..., n-1;j != k

m(i, j) = m(i, j) - m(i, k) * m(k, j),i, j = 0, 1, ..., n-1;i, j != k

m(i, k) = -m(i, k) * m(k, k),i = 0, 1, ..., n-1;i != k

最后,根据在全选主元过程中所记录的行、列交换的信息进行恢复,恢复的原则如下:在全选主元过程中,先交换的行(列)后进行恢复;原来的行(列)交换用列(行)交换来恢复。

#include"stdio.h"

#include"malloc.h"

#include"math.h"

//数学函数

void main()

{ int inv(double *p,int n);

double a[4][4]={{1,2,0,0},{2,5,0,0},{0,0,3,0},{0,0,0,1}},*ab;

ab=a[0];

int n=4,i=0,j;

相关推荐
相关主题
热门推荐