📄 gaos.c
字号:
#include<stdio.h> //高斯消去法列主元
#include<math.h>
Gaussdiedai(n,a,x)
int n;
double *a,*x;
{
int i,j,k,r; //k表示列号,r表示行号
double m;
for(k=0;k<n-1;k++)
{
r=k;
m=fabs(a[k*(n+1)+k]);
for(i=k+1;i<n;i++)
if(fabs(a[i*(n+1)+k])>m) //第k行k列与第k+1行k列的元素比较(从0行开始)
{
r=i;
m=fabs(a[i*(n+1)+k]);
}
if(r>k) //最大元素所在行在之前原最大元素所在行之下,则换行
for(j=k;j<n+1;j++)
{
m=a[k*(n+1)+j];
a[k*(n+1)+j]=a[r*(n+1)+j];
a[r*(n+1)+j]=m;
}
for(i=k+1;i<n;i++) //消元
{
m=a[i*(n+1)+k]/a[k*(n+1)+k];
for(j=k+1;j<n+1;j++)
a[i*(n+1)+j]-=m*a[k*(n+1)+j];
}
}
x[n-1]=a[(n-1)*(n+1)+n]/a[(n-1)*(n+1)+(n-1)];
for(i=n-2;i>=0;i--)
{
m=a[i*(n+1)+n];
for(j=i+1;j<n;j++)
m-=a[i*(n+1)+j]*x[j];
x[i]=m/a[i*(n+1)+i];
}
}
main()
{
double a[3][4]={{-3,2,6,4},{10,-7,0,7},{5,-1,5,6}},x[3];
int i;
Gaussdiedai(3,a,x);
for(i=0;i<3;i++)
printf("%f\n",x[i]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -