計算結果の数値を正常に直したいのです
問題があれば指摘お願いします
ちなみに、int PIVOTとint GAUSSは、予め課題と一緒に用意されたプログラムです
#include <stdio.h>
#include <math.h>
#define EPS 1.0e-5
#define N 2 /*配列の行数と列数の-1*/
#define n 5 /*入力するデータの数*/
int main(void){
int i,k;
double x[n],y[n];
double sum_x=0,sum_x2=0,sum_x3=0,sum_x4=0,sum_y=0,sum_xy=0,sum_x2y=0;
double ma[N][N],mb[N],mx[N];
for(i=0;i<n;i++){
printf("x座標を入力[%d]:",i);
scanf("%lf",&x[i]);
printf("y座標を入力[%d]:",i);
scanf("%lf",&y[i]);
}
for(k=0;k<n;k++){
sum_x+=x[n];
ma[0][1]=ma[1][0]=sum_x;
sum_x2+=pow(x[n],2);
ma[0][2]=ma[2][0]=sum_x2;
sum_x3+=pow(x[n],3);
ma[1][2]=ma[2][1]=sum_x3;
sum_x4+=pow(x[n],4);
ma[2][2]=sum_x4;
sum_y=y[n];
mb[0]=sum_y;
sum_xy+=x[n]*y[n];
mb[1]=sum_xy;
sum_x2y+=pow(x[n],2)*y[n];
mb[2]=sum_x2y;
}
printf("f(x)=%g+%gx+%gx^2",mx[0],mx[1],mx[2]);
return 0;
}
int PIVOT(int *num,int nr,int k,double ma[])
/*nr:行数 ma:配列ma mb:配列mb mx:配列mx*/
{
int i;
double aa,bb;
*num=k;
aa=fabs(ma[nr*k+k]);
for(i=k+1;i<nr;i++)
{
if(fabs(ma[nr*i+k])>aa)
{
*num=i;
aa=fabs(ma[nr*i+k]);
}
}
if(fabs(aa)<=EPS) return (1);
if(*num==k) return (0);
for(i=k;i<nr;i++)
{
bb=ma[nr*k+i];
ma[nr*k+i]=ma[nr*(*num)+i];
ma[nr*(*num)+i]=bb;
}
return 0;
}
int GAUSS(int nr,double ma[],double mb[],double mx[])
{
int i,j,k;
int num; /*交換行番号*/
double cc; /*置換変数*/
for(k=0;k<nr-1;k++)
{
if(PIVOT(&num,nr,k,ma)!=0) return(1);
if(num!=k)
{
cc=mb[num];mb[num]=mb[k];mb[k]=cc;
}
for(i=k+1;i<nr;i++)
{
cc=ma[nr*i+k]/ma[nr*k+k];
for(j=k+1;j<nr;i++)
ma[nr*i+j]=ma[nr*i+j]-cc*ma[nr*k+j];
mb[i]=mb[i]-cc*mb[k];
}
}
for(k=nr-1;k>=0;k--)
{
if(fabs(ma[nr*k+k])<=EPS) return(1);
cc=0.0;
for(j=k+1;j<nr;j++)
cc+=ma[nr*k+j]*mx[j];
mx[k]=(mb[k]-cc)/ma[nr*k+k];
}
return 0;
}
x={1.0,2.0,3.0,4.0,5.0}
y={7.987,2.986,1.986,2.224,5.678}
を入力した場合
f(x)=14.86+8.3157x+1.2963x^2 ・・・と表示されるはずですが
f(x)=6.37431e-314+9.88131e-323+1^2 ・・・と表示してしまいます