수치해석 2장 숙제 - 방정식의 근
- 최초 등록일
- 2011.07.24
- 최종 저작일
- 2011.03
- 20페이지/
MS 워드
- 가격 1,500원
![할인쿠폰받기](/images/v4/document/ico_det_coupon.gif)
소개글
<방정식의 근> 숙제입니다. 문제가 쓰여있진 않지만 자세한 풀이와 코드가 쓰여있습니다.
목차
1~5번 문항
본문내용
►문제 1번rnrn h는 1.4 m 와 1.5 m 사이의 값이다.
rnrnh에 대한 함수를 만들어야 증가탐색법을 쓸 수 있으므로 v(t)=√2gh×tanh(t/2L √2gh)에서 v(t)를 우변으로 넘겨서 f(h)=√2gh×tanh(t/2L √2gh)-v(t)로 만들었다.
다음으로 초기값(x1) 0, ∆h의 값을 0.1로 잡고 증가탐색법을 실시하였다.
그러면 두번째값(x2)은 (x1+∆h)가 된다.
f(x1)×f(x2)>0 이면 x2를 x1으로 잡고 탐색을 계속하는데 f(x1)×f(x2)<0 이면 x1과 x2사이에 해가 있다는 것이므로 끝낸다.
rnrn rnrn#include <stdio.h>rn#include <math.h>rn#define MAX 20rnrndouble about(double x1);rndouble Fh(double h);rnrnvoid main(void)rn{rn double dx=0.1, x1=0, x2;rn x1=about(x1);rn x2=x1+dx;rn}rnrndouble about(double x1)rn{rnrn int j=0;rn double x2, dx=0.1;rnrn for(j=1;j<=MAX;j++)rn {rn x2=x1+dx;rn printf("x1=%lf, x2=%lf, dx=%lf n", x1, x2, dx);rn if (Fh(x2)*Fh(x1)<0)rn {rn dx=dx/10;rn }rn if (Fh(x2)*Fh(x1)>0)rn {rn x1=x2;rn }rn if (dx==0.01)rn {rn break;rn }rn }rn return x1;rn}rnrndouble Fh(double h)rn{ rn double f;rnrn f = (double)pow(2 * (9.81) * h, 0.5) * (double)tanh(3 * (double)pow(2 * (9.81) * h, 0.5)/10) - 5;rnrn return(f);rn}rnrn여기서 dx를 0.1로 잡았지만 만약에 dx를 더 줄여서 0.01이나 0.001로 하였다면 더 정확한 해의 근방을 구할 수 있을 것이다.
다만, 연산반복을 더 많이 해야하므로 마무리오차는 커질 수 있다.
rnrnrn h는 1.489577 m이다. (유효숫자 4자리까지 정확히 구했을 때)rnrn(a)에서 해의 근방을 구했으니 선형보간법으로 정확한 해를 구할 수 있다.
x3=x2- (x2-x1)/(f2-f1) f2 라는 식을 통해 x3를 구하고 f1×f3>0 이면 x3는 x1으로 f3는 f1으로 바꿔서 다시 구한다. 그게 아니라면 x3는 x2으로 f3는 f2로 바꾸고 끝낸다.
rnrn#include <stdio.h>rn#include <math.h>rn#define MAX 20rnrndouble about(double x1);rndouble Fh(double h);rndouble lin(double x1, double x2);rnrnrnvoid main(void)rn{rn double dx=0.1, x1=0, x2, x3;rn x1=about(x1);rn x2=x1+dx;rn x3=lin(x1,x2);rn}rnrndouble about(double x1)rn{rnrn int j=0;rn double x2, dx=0.1;rnrn for(j=1;j<=MAX;j++)
참고 자료
없음