2017-04-27 6 views
1

pretty() 호출의 모든 하위 표현식을 단일 행 문자열로 가져 오는 좋은 방법이 있습니까? subexpr()은 하나의 서브 표현식을 반환하지만, 나는 그것들 모두를 얻고 싶습니다. 여기에 꽤() 반환 내용은 다음과 같습니다MATLAB의 pretty() 출력에서 ​​서브 표현식 문자열 얻기

syms x 
s = solve(x^4 + 2*x + 1, x,'MaxDegree',3); 
pretty(s) 


/  -1   \ 
|     | 
|   2 1 | 
| #2 - ---- + - | 
|   9 #2 3 | 
|     | 
| 1   #2 1 | 
| ---- - #1 - -- + - | 
| 9 #2   2 3 | 
|     | 
|  1 #2 1 | 
| #1 + ---- - -- + - | 
\  9 #2 2 3/

where 

       / 2  \ 
     sqrt(3) | ---- + #2 | 1i 
       \ 9 #2 /
    #1 == ------------------------ 
        2 

     /sqrt(11) sqrt(27) 17 \1/3 
    #2 == | ----------------- - -- | 
     \   27   27/

가 여기에 내가 원하는 무엇 :

#1 == sqrt(3) ((2/(9 #2)) + #2) 1i)/2 
#2 == (sqrt(11) sqrt(27)/27 - 17/27)^(1/3) 

그런 식으로 출력이 쉽게 잘라 내기 및 붙여 넣을 수있는 코드에 대한 신속한 변환 편집기로.

답변

1

MATLAB 함수 ccode (또는 matlabFunction)은 트릭을 훌륭하게 처리합니다.

t2 = sqrt(1.1E1); 
t3 = sqrt(2.7E1); 
t4 = t2*t3*(1.0/2.7E1); 
t5 = t4-1.7E1/2.7E1; 
t6 = 1.0/pow(t5,1.0/3.0); 
t7 = pow(t5,1.0/3.0); 
t8 = sqrt(3.0); 
t9 = t6*(2.0/9.0); 
t10 = t7+t9; 
t11 = t6*(1.0/9.0); 
A0[0][0] = -1.0; 
A0[1][0] = t6*(-2.0/9.0)+t7+1.0/3.0; 
A0[2][0] = t7*(-1.0/2.0)+t11-t8*t10*5.0E-1*sqrt(-1.0)+1.0/3.0; 
A0[3][0] = t7*(-1.0/2.0)+t11+t8*t10*5.0E-1*sqrt(-1.0)+1.0/3.0; 
:

syms x 
s = solve(x^4 + 2*x + 1, x,'MaxDegree',3); 
ccode(s, 'file', 'outfile.c'); 

하게 Matlab 희소 행렬 표기법 및 교체 - 단순 계산으로 생성 outfile.c