Как помешать максимумам переписать вывод с 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)