회사에서 사용하는 MATLAB에 설치된 툴박스를 확인해 보니 Symbolic Math Toolbox 가 없어서 이에 대한 대체 프로그램으로 octave 를 사용하게 되었습니다. 물론 아래 포스팅에서 얘기했던 Python 의 sympy 와 같은 라이브러리를 사용해도 됩니다.
http://iamaman.tistory.com/1460
octave 는 아래 주소에서 다운로드 가능합니다. 사용하시는 운영체제에 맞는 설치 파일을 다운로드 해서 설치하시면 되겠습니다.
https://www.gnu.org/software/octave/download.html
octave command window 에서 아래와 같이 타이핑 하면 symbolic package 가 설치 됩니다.
pkg install -forge symbolic
설치 후에는 ver 라고 타이핑 해보면 아래와 같이 symbolic package 가 설치된것을 확인 할 수 있습니다.
symbolic package 를 사용할때는 아래와 같이 load 를 하고 사용하면 됩니다.
pkg load symbolic;
간단한 예제로 아래 포스팅에서 소개했던 원의 방정식에 대한 자코비안(jacobian) 매트릭스를 계산하는 방법에 대해 소개해 보려 합니다.
http://iamaman.tistory.com/2759
syms X Y % X Y symbolic 으로 정의
x = sym('x', [3,1]) % x = [a, b, r] 에 대한 symbolic 변수 정의
f= sqrt((X-x(1))^2+(Y-x(2))^2) - x(3) % 원의 방정식
jF = simplify(jacobian(f, [x(1), x(2), x(3)])) % jacobian 계산 및 simplify
결과는 아래와 같습니다.
nonlinear regression 등을 할때 jacobian 등을 많이 활용하게 되는데 octave 에 symbolic package 가 있어서 수식 계산할때 너무 편리한것 같네요.
이렇게 만들어진 수식은 아래 포스팅에서 소개했던 matlabFunction 함수를 사용하면 코드로도 변경이 됩니다. 그런데 MATLAB 에서는 다양한 옵션을 통해 코드 생성 결과를 다르게 할 수 있었지만 octave 에서는 function handle 의 형태로 나오는 것을 확인 할 수 있었습니다.
http://iamaman.tistory.com/202
jFFunc = matlabFunction(jF)
jFFunc =
@(X, Y, x11, x21) [(-X + x11) ./ sqrt((X - x11) .^ 2 + (Y - x21) .^ 2), (-Y + x21) ./ sqrt((X - x11) .^ 2 + (Y - x21) .^ 2), -1]
위 jacobian matrix 는 가장 마지막에 있는 -1 값이 고정 길이라 X, Y 가 벡터 입력인 경우 정상적으로 동작하지 않습니다. 따라서 아래와 같이 약간 수정해서 사용하면 되겠습니다.
jFFunc = @(X, Y, x11, x21) [(-X + x11) ./ sqrt((X - x11) .^ 2 + (Y - x21) .^ 2), (-Y + x21) ./ sqrt((X - x11) .^ 2 + (Y - x21) .^ 2), -ones(size(X))];
'programming language > Octave' 카테고리의 다른 글
OCTAVE Command Line argument 사용 방법 (0) | 2019.08.03 |
---|---|
Windows OCTAVE 3.8 GUI 환경 (9) | 2014.09.05 |
Cygwin Octave runlength (0) | 2014.06.23 |
Octave 에서 Erfc, Erf, Q-Function 사용하기 (0) | 2014.06.15 |
Cygwin Octave package 설치 방법 (2) | 2013.09.14 |
GNU Octave doc 명령어 안 될 때 (0) | 2013.09.14 |
Windows 에서 Octave 사용하기 (0) | 2013.09.14 |
Cygwin Octave plot() 안 될 때~ (0) | 2013.09.04 |
댓글