列主元高斯消元法_C语言

本文是用C语言写的列主元高斯消元法,在写之前也是百度了一下 看了好多感觉不是很喜欢,就根据自己的想法写了这个。

不知有没有什么漏洞和瑕疵,望大家指正。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>	
int main()
{
	/*--获取并显示增广矩阵--*/
	int n;
	printf(" Please enter the dimension of coefficent matrix n:\n");
	scanf("%d",&n);
	printf("the dimension is :%d\n",n);
	printf("Please enter the augmented matrix A=[a|b]:\n");
	double A[n][n+1],x[n];  
	int i,j;
	for(i=0;i<n;i++)
	for(j=0;j<=n;j++)
	scanf("%lf",&A[i][j]);
	printf("The augmented matrix is:\n");
	for(i=0;i<n;i++)
      {
	    for(j=0;j<n+1;j++)
	    {
	    printf("%6.3lf  ",A[i][j]);
	     }
	    printf("\n");   //这部分是对的 
      } 
    /*--进行列主元高斯消元法计算--*/
    int k,row;       
    double temp,m,max;  
    for(k=1;k<=n;k++)
    { 
        if (A[k-1][k-1]==0)
        {
        	printf("No unique solution!!\n");
        	exit (1);
		}
        max=fabs(A[k-1][k-1]);
        row=k-1;
    	for(i=k;i<n;i++)   //找出主元所对应的行号 ,并换行 
    	{
    	 if (fabs(A[i][k-1])>=max)
    	    {
	     max=fabs(A[i][k-1]);
    	     row=i;
    	    }
		}
		for(j=k-1;j<=n;j++)
    	{
		 temp=A[k-1][j];
		 A[k-1][j]=A[row][j];
		 A[row][j]=temp;
	    }
		for(i=k;i<n;i++)
	    {
	    	m=A[i][k-1]/A[k-1][k-1];
	        for(j=k-1;j<=n;j++)
	         A[i][j]=A[i][j]-A[k-1][j]*m;
		}
    	
	}
	/*显示计算后的矩阵*/
	printf("消元后的对角矩阵为:\n");
	for(i=0;i<n;i++)
	{
	 for(j=0;j<=n;j++)
	     printf("%6.3lf ",A[i][j]);
	     printf("\n"); 
	}
        /*--计算解向量并显示--*/
	double sum;                //计算解x[n] 
	x[n-1]=A[n-1][n]/A[n-1][n-1];
	sum=x[n-1]*A[n-2][n-1];
	for(i=n-2;i>=0;i--)
	{
	x[i]=(A[i][n]-sum)/A[i][i];
	sum=sum+x[i]*A[i-1][i];
	} 
	printf("The solution is :\n");  //这部分是对的       //显示解 x[n]
	for(i=1;i<=n;i++)
	printf("x[%d]=%6.3lf\n",i,x[i-1]);
	return 0;	
}

执行结果如下

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值