//Gauss消去法解线性方程组
//参考教材《计算方法教程》第二版,西安交通大学出版社
#include<stdio.h>
int main(void)
{
float A[7][7]={{3,-5,6,4,-2,-3,8},
{1,1,-9,15,1,-9 ,2},
{2,-1,7,5,-1,6,11},
{-1,1,3,2,7,-1,-2},
{4,3,1,-7,2,1,1},
{2,9,-8,11,-1,-4,-1},
{7,2,-1, 2,7,-1,9}};
float b[7]={11,2,29,9,5,8,25};
float x[7]={0};
float Aik,S;
int i,j,k;
int size=7;
printf("A[][]\n");
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
printf("%f ",A[i][j]);
printf("\n");
}
printf("b[]\n");
for(i=0;i<size;i++)
printf("%f ",b[i]);
printf("\n\n");
//消去过程
for(k=0;k<size-1;k++)
{
if(!A[k][k])
return -1;
for(i=k+1;i<size;i++)
{
Aik=A[i][k]/A[k][k];
for(j=k;j<size;j++)
{
A[i][j]=A[i][j]-Aik*A[k][j];
}
b[i]=b[i]-Aik*b[k];
}
}
//消去的结果
printf("A[]\n");
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
printf("%f ",A[i][j]);
printf("\n");
}
printf("b[]\n");
for(i=0;i<size;i++)
printf("%f ",b[i]);
printf("\n\n");
//回代过程
x[size-1]=b[size-1]/A[size-1][size-1];
for(k=size-2;k>=0;k--)
{
S=b[k];
for(j=k+1;j<size;j++)
{
S=S-A[k][j]*x[j];
}
x[k]=S/A[k][k];
}
//solution
printf("The solution x[]=\n");
for(i=0;i<size;i++)
printf("%f ",x[i]);
return 0;
}
/列主元Gauss消去法解线性方程组
//参考教材《计算方法教程》第二版,西安交通大学出版社
#include<stdio.h>
#include<math.h>
int main(void)
{
float A[7][7]={{3,-5,6,4,-2,-3,8},
{1,1,-9,15,1,-9 ,2},
{2,-1,7,5,-1,6,11},
{-1,1,3,2,7,-1,-2},
{4,3,1,-7,2,1,1},
{2,9,-8,11,-1,-4,-1},
{7,2,-1, 2,7,-1,9}};
float b[7]={11,2,29,9,5,8,25};
float x[7]={0};
float Aik,S,temp;
int i,j,k;
float max;//列主元的绝对值
int col;//列主元所在的行
int size=7;
printf("A[][]\n");
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
printf("%f ",A[i][j]);
printf("\n");
}
printf("b[]\n");
for(i=0;i<size;i++)
printf("%f ",b[i]);
printf("\n\n");
//-------消去过程---------
for(k=0;k<size-1;k++)
{
max=fabs(A[k][k]);
col=k;
//查最大元素所在的行
for(i=k;i<size;i++)
{
if(max<fabs(A[i][k]))
{
max=fabs(A[i][k]);
col=i;
}
}
printf("col:%d\n",col);
for(j=k;j<size;j++)
{
temp=A[col][j];
A[col][j]=A[k][j];
A[k][j]=temp;
}
temp=b[col];b[col]=b[k];b[k]=temp;
if(!A[k][k])
return -1;
for(i=k+1;i<size;i++)
{
Aik=A[i][k]/A[k][k];
for(j=k;j<size;j++)
{
A[i][j]=A[i][j]-Aik*A[k][j];
}
b[i]=b[i]-Aik*b[k];
}
}
//消去的结果
printf("A[]\n");
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
printf("%f ",A[i][j]);
c语言如何去学 printf("\n");
}
printf("b[]\n");
for(i=0;i<size;i++)
printf("%f ",b[i]);
printf("\n\n");
//回代过程
x[size-1]=b[size-1]/A[size-1][size-1];
for(k=size-2;k>=0;k--)
{
S=b[k];
for(j=k+1;j<size;j++)
{
S=S-A[k][j]*x[j];
}
x[k]=S/A[k][k];
}
//solution
printf("The solution x[]=\n");
for(i=0;i<size;i++)
printf("%f ",x[i]);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论