2015-01-25 5 views
0

에서 멀티 라인 맥시마 코드를 실행하고 그것을 작동 :어떻게이 같은 옥타브에서 맥시마 코드를 실행할 수 있습니다 옥타브/matlab에

mm=maxima("diff(a*x^3-b*x^2+x+d,x,1)") 

을하지만 어떻게 멀티 라인 명령을 실행할 수 있습니까? 나는 내가 얻을 구문 오류

mm=maxima("kill(all)$ 
numer:true$ 
ratprint:false$ 
angle_in_bits:3779$ 
total_fs:18136$ 
s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$ 
round(s);") 

오류를 얻을 옥타브 아래의 코드를하려고하면

kill(all)$ 
numer:true$ 
ratprint:false$ 
angle_in_bits:3779$ 
total_fs:18136$ 
s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$ 
round(s); 
[round(angle_deg)=75] 

맥시마 작동 아래

예제 코드 :

>>> mm=maxima("kill(all)$ 
numer:true$ 
ratprint:false$ 
angle_in_bits:3779$ 
total_fs:18136$ 
s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$ 
round(s);") 
error: unterminated character string constant 
parse error: 

    syntax error 

>>> mm=maxima("kill(all)$ 
         ^

>>> _ide_reload_variables_list(whos()); 
error: 'numer' undefined near line 1 column 1 
error: invalid base value in colon expression 
error: 'ratprint' undefined near line 1 column 1 
error: invalid base value in colon expression 
parse error: 

    syntax error 

>>> angle_in_bits:3779$ 
        ^

parse error: 

    syntax error 

>>> total_fs:18136$ 
       ^

parse error: 

    syntax error 

>>> s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg)$ 
                  ^

error: unterminated character string constant 
parse error: 

    syntax error 

>>> round(s);") 
      ^
+1

나는 옥타브를 가지고 있지 않지만, 맥시마에서 괄호에 훨씬을 둘러싸는 쉼표, 전자로 구분하여 하나 하나에 여러 개의 문장을 만들 수 있습니다. 지. angle_in_bits : 3779, total_fs : 18136, s : solve (angle_deg = (angle_in_bits/total_fs * 360), angle_deg), round (s)'(kill (all), numer : true, –

답변

2

Fred Senese와 rayryeng에게 도움을 주신 덕분입니다.

누군가가 이것을 필요로 할 수도 있으므로 여기에 몇 가지 예제 코드가 있습니다. 이 코드는 옥타브에서 맥시마의 상징적 인 솔버에 직접 접근 할 수있게 해줍니다 (맥시마의 명령을 여러 줄 실행할 수 있습니다). 옥타브에는 좋은 상징적 인 해결사가 없기 때문에 이것은 다른 사람에게 유용 할 것입니다.

mm=maxima("(kill(all), numer:true, ratprint:false, angle_in_bits:3779, total_fs:18136, s:solve(angle_deg=(angle_in_bits/total_fs*360),angle_deg),(s))") 
%mm = '[angle_deg = 75.01323334803705]'; 

[si ei xt mt] = regexp(mm, '(\d)*(\.)?(\d)*'); 
number = str2num(mt{1}) 

>>>number = 75.013 
1

나는 당신이 내가 추측하고있는 QtOctave를 사용하고 있다고 가정 할 것이다. 오류 메시지를 검색하는 것에서 "_ide_reload_variables_list (whos());" 그렇지 않은 경우 질문에 다음 중 어느 것도 적용되지 않을 수 있습니다.

날이 내용으로 파일 /usr/share/qtoctave/scripts_octave/maxima.m 에 프롬프트 지점에서 help maxima를 입력 : 나에게 말한다

function result=maxima(command) 
in=""; 
in=sprintf("echo \"string(%s);\"|maxima --very-quiet", command); 
[status,result]=system(in); 
%if(status!=0) result=""; endif; 
result = deblank (strjust ( strrep (result, "%", "") ,"left")); 
endfunction 

는 최대가에 옥타브의 기능 system를 통해 호출 맥시마에서 여러 명령을 허용하지 않는 매우 특별한 방법입니다.

당신이 command_i이 문자열 명령 maxima({command_1,command_2})의 셀 어레이와 함께 이제 기능 maxima를 호출 할 수있는 것이 아래의 방법으로 in의 할당을 수정.

in=['echo ', sprintf('\"%s;\" ',command{:}), '| maxima --very-quiet'];

함수 system는 여전히 하나 출력, 최대 값으로 표준 출력으로 전송되는 하나를 반환 있습니다.

This은 옥타브가 서브 프로세스와 상호 작용하는 방법을 설명하기 때문에 흥미로울 수 있습니다.

필자가 제공하는 수정이 매우 피상적 ​​인 용도 일 뿐이라고 생각하는만큼 확실하지 않지만 어쨌든 옥타브가 무엇인지 알 수 있도록 도와줍니다. maxima(something). 그것은 나를 도왔다.

마지막으로 중요한 것은 옥타브 (또는 matlab)와 맥시마 사이의 실제 인터페이스가 없다는 것입니다. 나는 그것이 틀렸다면 누군가가 나를 교정 할 수 있기를 바랍니다.

관련 문제