Newton 방법과 가우스 소거법을 사용하여 비선형 연립방정식을 풀려고 하는데요..
아래와 같이 코드를 짜고 컴파일 해보니까
floating point : square number of negative number라는 에러가 나오네요..
루트를 사용한적도 없는데 왜 음수가 나왔다고하는지 ㅡ,.ㅡ;;
꼭 답변 바랍니다.... 꾸벅...
#include <stdio.h>
#define freq 20
void main()
{
float x[4]={1.0, 1.0, 1.0, 1.0};
float J[4][5];
float buffer;
int f, i, j, k;
for(f=1; f<=freq; f++)
{
J[0][4]=(-1.0)*(x[0]+x[1]+x[2]+x[3]-10.0);
J[1][4]=(-1.0)*(x[0]*x[0]+x[1]*x[1]-5.0);
J[2][4]=(-1.0)*(x[0]*x[1]+x[2]*x[3]-14.0);
J[3][4]=(-1.0)*(x[0]*x[2]+x[1]*x[2]*x[2]-21.0);
J[0][0]=1.0; J[0][1]=1.0; J[0][2]=1.0; J[0][3]=1.0;
J[1][0]=2.0*x[0]; J[1][1]=2.0*x[1]; J[1][2]=x[0]; J[1][3]=0.0;
J[2][0]=x[1]; J[2][1]=x[0]; J[2][2]=x[3]; J[2][3]=x[2];
J[3][0]=x[2]; J[3][1]=x[2]*x[2]; J[3][2]=x[0]+2.0*x[1]*x[2]; J[3][3]=0.0;
for(i=0; i<=2; i++)
{
if(J[i][i]==0)
for(j=i+1; j<=3; j++)
{
if(J[j][i]!=0)
{
for(k=0; k<=4; k++)
{
buffer=J[i][k];
J[i][k]=J[j][k];
J[j][k]=buffer;
}
goto section1;
}
}
section1: ;
for(j=0; j<=4; j++)
J[i][j]=J[i][j]/J[i][i];
for(j=i+1; j<=3; j++)
for(k=0; k<=4; k++)
J[j][k]=J[j][k]-J[j][i]*J[i][k];
}
J[3][3]=J[3][3]/J[3][3];
J[3][4]=J[3][4]/J[3][3];
for(i=3; i>=1; i--)
for(j=i-1; j>=0; j--)
for(k=0; k<=4; k++)
J[j][k]=J[j][k]-J[j][j+1]*J[i][k];
for(i=0; i<=3; i++)
x[i]=x[i]+J[i][4];
}
for(i=0; i<=3; i++)
{
for(j=0; j<=4; j++)
printf("%f\t",J[i][j]);
printf("\n");
}
}
|