Как сократить это символическое выражение?

Приведенное ниже символьное выражение является ответом на некоторую задачу:

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;

Как видите, это слишком длинно для чтения, как я могу сократить его, чтобы его было легко читать?


person lihaitao    schedule 13.07.2013    source источник


Ответы (2)


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
person p8me    schedule 13.07.2013

Возможно, вы получили длинное целое, например тонкое, в первую очередь потому, что вы не создали свое символьное уравнение наилучшим образом. Сравните вывод

sym(exp(pi))

to

exp(sym(pi))

Как правило, если в вашем символьном уравнении есть какие-либо числовые константы, которые преобразуются сложным образом (например, путем их экспоненциального преобразования), вы захотите определить их явно. Если константа умножается или добавляется к символической переменной перед передачей в функцию, то это может не понадобиться.

Кроме того, вы можете использовать simple и simplify, чтобы попробовать более красивые версии выражений. В твоем случае:

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, если это необходимо.

person horchler    schedule 13.07.2013