MATLAB vpa() не вычисляет число с переменной точкой для выражения с показателем степени?

Попытка использовать vpa() для вычисления числа переменных точек для рационального выражения в показателе степени:

syms x;
ans1 = x^(12345/67890)
ans2 = vpa(x^(12345/67890),3)
ans2_5 = vpa((12345/67890),3)
ans3 = vpa(x*(12345/67890),3)

Вышеизложенное показывает проблему. ans1 показывает вывод выражения по умолчанию. ans2 показывает, что vpa() не вычисляет номер точки переменной для выражения. 2_5 показывает, что он должен вычислять. Результат, который я ищу, x^0.182.

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

Как я могу запросить оценку экспоненты с помощью vpa?

[редактировать]

Может быть, я могу сделать это более ясным. Все, что мне действительно нужно, — это средство доступа или индекс для экспоненты экспоненциального выражения. Итак, если мое выражение равно y = x^a, мне нужно иметь возможность доступа к x, который возвращает a.

Это возможно?


person Trevor    schedule 15.01.2013    source источник


Ответы (1)


+1 за обнаружение этой интересной ошибки. Это решило вашу проблему для меня:

digits(3)
p=vpa(12345/67890,3)
ans1 = x^p

ans1 =
       x^0.182
person bla    schedule 16.01.2013
comment
Для примера, как я представил, ваше решение работает. Однако для фактического варианта использования все экспоненциальное выражение получается в результате решения системы уравнений, поэтому я не могу выбрать только компонент экспоненты, чтобы назвать его переменной (я так не думаю). Есть хитрые предложения? - person Trevor; 16.01.2013
comment
Я боюсь, что VPA не тот инструмент, который нужно использовать, поскольку теперь я понимаю, что ошибки нет. vpa(A,d) вычисляет каждый элемент A как минимум с точностью до d десятичных знаков, где d — текущий набор цифр. Но если A=x^d, невозможно узнать о первых d цифрах A, отсюда и результат. - person bla; 16.01.2013
comment
Потому что умножение (и сложение) отделимы, а операции со степенью — нет. При умножении x*d вы можете разделить два компонента: неизвестный x и его масштабный коэффициент d, который известен, поэтому при записи vpa(x*d) на самом деле получается x*vpa(d). Однако в случае x^d vpa ничего не может сказать о точности x^d, потому что степенная операция неразделима, ее нельзя записать как с*Х, и только если x будет каким-то известным числом, скажем, 3, то 3^d будет быть некоторым известным числом, с которым может работать vpa. - person bla; 16.01.2013
comment
Конечно, но он все еще может вычислить показатель степени самостоятельно, так что результатом будет x^vpa(d). Мне не нужно одно число, мне нужно выражение через x. Теперь он поступает правильно, он просто дает мне рациональное число там, где мне нужно десятичное. - person Trevor; 17.01.2013