求解线性方程组--主元消去法
2009-08-27 09:28
417 查看
源代码用C++实现~~这里采用的是数值分析里的算法。
代码在VC6.0下编译通过,经测试没大问题。
代码在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 ; } 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]; } } float temp; int t; for(k=0; k<n-1; k++) { temp = a[k][k]; t = k; for(i=k+1; i<n; i++) { if(a[i][k] > temp) { temp = a[i][k]; t = i; } } if(0 == temp) { cout<<"系数矩阵为奇异阵!/n"; return 0; } if(t != k) { for(j=k; j<n+1; j++) { temp = a[k][j]; a[k][j] = a[t][j]; a[t][j] = temp; } } 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]; } } } //回代过程 a[n-1] = a[n-1] / 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] ; } a[k] = (a[k] - temp) / a[k][k]; } //输出过程 cout<<"解向量为:/n"; for(i=0; i<n; i++) { cout<<"x"<<i<<": "<<a[i] <<endl; } return 0; }
相关文章推荐
- 求解线性方程组之Gauss_Jordan消去法
- 高斯全主元消去法解线性方程组
- 计算方法:高斯-若当主元消去法解线性方程组
- 主元高斯消去法求解线性方程组 C#源码
- Gauss-Jordan消去法中完全选主元法求解线性方程组
- Gauss消去法求解线性方程组
- 求解线性方程组--全主元消去法
- 行主元素消去法求解线性方程组的Pascal代码
- 求解线性方程组之全选主元高斯消元法
- 高斯列主元消元法求解线性方程组
- 开源Math.NET基础数学类库使用(06)数值分析之线性方程组直接求解
- 中国剩余定理求解同余线性方程组—(互素和非互素的情况)
- Matlab求解线性方程组
- 求解线性方程组的三种基本迭代法
- c语言实现,用最小二乘法求解方程数多于未知变量的线性方程组的最适解(即矛盾方程组)
- 【原创】开源Math.NET基础数学类库使用(06)直接求解线性方程组
- gauss消元法求解线性方程组(举例子)
- 求解线性方程组--Gauss-Seidel迭代法
- 基于C++的n阶线性方程组Ax=b求解
- 高斯消元法求解线性方程组的解集