Как помешать максимумам переписать вывод с 2*sqrt(2) на 2^(3/2)?

Максимальный ввод

2*sqrt(2)

по умолчанию возвращает вывод

2^(3/2)

Как я могу заставить Maxima просто вернуть 2 * sqrt (2)?

(Я использую это в функции tex().)

4 ответа

Вы можете попробовать что-то вроде

simp: false;
tex(2*sqrt(2));
block code...;
simp: true;

Таким образом, вам не нужно постоянно отключать упрощение.

Вы можете сделать это:

(%i1) matchdeclare(n_, integerp,m_, integerp)$
      tellsimp(n_*sqrt(m_), n_*sqrt(box(m_)))$

и потом:

(%i3) 2*sqrt(2);
(%o3) 2 √2

(%i4) sqrt(3)*9;
(%o4) 9 √3

Вы заметите, что число под знаком квадратного корня в выводе окрашено в красный цвет из-за box(). Но если вы выберете выражение в wxMaxima, а затем откроете "Копировать LaTeX", вы получите именно то, что вам нужно, например

\[2\,\sqrt{2}\]

К сожалению, если вы попробуете tex(2*sqrt(2)), чтобы получить код TeX, вы получите $$2\,\sqrt{\boxed{2}}$$вместо.

Насколько мне известно, нет никакого способа, чтобы не допустить упрощения Maxima 2*sqrt(2) в 2^(3/2)с двумя, вероятно, сложными в использовании исключениями:

(1) Полностью отключите упрощение. Но это отключает все упрощения, например, 1 + 1 упрощение до 2, Но если вы хотите попробовать это: просто введите simp : false;,

(2) Отключить упрощение sqrt(2) в 2^(1/2) с помощью :lisp (setf (get '%sqrt 'operators) nil) Но тогда Максима по большей части не знает, что делать с sqrt,

Я не рекомендую ни один из них.

Еще один способ сделать это — использовать некоммутативное умножение.вместо*сdotconstrulesвыключенный:

      (%i1) texput(".", " ", nary)$

(%i2) 2 . sqrt(2), dotconstrules: false;
(%o2)                             2 . sqrt(2)
(%i3) tex(%)$
$$2 \sqrt{2}$$

Я думаю, что это решение может быть полезным, потому что вы можете избежать упрощения одной части вашего выражения, при этом упрощая другую часть, как обычно:

      (%i4) 2 . sqrt(2) * sqrt(4) / 2, dotconstrules: false;
(%o4)                             2 . sqrt(2)
Другие вопросы по тегам