以下是三种C语言求解线性方程组的方法:
1.一般的高斯消元解法(完整代码在小节最后)
```c
#include <stdio.h>
#include <stdlib.h>
#define N 3
int main()
{
float a[N][N+1]={{2,1,-1,8},{-3,-1,2,-11},{-2,1,2,-3}}; // 系数矩阵增广矩阵
int i,j,k;
float m;
for(i=0;i<N;i++) // 消元过程
{
for(j=i+1;j<N;j++)
{
m=a[j][i]/a[i][i];
for(k=i;k<N+1;k++)
{
a[j][k]=a[j][k]-m*a[i][k];
}
}
}
float x[N]; // 回带过程
for(i=N-1;i>=0;i--)
{
x[i]=a[i][N];
for(j=i+1;j<N;j++)
{
x[i]=x[i]-a[i][j]*x[j];
}
x[i]=x[i]/a[i][i];
}
for(i=0;i<N;i++) // 输出结果
{
printf("x%d=%f\n",i+1,x[i]);
}
return 0;
}
```
2.Cholesky法求正定对称矩阵的线性方程组(完整代码在小结最后)
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 3
int main()
{
float a[N][N]={{4,-2,2},{-2,2,-4},{2,-4,11}}; // 系数矩阵
float b[N]={6,-8,27}; // 常数矩阵
float l[N][N]={0}; // 下三角矩阵
float y[N]={0}; // 中间向量
float x[N]={0}; // 解向量
int i,j,k;
for(i=0;i<N;i++) // Cholesky分解
{
for(j=0;j<=i;j++)
{
float s=0;
for(k=0;k<j;k++)
{
s+=l[i][k]*l[j][k];
}
if(i==j)
{
l[i][j]=sqrt(a[i][i]-s);
}
else
{
l[i][j]=(a[i][j]-s)/l[j][j];
}
}
}
for(i=0;i<N;i++) // Ly=b
{
float s=0;
for(j=0;j<i;j++)
{
s+=l[i][j]*y[j];
}
y[i]=(b[i]-s)/l[i][i];
}
for(i=N-1;i>=0;i--) // L'x=y
{
float s=0;
for(j=i+1;j<N;j++)
{
s+=l[j][i]*x[j];
}
x[i]=(y[i]-s)/l[i][i];
}
for(i=0;i<N;i++) // 输出结果
{
printf("x%d=%f\n",i+1,x[i]);
}
return 0;
}
```
3.追赶法解线性方程组(待更新)