您的位置:首页 > 其它

计算方法:高斯-若当主元消去法解线性方程组

2012-12-05 16:37 134 查看
#include<stdio.h>
#include<math.h>
#define N 100
void xzy(int m, int n,double a
[N+1])//选列主元函数(绝对值最大)一旦选出,则进行交换
{
double max=a[m][m],t;//t为交换变量时的临时变量
int i,l=m,j;
for(i=m+1;i<n;i++)
if(fabs(a[i][m])>fabs(max)) l=i;
if(l>m)
for(j=m;j<=n+1;j++)
{
t=a[m][j];
a[m][j]=a[l][j];
a[l][j]=t;
}
}
void print(double a
[N+1],int n)
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n+1;j++)
printf("%.4f\t",a[i][j]);
printf("\n");
}
}
int main()
{
int i,j,k,n;//输入方程阶数
double a
[N+1],x
,sum,m;//系数行列式、解的数组
printf("请输入方程的阶数:\n");
scanf("%d",&n);
printf("请输入方程增广矩阵:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n+1;j++)
scanf("%lf",&a[i][j]);
for(i=1;i<n;i++)
{
xzy(i,n,a);
for(j=i+1;j<=n;j++)
{
m=(-a[j][i]/a[i][i]);
for(k=i;k<=n+1;k++)
a[j][k]=m*a[i][k]+a[j][k];
}
}
printf("化为上三角阵为:\n");
print(a,n);//输出变形后的上三角阵,查看一下是否正确
for(i=n;i>=1;i--) //对上三角阵进行解方程
{
for(j=n,sum=0;j>i;j--)//注意要使sum初始化为0
sum=sum+a[i][j]*x[j];
x[i]=(a[i][n+1]-sum)/a[i][i];
}
printf("方程的根为:\n");
for(i=1;i<=n;i++)
printf("x%d=%.4f\n",i,x[i]);
system("pause");
return 0;
}
/*方程实例

3
11 -3 -2 3
-23 11 1 0
1 -2 2 -1
x3=1.001,x2=2.001,x1=1.000

3
1 4 -5 3
1 3 -2 2
6 -1 18 2
x1=1.333333.x2=0,x3=-0.33333

3
1 -1 1 -4
5 -4 3 -12
2 1 1 11
x1=3,x2=6,x3=-1

3
2 3 5 5
3 4 7 6
1 3 3 5
x1=-4,x2=1,x3=2(书上答案有误)

4
1.1161 0.1254 0.1397 0.1490 1.5471
0.1582 1.1675 0.1768 0.1871 1.6471
0.1968 0.2071 1.2168 0.2271 1.7471
0.2368 0.2471 0.2568 1.2671 1.8471
x1=1.0406,x2=0.9870,x3=0.9351,x4=0.8813
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: