如何缩短这个象征性表达?

时间:2013-07-13 14:31:41

标签: matlab symbolic-math

下面的符号表达式是一些问题的答案:

syms x y;
F = (6006059164170857*x^4)/36028797018963968 ...
    - (3741993627723215*x^3*y)/144115188075855872 ...
    - (3786059161694655*x^3)/576460752303423488 ...
    + (2057823154876729*x^2*y^2)/9007199254740992 ...
    + (7804706423002791*x^2*y)/36028797018963968 ...
    - (1579656551431947*x^2)/4503599627370496 ...
    - (5176864966130107*x*y^3)/576460752303423488 ...
    - (3350671128443929*x*y^2)/288230376151711744 ...
    - (2340405747630269*x*y)/72057594037927936 ...
    - (3122104315900301*x)/1152921504606846976 ...
    + (1757149312773205*y^4)/36028797018963968 ...
    - (5692299995057083*y^3)/576460752303423488 ...
    + (4054023049400589*y^2)/144115188075855872 ...
    - (434917661837037*y)/2251799813685248 ...
    - 2254148116991025/18014398509481984;

正如您所看到的那样,阅读时间太长,我怎样才能缩短它以便轻松阅读?

2 个答案:

答案 0 :(得分:3)

vpa将尽可能进行数值计算,并以digits定义的精度返回结果。

另请参阅latex了解符号表达式的 latex 表示,

digits(2) % Two digits precision
latex(vpa(F))

0.17\, x^4 - 0.026\, x^3\, y - \left(6.6\cdot 10^{-3}\right)\, x^3 + 0.23\, x^2\, y^2 + 0.22\, x^2\, y - 0.35\, x^2 - \left(9.0\cdot 10^{-3}\right)\, x\, y^3 - 0.012\, x\, y^2 - 0.032\, x\, y - \left(2.7\cdot 10^{-3}\right)\, x + 0.049\, y^4 - \left(9.9\cdot 10^{-3}\right)\, y^3 + 0.028\, y^2 - 0.19\, y - 0.13

pretty可在命令窗口中显示更好的内容

pretty(vpa(F))
                              3                                             3                                                    3 
        4          3     6.6 x          2  2         2           2   9.0 x y             2               2.7 x          4   9.9 y           2 
  0.17 x  - 0.026 x  y - ------ + 0.23 x  y  + 0.22 x  y - 0.35 x  - -------- - 0.012 x y  - 0.032 x y - ----- + 0.049 y  - ------ + 0.028 y  - 0.19 y - 0.13 
                             3                                            3                                 3                   3 
                           10                                           10                                10                  10

答案 1 :(得分:1)

你可能最终得到了像瘦的长整数,因为你没有以最好的方式创建符号方程。比较

的输出
sym(exp(pi))

exp(sym(pi))

通常,如果符号方程中有任何数字常量以复杂方式转换(例如,取其指数),则需要明确定义它们。如果在传递给函数之前将常量乘以或添加到符号变量,那么可能不需要这个。

此外,您可以使用simplesimplify函数来尝试更好的表达式版本。在你的情况下:

G = simple(F)

返回

(192193893253467424*x^4 - 29935949021785720*x^3*y ...
- 7572118323389310*x^3 + 263401363824221312*x^2*y^2 ...
+ 249750605536089312*x^2*y - 404392077166578432*x^2 ...
- 10353729932260214*x*y^3 - 13402684513775716*x*y^2 ...
- 37446491962084304*x*y - 3122104315900301*x ...
+ 56228778008742560*y^4 - 11384599990114166*y^3 ...
+ 32432184395204712*y^2 - 222677842860562944*y ...
- 144265479487425600)/1152921504606846976

略短(如果按照我的建议行事可能会很好)。如果需要,你可以从那里去@ pm89的优秀建议。