r - 评估一个符号 Ryacas 表达式

标签 r symbolic-math

这是一个可重现的示例:

a <- 0.05
za.2 <- qnorm(1-a/2)
b <- 0.20
zb <- qnorm(1-b)

lambda12 <- -log(1/2)/12
lambda18 <- -log(1/2)/18
theta <- lambda18/lambda12
(d = round(4*(za.2+zb)^2/log(theta)^2))   

Tf<-36
library(Ryacas)
n <- Sym("n")

Solve(n/2*(2-exp(-lambda12*Tf)-exp(-lambda18*Tf))==d , n)

最后一行返回
expression(list(n == 382/1.625))

有没有办法提取商并将其分配给另一个变量(235.0769)?

最佳答案

G.Grothendieck 在评论中指出,您需要首先捕获下面要操作的表达式:

soln <- Solve(n/2*(2-exp(-lambda12*Tf)-exp(-lambda18*Tf))==d , n) 
X <- yacas(soln)$text

然后,为了提取商,您可以利用许多 R 语言对象是或可以被强制为列表的事实。
 X <- expression(list(n == 382/1.625))
 res <- eval(X[[1]][[2]][[3]])
 res
 [1] 235.0769

以下只是说明为什么该索引序列提取表达式的正确部分:
as.list(X)
# [[1]]
# list(n == 382/1.625)

as.list(X[[1]])
# [[1]]
# list
# 
# [[2]]
# n == 382/1.625

as.list(X[[1]][[2]])
# [[1]]
# `==`
# 
# [[2]]
# n
# 
# [[3]]
# 382/1.625

关于r - 评估一个符号 Ryacas 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480778/

相关文章:

r - 如何在 R 中 fork 进程

symbolic-math - maxima CAS - 如何用变量替换表达式?

r - 在 Shiny 的应用程序和多个页面中进行身份验证

r - 计算 R 中 col1 中每个不同值的 col2 中不同值的数量

r - 从公式中删除响应变量

python - SymPy "solves"它不应该求解的微分方程

python - 如何使用 SymPy 替换模式

r - 将文本美元值转换为 R 中的常规数值

python - 如何用sympy求解矩阵方程?

python - 为什么 SymPy 不直接求解该波函数的标准化?