Отключить Matlab symboli c рациональное приближение - PullRequest
2 голосов
/ 24 февраля 2020

Инструмент Matlab Symboli c имеет очень раздражающую особенность для меня. Он автоматически конвертируется в рациональные / десятичные значения.

Пример 1

z = sym('z', 'real');
f = 3^(1/2)*z;

мы получаем ожидаемый возврат Matlab f = 3^(1/2)*z

Пример 2

z = sym('z', 'real');
f = 3^(1/3)*z;

Тогда я получил дерьмовый результат f = (3247657313705851*z)/2251799813685248, не желательно f=3^(1/3)*z

Причину этого можно найти здесь . По умолчанию sym() используется рациональное приближение к числам.

У меня вопрос, как отключить эту функцию? Например, как получить возврат f=3^(1/3)*z из Примера 2?

1 Ответ

3 голосов
/ 24 февраля 2020

Документация, на которую вы ссылаетесь, рассказывает, как обойти это, заставляя числовые значения c вычисляться символически. В данном случае это кусок 1/3, который не может быть представлен с достаточной точностью в double, поэтому вы можете сделать:

f = 3 ^ (sym(1)/sym(3)) * z;
...