一、高斯消元法
程序:
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define number 40 /*宏定义(若线性方程组的维数大可以把number定义的值更大些)*/
#define Esc 0x1b
#define Enter 0x0d
float A[number][number+1] ,ark;
int f,n;
change(int r,int k);
float mymax(int m);
message();
main()
{
float x[number]; /*定义数组X[]用于储存方程组的解*/
int r,k,i,j;
char celect;
printf("\n\n用Gauss列主元消元法解线性方程组");
printf("\n\n1.开始解方程组请按Enter.");
printf("\n\n2.退出程式请按Esc.");
celect=getch();
if(celect==Esc)
exit(0);
printf("\n\n 请输入方程组的维数:n=");
scanf("%d",&n);
printf(" \n\n现在输入方程组系数矩阵A和向量b:");
for(i=1;i<=n;i++)
{
printf("\n\n请输入a%d1--a%d%d系数和向量b%d:",i,i,n,i);
/*把线性方程的系数复于数组中*/
for(j=1;j<=n+1;j++)
scanf("%f",&A[i][j]);
}
for(k=1;k<=n-1;k++)
{
ark=mymax(k);
if(ark==0) /*判断线性方程组是否合法*/
{
printf("\n\n此方程组无解!");message();
}
else if(f!=k)
change(f,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
/*此过程是对数组进行初等行变换*/
}
x[n]=A[n][n+1]/A[n][n]; /*先求出最后一个未知数的解*/
for( k=n-1;k>=1;k--)
{
float p1=0;
for(j=k+1;j<=n;j++)
{