이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date |
2011/04/23 23:08:55 |
Name |
정경호 |
Subject |
매틀랩 질문입니다 |
% Newton-Raphson Method
iter=1; % iteration 1부터 시작
xr=0; % xo=0일때
b=1; % b=1일때
x=-0.652895758; % b=1일때의 root
xrold=0; % xr old값 지정
es=10^-8; % 허용오차
f=x+exp(-b*x^2)*cos(x); % equation
fprintf('Newton-Raphson Method(xo=0, b=1)\n'); % x0=0, b=1일때 Newton-Raphson Method 해석
fprintf('Iteration\t xr\t xrold\t fxr\t dfxr\t ea\t et\n')
% print할 항목 출력
while iter<=30 % iteration 30회로 제한
fxr(iter)=xr+exp(-b*(xr)^2)*cos(xr); % f(xr)값 계산
dfxr(iter)=1-exp(-b*(xr)^2)*(2*b*xr*cos(xr)+sin(xr)); % f'(xr)값 계산
xrold=xr; % xr old값을 xr값으로 지정
xr=xr-(fxr(iter)/dfxr(iter)); % xr값 계산
et(iter)=abs((x-xr)/x); % true error 계산
ea(iter)=abs((xr-xrold)/xr); % Approximated error 계산
fprintf('%f\t%f\t%f\t%f\t%f\t%f\t%f\n',iter,xr,xrold,fxr(iter),dfxr(iter),ea(iter),et(iter));
% 결과값 출력
if ea(iter)<es % Approximated error가 허용오차보다 작을때
break % 중단
end
iter=iter+1; % iteration수 증가
end
while iter2<=30 % iteration 30회로 제한
fxr2(iter2)=xr2+exp(-b*(xr2)^2)*cos(xr2); % f(xr)값 계산
dfxr2(iter2)=1-exp(-b*(xr2)^2)*(2*b*xr2*cos(xr2)+sin(xr2)); % f'(xr)값 계산
xrold2=xr2; % xr old값을 xr값으로 지정
xr2=xr2-(fxr2(iter2)/dfxr2(iter2)); % xr값 계산
et2(iter2)=abs((x-xr2)/x); % true error 계산
ea2(iter2)=abs((xr2-xrold2)/xr2); % Approximated error 계산
fprintf('%f\t%f\t%f\t%f\t%f\t%f\t%f\n',iter2,xr2,xrold2,fxr2(iter2),dfxr2(iter2),ea2(iter2),et2(iter2));
% 결과값 출력
if ea2(iter2)<es % Approximated error가 허용오차보다 작을때
break % 중단
end
iter2=iter2+1; % iteration수 증가
end
Newton-Raphson method를 이용해서 f=x+exp(-b*x^2)*cos(x)의 해를 구하는 코드입니다
여기서 근은 x=-0.652895758 이것인데 돌려보면 xr이 -0.5884에서 수렴을해버립니다..ㅠㅠ
위의 코드는 b=1일때인데 b=10, 25일때의 코드는 계산기의 Newton-Raphson method와 같은 값이 나오는데
이 두개만 값이 다르게 나오네요 ㅠㅠㅠ
친구랑 계속 잡고있어도 답이안나옵니다 ㅠㅠ
어디에 문제가 있는걸까요?
|
통합규정 1.3 이용안내 인용
"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
|