2017-04-27 408 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) 

這樣的輸出是很容易的剪切和pastable成快速轉化爲代碼編輯器。

回答

1

MATLAB函數ccode(或matlabFunction)精美地執行這個技巧。

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

Matlab的生成outfile.c稀疏矩陣符號和取代簡化的計算:

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; 
相關問題