📄 gauss .c
字号:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
int rgauss(a,b,n,x)
int n;
double a[],b[],x[];
{int l,k,i,j,p;
double d,t;
l=1; /*置非奇异标志*/
for(k=0;k<=n-2;k++)
{d=0.0;
d=a[k*n+k];
for(j=k+1;j<=n-1;j++) /*归一化*/
{p=k*n+j;a[p]=a[p]/d;}
b[k]=b[k]/d;
for(i=k+1;i<=n-1;i++) /*消元*/
{for(j=k+1;j<=n-1;j++)
{p=i*n+j;
a[p]=a[p]-a[i*n+k]*a[k*n+j];
}
b[i]=b[i]-a[i*n+k]*b[k];
}
}
d=a[(n-1)*n+n-1];
if(fabs(d)+1.0==1.0) /*奇异返回*/
{printf("fail\n");
return(0);
}
x[n-1]=b[n-1]/d; /*计算解向量的最后一个分量*/
for(i=n-2;i>=0;i--)
{t=0.0;
for(j=i+1;j<=n-1;j++) /*回代*/
t=t+a[i*n+j]*x[j];
x[i]=b[i]-t;
}
return(1); /*返回正常标志*/
}
/**************************************************/
main()
{int i;
static double a[4][4]=
{ {0.94455,-2.81716,-2.25806,-2.89224},
{-6.20716,-3.85174,9.77783,3.49712},
{-7.56157,-4.03668,9.38475,-8.64498},
{-8.94467,-5.31114,-0.98666,-4.10932} };
static double x[4], b[4]={1.51158,-6.46352,1.23264,0.61068};
i=rgauss(a,b,4,x);
if(i!=0)
for(i=0;i<=3;i++)
printf("x(%d)=%lf\n",i,x[i]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -