1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| int sl_gauss_aff(double a[NMAX][NMAX],double b[NMAX],int n)
{
int i,j,k,l,err;
double pivot,coef,s;
double t[NMAX][N2MAX];
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
t[i][j]=a[i][j];
t[i][n+1]=b[i];
}
err=1;
k=1;
while (err==1 && k<n)
{
pivot=fabs(t[k][k]);
l=k;
while(pivot==0 && l<n)
{
l++;
pivot=fabs(t[l][k]);
}
if(pivot!=0)
{
if(l!=k)
for(j=k;j<=n+1;j++)
{
pivot=t[k][j];
t[k][j]=t[l][j];
t[l][j]=pivot;
}
pivot=t[k][k];
for(i=k+1;i<=n;i++)
{
coef=t[i][k]/pivot;
for(j=1;j<=n+1;j++)
t[i][j] -= coef*t[k][j];
}
printf(" A(%d) b(%d)\n",k+1,k+1);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%12.5e ",t[i][j]);
printf("I %12.5e \n",t[i][n+1]);
}
}
else err=0;
k++;
}
if(t[n][n]==0) err=0;
if(err==1)
{
b[n]=t[n][n+1]/t[n][n];
for(i=n-1;i>=1;i--)
{
s=t[i][n+1];
for(j=i+1;j<=n;j++)
s-=t[i][j]*b[j];
b[i]=s/t[i][i];
}
}
return(err);
} |
Partager