코드 다 짯는데 왜 이렇게 자꾸 한쪽 값이 고정이 되지.....
계산상으로는 저렇게 고정이 되면 안되는데 Xl의 값이 변하지 않고 그냥 5로 계속 고정됨 ㅠㅠ
#include <stdio.h>
#include <math.h>
long double fun ( long double k) // 주어진 the trajectory of a ball의 주어진 거리에 대한 height식을 fun 함수로 설정
{
long double fun = sqrt((16 * k*k) / ((k - 4)*(k - 4)) + k*k);
return fun ; // fun 함수로 반환
}
void main()
{
FILE *fp=fopen("data.txt", "w" );
int iter = 1 ;
long double R = ( sqrt(5.0) - 1 ) /2 ; // golden ratio값
long double xl = 5; // 초기 lower value
long double xu = 10; // 초기 upper value
long double d = R * ( xu - xl ) ; //golden ratio를 이용한 d 값
long double xopt ;
printf(" iter\t ea\t \tapproximate \n");
fprintf( fp , " iter\t ea\t \tapproximate \n");
printf("──────────────────\n");
while ( iter < 50 )
{
// golden section 구현
long double d = R * ( xu - xl ) ;
long double x1 = xl + d ;
long double x2 = xu - d;
// 반복문을 이용한 golden section 새로운 x값을 구하는 과정
// 교재의 수도코드를 참고 하여 작성
if( fun(x1) > fun(x2) )
{
xopt = x1;
}
else if ( fun(x2) > fun(x1) )
{
xopt = x2;
}
if( fun(x1) > fun(x2) )
{
xl = x2;
x2 = x1;
x1 = xl + d;
}
else if ( fun(x2) > fun(x1) )
{
xu = x1;
x1=x2;
x2 = xu -d ;
}
long double ea = (1-R)*abs((xu-xl)/xopt) * 100 ; // golden section 에서의 상대오차 식
long double es = 0.1 ; // 문제에서 주어진 stopping condition
printf("\n %d\t %f\t %f\n " , iter , ea , xopt );
fprintf(fp ," %d\t %f\t %f\n " , iter , ea , xopt );
if ( abs(ea) < es ) // stopping condition
{
break;
}
iter++;
}
long double gold = xopt ; // 반복문을 빠져나온 값이 golden section 으로 구한 root
printf("──────────────────\n");
fprintf(fp ,"\n\n Gold = %f\n" , xopt );
printf(" Gold = %f\n" , xopt );
}
암산이 안된당..
황금비에 수렴하는ㅈ과정에서 fun x2가 항상 큰거 아님? 조건문에서 콘솔 찍어보셈..
ㄴㄴ 지금 해봤는데 뭔가 이상해; fun함수는 제대로 설정되어있고 , 콘솔찍어서 해봤는데 f(x1)의 값이 f(x2)의 값으로 나와있고 , F(x2)의 값은 어디서 나왔는지 알 수 없는 20.6 으로 나와있어서 계속 같은 조건으로 도는것같아
이거뭐임 ㅜㅜ
내가 지금 술에꼴아서 코드는 읽히는데 배경이되는 수학이 머가리에 안들어옴 fun하고 비교하는건 왜하는거임?
이게 함수 Fx에 대해서 F(x1) > F(x2) 일때는 해야되는게 있고 , 그 반대에는 또 다르게 해야되는게 있어서
F(x)값이 제대로 나와야 하는데 fx값이 이상하게 나와
콘솔도 안찍어보고 어케 이상한지 알음
이게 최종적으로 xu랑 xl수렴하는거 아님? 안에서 대소관계 바뀌면서 스까버린거가튼데
결과값으로 Fx1 Fx2 보이게 뽑아봤는데 이상하게 나옴 수렴하는거아님. Xu Xl사이에서 최적점 찾는 방법임
걍 iter =1 일 때 Fx값부터가 잘못되서 쭉 잘못나옴. 이거만 해결되면 코드는 문제없는데 이거가 해결이안됌
이건 코드가 이상한게 아니라 식을 먼가 이상하게 옮겼음
ㅇㄴㅁㄹ//되서->돼서 [리듬 맞춤법 봇♬]
ㅇㄴㅁㄹ//됌->됨 [리듬 맞춤법 봇♬]