求解线性方程组--Doolittle分解法

 求解线性方程组--Doolittle分解法。

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

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

 

/* 求解线性方程组--Doolittle分解法 */ #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]; } } float temp; /* 分解过程 */ for(i=0; i<n; i++) { for(j=i; j<n+1; j++) { temp = 0; for(k=0; k<i; k++) { temp = temp + a[i][k] * a[k][j]; } a[i][j] = a[i][j] - temp; } for(j=i+1; j<n; j++) { temp = 0; for(k=0; k<i; k++) { temp = temp + a[j][k] * a[k][i]; } a[j][i] = (a[j][i] - temp) / a[i][i]; } } /* 回代过程 */ 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]; } /* 输出过程 */ cout<<"解向量为:/n"; for(i=0; i<n; i++) { cout<<"x"<<i<<": "<<a[i][n]<<endl; } return 0; }

你可能感兴趣的:(求解线性方程组--Doolittle分解法)