Ryacas 替代但不简化或评估
Ryacas substitute but don't simplify or evaluate
我在 R 中使用 Ryacas 包,并试图用变量代替值,但不简化或求解方程以显示计算结果。我搜索了 Whosebug,阅读了 Ryacas 文档并试图在 Yacas 手册中找到它,但到目前为止还没有找到。我想我希望关闭简化以获得替代方程,然后再次打开以提供最终结果。
这里是一个只提供结果而不是工作的例子:
library(Ryacas)
# a <- 2
# b <- 3
# c <- 4
eq <- ysym(('(a * b) / c'))
solution <- with_value(with_value(with_value(eq, 'a', 2), 'b', 3), 'c', 4)
tex(solution)
# "\frac{3}{2}"
我想要得到的输出是:
# working out
# "\frac{2 \times 3}{4}
以及实际解决方案:
# solution
# "\frac{3}{2}"
有谁知道是否有解决此问题的方法,例如通过 yac_str
或类似方式将命令传递给 yacas。我尝试使用 tex()
命令转换为乳胶,然后在删除乘法运算符后替换,这意味着我需要查找并替换它们,这在处理符号时变得很讨厌:
tex(eq)
# "\frac{a b}{c}"
# substituting string values using stringi requires additional
# work to deal with the missing `*` between `a` and `b`
# "\frac{2 3}{4}"
虽然这可以用于简单的表达式,但有许多例外情况,例如变量 a
和 c
出现在 \frac
等
我也尝试过 TexForm
命令和各种形式的 substitute
但我仍然无法捕捉到未简化和未计算的方程式:
y_fn(substitute(with_value(eq, 'a', 2)), "TeXForm")
# "\frac{2 b}{c}"
eval(substitute(with_value(eval(substitute(with_value(eq, 'a', 2))), 'b', 3)))
# y: 6/c
感谢任何帮助。
您可能需要对此进行更多自定义,但如果您愿意,这种通用方法是可行的。
我们使用 gsubfn 将单词翻译成它们的值,并使用 gsub 处理末尾的 \times 部分。请注意,frac 未被修改,因为我们正在匹配单词并且 frac 它不是 gsubfn 的第二个 arg 中给出的列表中的单词。
library(magrittr)
library(gsubfn)
library(Ryacas)
eq <- ysym(('(a * b) / c'))
eq %>%
tex %>%
gsubfn("(\w+)", list(a = 2, b = 3, c = 4), .) %>%
gsub("(\d) (\d)", "\1 \\times \2", .)
## [1] "\frac{2 \times 3}{4}"
已添加
在 Whosebug 中搜索 [r] Ryacas 时使用前三个代码示例,它对所有代码都有效。请注意,这些使用了 Ryacas 的原始版本,目前称为 Ryacas0,所以我使用了它。
library(Ryacas0)
library(gsubfn)
library(magrittr)
tex_sub <- function(.x, ...) {
.x %>%
gsubfn("(\w+)", list(...), .) %>%
gsub("(\d) (\d)", "\1 \\times \2", .)
}
#
x <- Sym("x")
mat1 <- List(
List(x, 2),
List(x^3, x))
mat2 <- List(
List(x, x),
List(3, 6 * x))
tt <- TeXForm(mat1 * mat2)
tex_sub(tt, x = 1)
###
#
u=Sym("u")
v=Sym("v")
w=Sym("w")
DG=List(List(w-v), List(u-w), List(v-u))
tt2 <- TeXForm(DG)
tex_sub(tt2, u = 2, v = 3, w = 4)
###
#
x <- Sym("x")
P <- Sym(1)
for (k in 1:3) {
P <- Simplify((1+k*x)*P + x*(1-x)*deriv(P, x))
print(P)
}
tt3 <- TeXForm(P)
tex_sub(tt3, x = 10)
我在 R 中使用 Ryacas 包,并试图用变量代替值,但不简化或求解方程以显示计算结果。我搜索了 Whosebug,阅读了 Ryacas 文档并试图在 Yacas 手册中找到它,但到目前为止还没有找到。我想我希望关闭简化以获得替代方程,然后再次打开以提供最终结果。
这里是一个只提供结果而不是工作的例子:
library(Ryacas)
# a <- 2
# b <- 3
# c <- 4
eq <- ysym(('(a * b) / c'))
solution <- with_value(with_value(with_value(eq, 'a', 2), 'b', 3), 'c', 4)
tex(solution)
# "\frac{3}{2}"
我想要得到的输出是:
# working out
# "\frac{2 \times 3}{4}
以及实际解决方案:
# solution
# "\frac{3}{2}"
有谁知道是否有解决此问题的方法,例如通过 yac_str
或类似方式将命令传递给 yacas。我尝试使用 tex()
命令转换为乳胶,然后在删除乘法运算符后替换,这意味着我需要查找并替换它们,这在处理符号时变得很讨厌:
tex(eq)
# "\frac{a b}{c}"
# substituting string values using stringi requires additional
# work to deal with the missing `*` between `a` and `b`
# "\frac{2 3}{4}"
虽然这可以用于简单的表达式,但有许多例外情况,例如变量 a
和 c
出现在 \frac
等
我也尝试过 TexForm
命令和各种形式的 substitute
但我仍然无法捕捉到未简化和未计算的方程式:
y_fn(substitute(with_value(eq, 'a', 2)), "TeXForm")
# "\frac{2 b}{c}"
eval(substitute(with_value(eval(substitute(with_value(eq, 'a', 2))), 'b', 3)))
# y: 6/c
感谢任何帮助。
您可能需要对此进行更多自定义,但如果您愿意,这种通用方法是可行的。
我们使用 gsubfn 将单词翻译成它们的值,并使用 gsub 处理末尾的 \times 部分。请注意,frac 未被修改,因为我们正在匹配单词并且 frac 它不是 gsubfn 的第二个 arg 中给出的列表中的单词。
library(magrittr)
library(gsubfn)
library(Ryacas)
eq <- ysym(('(a * b) / c'))
eq %>%
tex %>%
gsubfn("(\w+)", list(a = 2, b = 3, c = 4), .) %>%
gsub("(\d) (\d)", "\1 \\times \2", .)
## [1] "\frac{2 \times 3}{4}"
已添加
在 Whosebug 中搜索 [r] Ryacas 时使用前三个代码示例,它对所有代码都有效。请注意,这些使用了 Ryacas 的原始版本,目前称为 Ryacas0,所以我使用了它。
library(Ryacas0)
library(gsubfn)
library(magrittr)
tex_sub <- function(.x, ...) {
.x %>%
gsubfn("(\w+)", list(...), .) %>%
gsub("(\d) (\d)", "\1 \\times \2", .)
}
#
x <- Sym("x")
mat1 <- List(
List(x, 2),
List(x^3, x))
mat2 <- List(
List(x, x),
List(3, 6 * x))
tt <- TeXForm(mat1 * mat2)
tex_sub(tt, x = 1)
###
#
u=Sym("u")
v=Sym("v")
w=Sym("w")
DG=List(List(w-v), List(u-w), List(v-u))
tt2 <- TeXForm(DG)
tex_sub(tt2, u = 2, v = 3, w = 4)
###
#
x <- Sym("x")
P <- Sym(1)
for (k in 1:3) {
P <- Simplify((1+k*x)*P + x*(1-x)*deriv(P, x))
print(P)
}
tt3 <- TeXForm(P)
tex_sub(tt3, x = 10)