高斯列主元消去法 求解线性方程组
#include
#include
#include
#define NUM 9
/*#include
#include
using namespace std;*/
void main()
{
/*ofstream fout;
fout.open("c:\\users\\lcy\\desktop\\1.txt");*/
double a[NUM][NUM] = {
{12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.031743},
{2.115237,19.141823,-3.125432,-1.012345,2.189736,1.563849,-0.784165,1.112348,3.123124},
{-1.061074,-3.125432,15.567914,3.123848,2.031454,1.836742,-1.056781,0.336993,-1.010103},
{1.112336,-1.012345,3.123848,27.108437,4.101011,-3.741856,2.101023,-0.71828,-0.037585},
{-0.113584,2.189736,2.031454,4.101011,19.897918,0.431637,-3.111223,2.121314,1.784317},
{0.718719,1.563849,1.836742,-3.741865,0.431637,9.789365,-0.103458,-1.103456,0.238417},
{1.742382,-0.784165,-1.056781,2.101023,-3.111223,-0.103458,14.713846,3.123789,-2.213474},
{3.067813,1.112348,0.336993,-0.71828,2.121314,-1.103456,3.123789,30.719334,4.446782},
{-2.031743,3.123124,-1.010103,-0.037585,1.784317,0.238417,-2.213474,4.446782,40.00001}
};
double b[NUM] = {2.1874369,33.992318,-25.173417,0.84671695,1.784317,-86.612343,1.1101230,4.719345,-5.6784392};
double result[NUM];
int i,j,k;
for ( i = 0;i < NUM;i++)
{
double max_i = fabs(a[i][i]);/*储存第i列的绝对最大值*/
int index = i;/* 指示第i列的绝对最大值得在哪一行*/
for ( j = i + 1;j < NUM;j++)
{
if (fabs(a[j][i]) > max_i)
{
max_i = fabs(a[j][i]);
index = j;
}
}/* end for j = ...*/
/* 交换第index行与第i行*/
{
double tmp;
for ( j = 0;j < NUM;j++)
{
tmp = a[index][j];
a[index][j] = a[i][j];
a[i][j] = tmp;
}
tmp = b[index];
b[index] = b[i];
b[i] = tmp;
}
/*以下进行三角化*/
for ( j = i + 1; j < NUM;j++)
{
double tmp = a[j][i];
for ( k = i;k < NUM;k++)
{
a[j][k] -= a[i][k] * tmp / a[i][i];
}
b[j] -= b[i] * tmp / a[i][i];
}
}
/* 打印三角化后的a,b*/
printf("a矩阵为:\n");
for ( i = 0;i < NUM;i++)
{
for ( j = 0;j < NUM;j++)
{
printf("%f\t",a[i][j]);
}
printf("\n");
}
printf("b矩阵为:\n");
for ( i = 0;i < NUM;i++)
{
printf("%f\t",b[i]);
}
/*上面已将a,b计算出来,下面求解方程。。。。。。。*/
for (i = NUM - 1;i >= 0;i--)
{
double tmp = 0;
for (j = NUM - 1;j > i;j--)
{
tmp += result[j] * a[i][j];
}
result[i] = (b[i]-tmp)/a[i][i];
}
/* 打印方程组的解*/
printf("\n方程组的解为:\n");
for ( i = 0;i < NUM;i++)
{
printf("%f\t",result[i]);
}
getch();
}