用高斯消去法求线性方程组,怎样用c语言编写?
发布网友
发布时间:2022-05-23 23:00
我来回答
共1个回答
热心网友
时间:2024-03-09 21:41
#include<conio.h>
#include<math.h>
#include <stdio.h>
#include <assert.h>
#define A(j,k) (*(A+(n+1)*j+k))
#define B(j,k) (*(B+n*j+k)) int GS(double *A, double *result , int n) //编写高斯消去法求线性法
{ double t;
int i,j,k,tj;
for(k=0;k<n-1;k++)
{t=A(k,k);<br> tj=k;<br> for(j=k+1;j<n;j++) //A(j,k)=*(*(A+j)+k)<br> if(fabs(A(j,k))>fabs(t)){t=A(j,k);tj=j;}
if(tj!=k)
{ for(i=0;i<=n;i++)
{ t=A(tj,i);A(tj,i)=A(k,i);A(k,i)=t;}
}
for(i=k+1;i<n;i++)
{ if(A(k,k)==0) return 0;
t=A(i,k)/A(k,k);//t=i/k±�0�6
for(j=k;j<n;j++) A(i,j)-=t*A(k,j);
A(i,n)-=t*A(k,n);
}
}
for(i=n-1;i>=0;i--)
{ t=A(i,n);
for(j=n-1;j>i;j--) t-=A(i,j)*A(j,n);//X[j]=A(j,n);
if(A(i,i)==0) return 0;
A(i,n)=t/A(i,i);// X[i]=A(i,n);
}
for(i=0;i<n;i++)
result[i]=A(i,n); return 1;
}
main()
{ double *A,*result;
int i,k,n,r;
double rd;
printf("Input N: "); //输入有几个方程
scanf("%d",&n);
A=new double[n*(n+1)];
result=new double[n];
assert(A&&result);
printf("Input Matrix[%d][%d] In Row Order\n",n,n+1);
for(k=0;k<n*(n+1);k++) //依次输入每个方程的左边的系数和右边的值
scanf("%lf",A+k);
r=GS(A, result, n);
if(r==0) printf("无解或无穷解\n");
else for(i=0;i<n;i++) printf("X%d=%.15g\n",i,result[i]);
delete[] A;
delete[] result;
getch();
}