求解线性方程组--高斯消去法

 源代码用C++实现~~这里采用的是数值分析里的算法

代码在VC6.0下编译通过,经测试没大问题。

 

/* 求解线性方程组--高斯消去法 */ #include <iostream> using namespace std; /* 二维数组动态分配模板 */ template <class T> T** Allocation2D(int m, int n) { T **a; a = new T*[m]; for (int i=0; i<m; i++) { a[i] = new T[n]; } return a; } int main() { /* 循环变量 */ int i,j,k; /* 系数矩阵的行数 */ int n; /* 增广矩阵 */ float** a; /* 动态生成增广矩阵 */ cout<<"输入系数矩阵的N值,N:"; cin>>n; a = Allocation2D<float>(n, n+1); /* 输入增广矩阵的各值 */ cout<<endl<<"输入增广矩阵的各值:/n"; for(i=0; i<n; i++) { for(j=0; j<n+1; j++) { cin>>a[i][j]; } } //消去过程 for(k=0; k<n-1; k++) { for(i=k+1; i<n; i++) { for(j=k+1; j<n+1; j++) { a[i][j] = a[i][j] - a[i][k] * a[k][j] / a[k][k]; } } } //回代过程 float temp; a[n-1][n] = a[n-1][n] / a[n-1][n-1]; for(k=n-2; k>=0; k--) { temp = 0; for(j=k+1; j<n; j++) { temp = temp + a[k][j] * a[j][n]; } a[k][n] = (a[k][n] - temp) / a[k][k]; } //输出过程 for(i=0; i<n; i++) { cout<<"x"<<i<<": "<<a[i][n]<<endl; } return 0; }

 

 

你可能感兴趣的:(算法,测试,Class,float,IM,Allocation)