gauss消元法c语言程序,[原创]GaussJordan消去法(C语言版)

  • Post author:
  • Post category:其他


怎么都是只下载不说话呢?大家可以随便谈谈自己的想法噻

下面这是源代码:

#include “stdafx.h”

#include “iostream.h”

#include “malloc.h”

int Row=0,Col=0;//矩阵总行数,总列数

double * InitMatrix()

{

double * matrix;

cout<

cin>>Row>>Col;

matrix = (double*)malloc(Row*Col*sizeof(double));

double * Elem;

Elem = matrix;

cout<

for(int i=0;i

{

for(int j=0;j

{

cout<

cin>>*Elem;

Elem++;

}

}

return matrix;

}

double GetElem(double * mat,int m,int n)

{

double *Elem = mat;

int i=0;

while(i

{

Elem++;

i++;

}

return *Elem;

}

void SetElem(double * mat,int m,int n,double v)

{

double *Elem = mat;

int i=0;

while(i

{

Elem++;

i++;

}

*Elem = v;

}

bool GaussJordan(double * mat)

{

if(1 != (Col-Row))

return false;

int i = 0,j = 0,k = 0;//行标,列标,第几轮计算

double L_ik = 1;

double L_kk = 1;//Elem(k,k)的倒数

double matElem = 0;

for(k = 0;k < Row;k++)

{

if(0 == GetElem(mat,k,k))

return false;

L_kk = 1/GetElem(mat,k,k);

for(i = 0;i < Row;i++)

{

if(i == k)

continue;

L_ik = GetElem(mat,i,k)*L_kk;

for(j = k+1;j < Col;j++)

{

matElem = GetElem(mat,i,j) – L_ik * GetElem(mat,k,j);

SetElem(mat,i,j,matElem);

}

}

//计算主行

for(j = k;j < Col;j++)

{

matElem = L_kk * GetElem(mat,k,j);

SetElem(mat,k,j,matElem);

}

}

//构造结果解矩阵

cout<

for(i = 0;i < Row;i++)

{

cout<

}

return true;

}

int main(int argc, char* argv[])

{

double * mat = InitMatrix();

if(!GaussJordan(mat))

{

cout<

}

cout<

return 0;

}