오늘은 아래 포스팅의 Newton's Method 에 대한 연장으로 다차원 Newton's Method 에 대해 소개해 보려 합니다.
http://iamaman.tistory.com/156
일단 오늘 포스팅에서 참조한 코드는 아래 주소와 같습니다.
http://people.whitman.edu/~hundledr/courses/M467/MultiNewton.pdf
다음과 같은 수식에 대해 Newton's Method 를 사용하여 해를 구해 보도록 하죠~
일단 MATLAB 의 solve() 를 사용하여 해를 구해 보면 ~
format long
syms x1 x2 real
S = x1^2+x2^2-x1==0;
S1 = x1^2-x2^2-x2==0;
[x1,x2]=solve(S,S1);
x1=double(x1)
x2=double(x2)
다음과 같이 다음과 같이 두개의 해가 나오는 것을 확인 할 수 있습니다.
x1 =
0
0.771844506346038
x2 =
0
0.419643377607081
(0, 0) 이야 눈으로 봐도 알 수 있는 거고 ~ (0.771844506346038, 0.419643377607081) 를 구하는 게 문제 겠죠~
위 링크의 코드를 참조하여 다음과 같이 multinewton.m 파일을 하나 만듭니다. multinewton() 함수가 newton method 를 실행하는 함수이고~ myfunction() 함수가 풀어야 할 수식에 대한 정의 입니다. 편의상 두 함수는 하나의 파일에 정의 했습니다.
function x=multinewton(x,NumIters)
[y,dy]=myfunction(x);
for j=1:NumIters
s=dy\y;
x=x-s;
[y,dy]=myfunction(x);
end
function [y, dy]=myfunction(x)
n=length(x);
y=zeros(size(x)); %Not necessary for a small vector
dy=zeros(n,n); %Not necessary for a small matrix
y(1)=x(1)^2+x(2)^2-x(1);
y(2)=x(1)^2-x(2)^2-x(2);
dy(1,1)=2*x(1)-1; % y(1) 을 x(1) 으로 미분
dy(1,2)=2*x(2); % y(1) 을 x(2) 으로 미분
dy(2,1)=2*x(1); % y(2) 을 x(1) 으로 미분
dy(2,2)=-2*x(2)-1; % y(2) 을 x(2) 으로 미분
다음으로 위 함수를 사용하여 newton method 를 실행하기 위해 multinewtonSolve.m 파일을 하나 만듭니다.
format long
x=[0.7;0.5]; % 초기값
y=multinewton(x, 7) % 두 번째 인자는 실행 횟수
물론 파일로 만들지 않고 그냥 Command Windows 에서 실행해도 됩니다.
위에서 만든 multinewtonSolve.m 파일을 실행하면~ 다음과 같이 해가 나오는 것을 확인 할 수있으며~ 위에서 solve() 함수를 사용해서 구한 결과와 같다는 것을 확인 할 수 있습니다.
>> multinewtonSolve
y =
0.771844506346038
0.419643377607081
이번 포스팅에서는 2개의 변수에 대한 Newton Method 에 대해 소개했는데~ 조금만 응용하면 훨씬 더 큰 차원에 대해서도 풀이가 가능할 겁니다.
전체 파일 첨부합니다. 실행해 보시길~
'programming language > MATLAB' 카테고리의 다른 글
MATLAB Convolution index 계산 (2) | 2015.10.16 |
---|---|
MATLAB strjoin 함수를 사용한 string 붙이기 (0) | 2015.10.12 |
MathJax 를 활용한 MATLAB 수식 입력 (0) | 2015.10.08 |
MATLAB 에서 MinGW-w64 Compiler 사용하기 (0) | 2015.10.07 |
MATLAB 64 QAM BER Simulation (0) | 2015.08.04 |
MATLAB dbtype 을 사용한 파일 내용과 라인 넘버 확인 (0) | 2015.07.21 |
MATLAB Python 실행 (0) | 2015.07.20 |
MATLAB stateflow 현재 차트의 data 다 찾기 (0) | 2015.07.16 |
댓글