掃出法で連立一次方程式の解を求める
掃出法で連立一次方程式の解を求めるプログラムを作ってみたのですが、ポインタと浮動小数点のエラーが出てしまい、実行できません。どこが間違っているのかさえ分からず困っています。訂正箇所を教えてください。宜しくお願い致します。
#include<stdio.h>
#include<math.h>
#include <float.h>
#define N 3
#define EPSILON 1.0E-5
#define TRUE 1
#define FALSE 0
void sweep(int *flag);
void swap(float *wk1,float *wk2);
float a[N][N]={{ 2, 6, 3},
{-1, 5,-2},
{-2,-1, 6}};
float x[N],b[N]={6,3,14};
int flag;
void main()
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%10.4f",a[i][j]);
printf("%10.4f\n",b[i]);
}
flag=TRUE;
sweep(&flag);
if(flag==TRUE)
{
printf("連立方程式の解\n");
for(i=0;i=N;i++)
printf("x[%d]=%10.4f\n",i+1,x[i]);
}
else
printf("解なし\n");
}
void swap(float *wk1,float *wk2)
{
float w;
w=*wk1;
*wk1=*wk2;
*wk2=w;
}
void sweep(int *flag)
{
int i,j,k,ik;
float ak,aik;
for(k=0;k<N;k++)
{
ak=a[k][k];
if(fabs(ak)<=EPSILON)
{
ik=k+1;
while((ik<N)&&(fabs(a[ik][k])<EPSILON))
ik++;
if(ik<N)
{
for(j=k;j<N;j++)
swap(&a[k][j],&a[ik][j]);
swap(b[k],b[ik]);
ak=a[k][k];
}
else
{
printf("ピボットが零です\n");
*flag=FALSE;
goto end;
}
}
for(j=k;j<N;j++)
a[k][j]=a[k][j]/ak;
b[k]=b[k]/ak;
for(i=0;i<N;i++)
{
if(i!=k)
{
aik=a[i][k];
for(j=k;j<N;j++)
a[k][j]=a[i][j]-aik*a[k][j];
b[i]=b[i]-aik*b[k];
}
}
for(k=0;k<N;k++)
x[k]=b[k];
end:;
}
}
お礼
ありがとう御座います。 取りあえず、フローチャートを書いてみます。