高斯消元法

来源:互联网 发布:.xyz域名可以在哪备案 编辑:程序博客网 时间:2024/05/16 23:38
#include <stdio.h>
#define N 5


void main()
{
int n ; 
float aug[N][N+1];
int i,j;
printf("请输入矩阵的阶数:  \n");
scanf("%d",&n);
printf("请输入增广矩阵:  \n");
for ( i=0;  i<n ; i++)
for ( j=0; j<n+1; j++)
scanf("%f",&aug[i][j]);
int p,q;
for(j=0;j<n-1;j++)      
{   //高斯矩阵G
float G[N][N];
float I[N][N];
for ( i=0;  i<n ; i++)
   for (  p=0; p<n; p++)
{
G[i][p] = 0;
if(i==p)
    I[i][p] = 1;
else
I[i][p] = 0;
}


for (i=j+1;i<n;i++)
{
G[i][j] = aug[i][j];
}
for ( i=0;  i<n ; i++)
   for (  p=0; p<n; p++)
G[i][p] = I[i][p] - G[i][p]/aug[j][j];
//开始消元,化阶梯矩阵
        for( q=0;q<n;q++)
    for ( i=0;  i<n+1 ; i++)
{
    float S = 0.0;
       for ( p=0; p<n; p++)
   S = S + G[q][p]*aug[p][i];
    aug[q][i] = S;
}
}
//回代
float x[N];
x[n-1] = aug[n-1][n]/aug[n-1][n-1];
for (i = n-2 ; i>=0 ; i--)
{
float S = 0.0;
for (j=i+1;j<n;j++)
{
S =S +aug[i][j]*x[j];
}
x[i] = (aug[i][n]-S)/aug[i][i];
}
for(i = 0;i<n;i++)
printf("%f\t",x[i]);
printf("\n");
}

0 0
原创粉丝点击