#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double a[] ={1, 3, 0, -2, -1};
double b[5];
double c[5];
double differential(double x0) // 미분 함수
{
int k;
int n = 3;
c[0] = b[0];
for(k=1; k<=n;k++){ //1 5 10 18 35
c[k] = b[k]+ x0 * c[k-1];
//printf("%d\n",c[k-1]);
}
//printf("========differential===========\n");
return c[3];
}
double synthetic_func(double x0){ // 조립제법 함수
int k;
int n=4;
//double x0 = 2;
b[0] = a[0];
for(k=1; k<=n; k++){ // a = 1, 3, 0, -2, -1
b[k] = a[k]+ x0 * b[k-1]; // b= 1 5 10 18 35
//printf("%d\n",b[k-1]);
c[k] = b[k];
}
//printf("=======synthetic_func============\n");
return b[5];
}
void func(){ // Newton Rahpson
double x0 = 2; // x0는 2
double km = 10; // 반복 횟수 10
double e1=0, e2=0;
double f0, f1;
double x1;
int k =1;
f0 = synthetic_func(x0);// 35 // 조립제법 함수 호출
for(k=1; k<=km; k++){
f1 = differential(x0); // 66 // 미분 함수 호출
x1 = x0-(f0/f1);
f0 = synthetic_func(x1);
if(fabs(x1-x0) < e1)
{
printf("%lf\n", x0);
printf("bbbbbbbbbbbbbbba\n");
break;
}
else if(fabs(f0) < e2)
{
printf("%lf, %lf \n", x1,f0);
printf("cccccccccccca\n");
break;
}
else
{
x0=x1; // x1이 x0에 대입이 안됨
}
printf("k = %d / x_1 = %lf\n", k, x1);
}
}
int main()
{
func();
return 0;
}
이거 .. 미분하는 double differential 함수에 다시 대입이 되면 값이 이상하게 나오는데
여기 미분하는 공식을 코드로 만든거 있나요? 아 짜증나넴 ㅋ 하다가 빡침 ㅋㅋ
뉴턴법을 왜 이렇게 어렵게 코딩하지
쉬운거 있음 알려도!