OK, как вы сказали, вы хотите вывести Math.pow(a,b)
для Javascript. Подход, который я предложу здесь, заключается в замене выражений a^b
в Maxima выражениями Math.pow(a,b)
и выводами.
(%i1) e : sqrt(a) + b^(3/2) + 1/c + exp(d^f);
f
d 1 3/2
(%o1) %e + - + b + sqrt(a)
c
(%i2) subst ("^"=lambda([a, b], Math.pow(a, b)), e);
3 1
(%o2) Math . pow(c, - 1) + Math . pow(b, -) + Math . pow(a, -)
2 2
+ Math . pow(%e, Math . pow(d, f))
ОК, так что большая часть работы там. Некоторые выражения представлены как выражения "^"
, даже если они кажутся чем-то еще, например sqrt(a)
- a^(1/2)
и 1/c
- c^(-1)
. Если вам нужно, чтобы они были сохранены как sqrt(a)
и 1/c
, тогда нам нужно будет поработать над этим.
Я предполагаю, что лучше иметь значения с плавающей запятой вместо целых коэффициентов. Кроме того, мы заменим %e
на его числовое значение. Если вы хотите, чтобы %e^x
отображался как Math.exp(x)
, мы можем работать над этим. Или, если вы хотите Math.pow(Math.E, x)
, это относительно просто; просто оцените subst(%e = Math.E, <your expression>)
.
(%i3) float (%);
(%o3) Math . pow(c, - 1.0) + Math . pow(b, 1.5) + Math . pow(a, 0.5)
+ Math . pow(2.718281828459045, Math . pow(d, f))
Maxima считает x . y
означать некоммутативное умножение, но это не входит в игру здесь, так что это нормально. По умолчанию он отображается с пространством по обе стороны от точки, но если вы хотите сделать небольшое количество взлома Lisp, мы можем удалить пространство. (Я предполагаю, что это не имеет значения, Javascript, верно? Math . pow
эквивалентно Math.pow
, не так ли?)
(%i4) :lisp (setf (get 'mnctimes 'dissym) '(#\.))
(.)
(%i4) %o3;
(%o4) Math.pow(c, - 1.0) + Math.pow(b, 1.5) + Math.pow(a, 0.5)
+ Math.pow(2.718281828459045, Math.pow(d, f))
ОК, теперь мы можем вывести выражение.
(%i5) grind (%o3);
Math.pow(c,-1.0)+Math.pow(b,1.5)+Math.pow(a,0.5)
+Math.pow(2.718281828459045,Math.pow(d,f))$
(%o5) done
Это ожидаемый выход?
Ваша цель для вас:Вы, случайно, пытаетесь сгенерировать код для другой системы (Python, C, что-то еще)? Вы говорите, что экспоненты выводятся с помощью '^' - вы имеете в виду, что вы смотрите на результат 'grind' или' string' или 'display2d: false'? Или вы хотите сказать, что вы хотите видеть 'pow (a, b)' в любом пользовательском интерфейсе, который вы используете? Если да, какой пользовательский интерфейс вы используете? Спасибо за любую информацию. –
Действительно, мы пытаемся создать синтаксис для другой системы, в данном случае javascript (где это Math.pow (a, b)). В настоящее время мы используем функцию измельчения для вывода. Нам не нужно, чтобы pow (a, b) работал в максимумах, это только для вывода. спасибо Robert – mmzc