将R-yacas方程转换为LaTeX而不求解
我想展示在Ryacas中使用“TeXForm”进行的逐步计算。将R-yacas方程转换为LaTeX而不求解,r,latex,rstudio,symbolic-math,yacas,R,Latex,Rstudio,Symbolic Math,Yacas,我想展示在Ryacas中使用“TeXForm”进行的逐步计算。 要做到这一点,我必须能够从给定的方程式中得到乳胶。问题是yacas在转换为LaTeX形式之前会自动解决这些问题。 若我尝试在方程上应用“TeXForm”,我会得到它的简化版本。 例如: exp1<-'D(x)Sin(x^2+y^2)+D(y)Sin(x^2+y^2)' TeXForm(exp1) 我试图获得非简化版本: yacas('TeXForm(exp1)') 我得到: "$2 x \cos \left( x ^{2
要做到这一点,我必须能够从给定的方程式中得到乳胶。问题是yacas在转换为LaTeX形式之前会自动解决这些问题。 若我尝试在方程上应用“TeXForm”,我会得到它的简化版本。 例如:
exp1<-'D(x)Sin(x^2+y^2)+D(y)Sin(x^2+y^2)'
TeXForm(exp1)
我试图获得非简化版本:
yacas('TeXForm(exp1)')
我得到:
"$2 x \cos \left( x ^{2} + y ^{2}\right) + 2 y \cos \left( x ^{2} + y ^{2}\right) $";
"$\mathrm{ exp1 }$";
我还尝试:
yacas('D(x)Sin(x^2+y^2)+D(y)Sin(x^2+y^2)')
它也不起作用。如何获得含有所有衍生物的非简化乳胶配方?我发现
TeXForm(deparse(x^2+x^2))
给出了正确的结果,但这不适用于衍生物。对于衍生工具:
TeXForm(替换(“D(x)sin(x+y)”)
为了防止yacas对表达式求值,可以使用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 = "")
s某些功能正常:
例如:
TeXForm(保持(积分(a)(a^2+5)))
给出:
$\int\left(a^{2}+5\right)da$
但不是所有的功能。。。这个不匹配:
TeXForm(替代(“D(x)sin(x+y)”)
但即便如此:
TeXForm(Hold(x)Sin(x^2+y^2)+D(y)Sin(x^2+y^2)))
给出:
$2x\cos\left(x^{2}+y^{2}\right)+\frac{\partial}{\partial x}\left(2y\cos\left(x^{2}+y^{2}\right)\right)$
它在文档中:“我刚刚加载了Ryacas
,不再有函数yacas
。yac
是同一件事吗?@CarlWitthoft已经对Ryacas
进行了大量重写-阅读有关新方法的文档。这个答案似乎没有给出完整的解释。试着在你描述的内容中更加详细。链接到文档是没有帮助的,除非它是引用来源。您应该提取链接文档的重要方面,并将其转换为适用于OP情况的内容。
```{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)"))
```