'maxima'에 해당하는 글 1건

http://sci4um.com/about7143-asc.html


Maxima

양놈들이 만든 프로그램이라 양놈언어로 이걸 봐야한다는게 좀 화나지만

어쩌겠어 필요하면 봐야지.


나중에 시간날때(언제?) 찬찬히 우리말로 번역해서 써볼까도 고민중이지만

일단은 나한테 필요할 만큼만 이해해서 쓰기로 하지.


는 그냥 직접 짜보기로 결정. 1단계는 위 게시물에서 복붙하여 사용해보았음.

저거말고 나머지는 내가 고민해본건데 왠지 쓰잘데기 없을듯하다 ..




1단계

맥시마는 모든 삼각함수의 계산을 라디안을 기본단위(?)로 사용한다.

따라서 디그리를 쓰는 전력공학 등에서는 아아주 빡치는 바,

삼각함수 안에 디그리를 넣을 수 있도록 postfix를 정의한다.

(도 표시는 숫자 뒤에 붙으니까 보기 편하라고 ㅇㅇ 맘에안들면 infix로 정의하고 infix형태로 쓰셈요)


postfix("@");

x@ := x * %pi / 180;


첫째줄은 내가 쓸 연산자 이름을 정하고 둘째줄은 그 연산자를 쓰면 어떤 연산을 수행할지 정의.

맥시마도 뭔가 프로그래밍언어 비슷하게 돌아가는 놈이라 세미콜론 빠뜨리면 안되니 주의.


ex) cos(60@) 입력하면 1/2 출력.



2단계

polar 형태를 rectangular 형태로 바꾸는 것부터 정의. 얘는 여기서 끝.

이 밑으로 모든 x와 y 자리에는 숫자만 들어가면 됨.


infix("<<");

x<<y := x*cos(y@) + %i *x*sin(y@);


굳이 설명안해도 알겠지만 x는 크기, y는 디그리로 표현한 위상각.

이거 직접 사용할때는 x<<y,numer; 이런식으로 타이핑하지 않으면 삼각함수가 제대로 계산안된 결과 나옴.

그리고 출력결과도 허수가 먼저 나옴 ㅡㅡ 이건 쫌 시르다.


+

저건 레알 계산하는거고, 내가 보기 편한대로 화면에 띄우기만 한다면


infix("<<");

x<<y := sconcat(x*cos(y@), " + j", x*sin(y@));


이렇게 해도되는거 같긴 하다.

sconcat 함수가 화면에 그대로 출력해주는, 이를테면 C++의 cout과 같은 역할을 하는듯.

수식을 쓰면 연산 결과가 출력되고 ','로 항목 구분하고 " " 안에 들어가 있는 내용은 연산 없이 문자열로 출력.


ex) 1<<0 입력하면 크기가 1이고 위상각이 0도이므로 1 + j0 출력


+

위의 식이나 아래 식이나 계산 결과가 흠 손으로 직접 이것저것한거랑 다르다 여튼.

뭐야 그럼 이 아래로 싹다 망인가?


렉탱귤러에서 폴라폼 갈때랑 폴라폼에서 렉탱귤러 갈때랑 달라짐. ㅡㅡ




3단계

여기서부터 ractangular를 polar로 바꾸는거.

rectagular 형태(x+jy)를 페이져로 바꿀 때 일단 페이져 크기를 구하기 위해

infix"|" 정의 (뭐 문자는 암거나 해요. 전 \ 시프트키 눌러서 나오는거 사용 ㅇㅇ)


infix("|");

x|y:= (x^2 + y^2)^0.5;


인픽스로 정의하는 이유는 당연히 숫자 구별을 위하여 ....


ex) 3|4 입력하면 5.0 출력




4단계

rectangular의 실수부와 페이저 크기로 위상각 구하기


infix("<a");

x<ay:=acos(x/y)/%pi*180;


요런식으로도 정의가 되는구만. 신기하네.

여튼 페이져 형태 바꾸는 방향성을 고려해서 쓴 거니까 x,y 잘 구별해서 쓰세요 ㅇㅇ


ex) 3<a5 입력하면 53.130.. 출력




5단계

rectangular 형태에서 polar 형태로 가는거 최종 수합


infix("+j");

x+jy := sconcat(x|y, " << ", x<a(x|y));


여기서도 2단계에서랑 마찬가지로 걍 화면에 출력되는 거에만 신경썼다. 나만 보기 편하면 되지. ㅋ

이렇게하면 원랜 제대로 나와야 하는데

손으로 풀때는 근사값을 여러번 쓰니까 중간에 오차가 생겨서 그런지 뭔가 값이 미묘하게 차이가 난다 ㅡㅡ


ex) 0.3+j0.4,numer 입력하면(실수값 출력위해 numer 붙임)

0.5 << 53.13 출력. 즉 페이져 크기 0.5와 위상각 53.13 출력




종합 소스


postfix("@");

x@ := x * %pi / 180;


infix("<<");

x<<y := sconcat(x*cos(y@), " + j", x*sin(y@));


infix("|");

x|y := (x^2 + y^2)^0.5;


infix("<a");

x<ay := acos(x/y)/%pi*180;


infix("+j");

x+jy := sconcat(x|y, " << ", x<a(x|y));





위 내용을 맥시마메 복붙하고 시프트엔터를 누질르면


(%o1) "@"

(%i2) 

(%o2) @(x):=(x*%pi)/180

(%i3) 

(%o3) "<<"

(%o4) x<< y:=sconcat(x*cos(@(y))," + j",x*sin(@(y)))

(%i5) 

(%o5) "|"

(%i6) 

(%o6) x | y:=(x^2+y^2)^0.5

(%i7) 

(%o7) "<a"

(%i8) 

(%o8) x<a y:=acos(x/y)/%pi*180

(%i9) 

(%o9) "+j"

(%o10) x +j y:=sconcat(x | y,"<< ",x<a (x | y))


와 같은 아름다운 내용이 뜸 ㅇㅇ

단점은 맥시마 새로 켤때마다 새로 정의해줘야 한다는거 ㅋ 복붙과복붙과복붙...................


나중에 위 링크 들어가서 레알 찬찬히 읽으면서 잘못된 내용 좀 수정하고 해봐야겠다. 왠지모를 도전의식


현재까지 최종수정 2012-06-09 05:04

'엥그니어링 > 도움글' 카테고리의 다른 글

Favicon / 즐겨찾기 아이콘 등록  (3) 2014.06.01
JavaScriptCore  (0) 2014.04.24
Sublime Text 2  (0) 2014.03.06
LaTeX  (2) 2014.01.06
MIPS  (0) 2011.04.07

WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,