高斯主列元消去法-C语言代码-解线性方程组

#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();
}


相关文档
最新文档