조건 )
1. 직선 1 : 임의의 두 점을 잇는 직선
2. 직선 2 : 함수형태로 주어진 직선
#include <stdio.h>
double f(double x)
{
return 0.5 * x + 2.0;
}
double abs(double x)
{
if(x < 0.0) return -1.0* x;
return x;
}
typedef struct
{
double x;
double y;
} point;
void main()
{
point p1,p2;
point p_div;
double gap_1,gap_2,gap_3;
int counter = 0;
double tole = 0.0001;
p1.x = 8.0;
p1.y = 72.0;
p2.x = 1.0;
p2.y = 2.0;
printf("\n[initial value] p1.x = %.6lf, p2.x = %.6lf\n",p1.x,p2.x);
while(1)
{
counter++;
p_div.x = (p1.x + p2.x) / 2.0;
p_div.y = (p1.y + p2.y) / 2.0;
if( abs(f(p1.x) - f(p2.x) ) < tole )
{
printf("값 찾음.\n");
break;
}
gap_1 = p1.y - f(p1.x);
gap_2 = p_div.y - f(p_div.x);
gap_3 = p2.y - f(p2.x); if(gap_1 * gap_2 < 0.0)
{
p2.x = p_div.x;
p2.y = p_div.y;
}
else if(gap_2 * gap_3 < 0.0)
{
p1.x = p_div.x;
p1.y = p_div.y;
}
else
{
printf("두 점을 잇는 직선과 주어진 직선이 교차하지 않는다.\n");
break;
} printf("\np1.x = %.6lf, p2.x = %.6lf\n",p1.x,p2.x);
if(counter > 100)
{
printf("100회 안에 못 찾음.\n");
break;
}
}
printf("[결과] 교점 x = %.6lf, y = %.6lf\n",
(p1.x + p2.x) / 2.0,(p1.y + p2.y) / 2.0);
return;
}
bisection method를 이용해 100회 시도하며 오차가 0.0001 안쪽으로 들어오면 값을 찾은 것으로 간주한다.
'수치해석'에 해당되는 글 1건
Posted on 2011/10/11 17:23 / Filed Under Coding/C,C++
글 주소 : http://blog.sam-chon.com/blog/14
댓글을 달아 주세요