从MATLAB的pretty()输出中获取子表达式字符串
问题描述:
有没有一种很好的方法在单行字符串中获得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成快速转化为代码编辑器。
答
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;