Конвертировать уравнение R yacas в LaTeX, не решая его

Я хочу показать пошаговые вычисления, которые были сделаны с использованием 'TeXForm' в Рякас.
Для этого я должен быть в состоянии получить LaTeX из данного уравнения. Проблема в том, что yacas автоматически решает их перед преобразованием в форму LaTeX. Если я пытаюсь применить TeXForm к уравнению, я получаю его упрощенную версию. Например:

exp1<-'D(x)Sin(x^2+y^2)+D(y)Sin(x^2+y^2)'
TeXForm(exp1)

Я получил:

"$2 x \cos \left( x ^{2} + y ^{2}\right)  + 2 y \cos \left( x ^{2} + y ^{2}\right) $";

Я попытался получить не упрощенную версию:

 yacas('TeXForm(exp1)')

Я получил:

"$\mathrm{ exp1 }$";

Я также попробовал:

yacas('D(x)Sin(x^2+y^2)+D(y)Sin(x^2+y^2)')

Это тоже не сработало.
Как получить непростую формулу LaTeX со всеми производными?

2 ответа

Решение

Я нашел это TeXForm(deparse(x^2+x^2)) дает правильный результат, но это не работает с производными.
Для деривативов: TeXForm(substitute("D(x) sin(x+y)")),

Чтобы яки не могли оценить ваше выражение, вы можете обернуть выражение Hold(),

Например: у вас есть выражение "Limit(x,0) Sqrt(x) * Sin(1/x)", и вы хотите, чтобы yacas проанализировал это и преобразовал его в формат LaTeX, не вычисляя выражение.

Расширьте свое выражение так:

s <- "Limit(x,0) Sqrt(x) * Sin(1/x)" 
expanded_yacas_charstr <- paste("Hold(", s, ") == ", s, sep = "")

Я сделал функцию для использования этого в документах Rmarkdown, возвращая функцию ввода вместе с ее результатом в виде комбинированного результата LaTeX. Это может быть полезно для вас:

```{r, results="asis", echo=FALSE}

  kalk <- function(s) {
  library("Ryacas")

  # Expand yacas expression
  # e.g. 
  #       Limit(x,0) Sqrt(x) 
  # is expanded to 
  #       Hold("Limit(x,0) Sqrt(x) == )" Limit(x,0) Sqrt(x)
  #
  # This prevents yacas to evaluate the text inside Hold()

  expanded_yacas_charstr <- paste("Hold(", s, ") == ", s, sep = "")

  s <- as.character(yacas(verbose=false,
                          TeXForm(expanded_yacas_charstr),
                          retclass = "unquote"))

  return(paste("$$ ", substr(s, 2, nchar(s)), "$", sep = ""))
}

# use cat() to make sure "[1]"" output is removed
cat(kalk("Limit(x,0) Sqrt(x) * Sin(1/x)"))
``` 

Некоторые функции в порядке:

например:

TeXForm(Hold(Integrate(a) (a^2+5)) ) 

дайте:

$\int \left( a ^{2} + 5\right)  da$

но не все функции... эта не соответствует:

TeXForm(substitute("D(x) sin(x+y)"))

но даже:

TeXForm(Hold(D(x)Sin(x^2+y^2)+D(y)Sin(x^2+y^2))) 

дайте:

$2 x \cos \left( x ^{2} + y ^{2}\right)  + \frac{\partial}{\partial x}\left( 2 y \cos \left( x ^{2} + y ^{2}\right) \right) $

Это в документе: "https://yacas.readthedocs.io/en/latest/reference_manual/controlflow.html"

Другие вопросы по тегам