您的位置:首页 > 其它

求解线性方程组--主元消去法

2009-08-27 09:28 417 查看
源代码用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
;
}
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息