#include<stdio.h>
#include<math.h>
#include<conio.h>
#define N 3
void Guass(double a[][N+1],double x[])
{
double l[N];
int i,j,k;
l[0]=1.0;
for(i=0;i<N-1;i++)
{
if(fabs(a[i][i])<0.000001)
{
printf("不能求解!/n");
return;
}
for(j=i+1;j<N;j++)
l[j]=a[j][i]/a[i][i];
for(j=i+1;j<N;j++)
for(k=i+1;k<N+1;k++)
a[j][k]=a[j][k]-l[j]*a[i][k];
}
#include<math.h>
#include<conio.h>
#define N 3
void Guass(double a[][N+1],double x[])
{
double l[N];
int i,j,k;
l[0]=1.0;
for(i=0;i<N-1;i++)
{
if(fabs(a[i][i])<0.000001)
{
printf("不能求解!/n");
return;
}
for(j=i+1;j<N;j++)
l[j]=a[j][i]/a[i][i];
for(j=i+1;j<N;j++)
for(k=i+1;k<N+1;k++)
a[j][k]=a[j][k]-l[j]*a[i][k];
}
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];
}
}
void main()
{
int i,j;
double x[N];
double s[N][N+1]={{ 0.101, 2.304, 3.555, 1.183},
{-1.347, 3.712, 4.623, 2.137},
{-2.835, 1.072, 5.643, 3.035}
};
for(i=0;i<N;i++)
{
for(j=0;j<=N;j++)printf("%5.3f ",s[i][j]);
printf("/n");
}
Guass(s,x);
for(i=0;i<N;i++)printf("x[%d]=%5.6f/n",i+1,x[i]);
getch();
}
{
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];
}
}
void main()
{
int i,j;
double x[N];
double s[N][N+1]={{ 0.101, 2.304, 3.555, 1.183},
{-1.347, 3.712, 4.623, 2.137},
{-2.835, 1.072, 5.643, 3.035}
};
for(i=0;i<N;i++)
{
for(j=0;j<=N;j++)printf("%5.3f ",s[i][j]);
printf("/n");
}
Guass(s,x);
for(i=0;i<N;i++)printf("x[%d]=%5.6f/n",i+1,x[i]);
getch();
}
//////////////////////////////////////////////////////////
#include<stdio.h>
#include<math.h>
#include<conio.h>
#define N 3
//Guass列主元素消元法
int Guassl(double **a,double *x,int n)
{
int i,j,k,numl,*h,t;
double *l,max;
l=new double[n];
h=new int[n];
for(i=0;i<n;i++) h[i]=i;//行标
for(i=1;i<n;i++)
{
max=fabs(a[h[i-1]][i-1]);
numl=i-1;
//列元的最大值
for(j=i;j<n;j++)
{
if(fabs(a[h[j]][i-1])>max)
{
numl=h[j];
max=fabs(a[h[j]][i-1]);
}
}
if(max<0.00000000001) return 0;
//交换行号
if(numl>i-1)
{
t=h[i];
h[i]=h[numl];
h[numl]=t;
}
for(j=i;j<n;j++) l[j]=a[h[j]][i-1]/a[h[i-1]][i-1];
for(j=i;j<n;j++)
for(k=i;k<n+1;k++) a[h[j]][k]=a[h[j]][k]-l[j]*a[h[i-1]][k];
}
for(i=n-1;i>=0;i--)#include<math.h>
#include<conio.h>
#define N 3
//Guass列主元素消元法
int Guassl(double **a,double *x,int n)
{
int i,j,k,numl,*h,t;
double *l,max;
l=new double[n];
h=new int[n];
for(i=0;i<n;i++) h[i]=i;//行标
for(i=1;i<n;i++)
{
max=fabs(a[h[i-1]][i-1]);
numl=i-1;
//列元的最大值
for(j=i;j<n;j++)
{
if(fabs(a[h[j]][i-1])>max)
{
numl=h[j];
max=fabs(a[h[j]][i-1]);
}
}
if(max<0.00000000001) return 0;
//交换行号
if(numl>i-1)
{
t=h[i];
h[i]=h[numl];
h[numl]=t;
}
for(j=i;j<n;j++) l[j]=a[h[j]][i-1]/a[h[i-1]][i-1];
for(j=i;j<n;j++)
for(k=i;k<n+1;k++) a[h[j]][k]=a[h[j]][k]-l[j]*a[h[i-1]][k];
}
{
x[h[i]]=a[h[i]][n];
for(j=i+1;j<n;j++) x[h[i]]=x[h[i]]-a[h[i]][j]*x[h[j]];
x[h[i]]=x[h[i]]/a[h[i]][i];
}
//还原x[i]的值
for(i=0;i<n;i++) l[i]=x[h[i]];
for(i=0;i<n;i++) x[i]=l[i];
//删除临时数组变量
delete []l;
delete []h;
return 1;
}
void main()
{
int i,j;
double x[N];
double s[N][N+1]={{2, 8, 2, 14},
{1, 6, -1,13},
{2, -1, 2, 5}
};
double **u;
u=new double *[N];
for(i=0;i<N;i++) u[i]=s[i];
for(i=0;i<N;i++)
{
for(j=0;j<=N;j++)printf("%5.3f ",s[i][j]);
printf("/n");
}
Guassl(u,x,N);
for(i=0;i<N;i++) printf("x[%d]=%5.6f/n",i+1,x[i]);
delete []u;
getch();
}
该博客详细介绍了使用Guass消元法和Guass列主元素消元法解决线性方程组的过程。通过C语言实现的示例代码,展示了如何进行矩阵运算和求解未知数。
38

被折叠的 条评论
为什么被折叠?



