1) Ryacas使用如下所示的Ryacas
包。solve
(感谢@mikldk 对最后一行的改进。)
library(Ryacas)
eq <- "((2300+1900*1)+(x+2300+1900*1)*0.002)/(600-400) ==1 " # from question
res <- solve(ysym(eq), "x")
as_r(y_rmvars(res)) # extract and convert to R
## [1] -2004200
如果eq
其中有 R 变量,这里在h
中引用eq2
,然后用于eval
评估结果。
h <- 2300
eq2 <- "((h+1900*1)+(x+2300+1900*1)*0.002)/(600-400) ==1 " # from question
res2 <- solve(ysym(eq2), "x")
eval(as_r(y_rmvars(res2)))
## [1] -2004200
2) Ryacas0或eq
从上面与Ryacas0
包一起使用:
library(Ryacas0)
res <- Solve(eq, "x")
eval(Expr(res)[[1:3]]) # convert to R
## [1] -2004200
3a) 基数 R鉴于这是一个线性方程和以下的解,其中 A 是斜率,B 是截距:
A * x + B = 0
是
x = - B / A
如果我们x
用虚数替换,1i
然后将 rhs 移动到 lhs,我们就有了,B
并且A
是该表达式的实部和虚部。不使用任何包。
r <- eval(parse(text = sub("==", "-", eq)), list(x = 1i))
-Re(r) / Im(r)
## [1] -2004200
3b)如果我们将 rhs 移动到 lhs 则 B 在 x=0 处等于它,并且 A 等于 x 的导数,因此另一个基本 R 解决方案将是:
e <- parse(text = sub("==", "-", eq))
- eval(e, list(x = 0)) / eval(D(e, "x"))
## [1] -200420