解线性方程组的消元法c语言,高斯主列元消去法-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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值