R 解代数方程
我试图解这个方程:R 解代数方程,r,yacas,R,Yacas,我试图解这个方程:((2300+1900*1)+(x+2300+1900*1)*0.002)/(600-400)=1 有没有办法用R来实现这一点 尝试使用不正确的解决方案: 这个方程式的答案是−2004200听起来你想为x求解(),而不仅仅是简化?以下代码求解该方程,从解中去掉x==,并计算表达式: eq2这是一个基本的R解决方案。 以函数的形式重写方程,使用曲线获得函数具有不同符号的两个端点,并使单根起作用 f <- function(x) ((2300+1900*1)+(x+2300+
((2300+1900*1)+(x+2300+1900*1)*0.002)/(600-400)=1
有没有办法用R来实现这一点
尝试使用不正确的解决方案:
这个方程式的答案是−2004200听起来你想为x求解(),而不仅仅是简化?以下代码求解该方程,从解中去掉
x==
,并计算表达式:
eq2这是一个基本的R解决方案。
以函数的形式重写方程,使用曲线
获得函数具有不同符号的两个端点,并使单根
起作用
f <- function(x) ((2300+1900*1)+(x+2300+1900*1)*0.002)/(600-400) - 1
curve(f, -1e7, 1)
uniroot(f, c(-1e7, 1))
#$root
#[1] -2004200
#
#$f.root
#[1] 0
#
#$iter
#[1] 1
#
#$init.it
#[1] NA
#
#$estim.prec
#[1] 7995800
如果您想要快速解决问题:rootSolve
库是您的首选
库(rootSolve)
func_如果要保持相同的结构,则在Base R中,可以执行以下操作:
solveX <- function(eq){
U <- function(x)abs(eval(parse(text = sub("=+","-", eq)), list(x=x)))
optim(0, U, method = "L-BFGS-B")$par
}
eq <- "((2300+1900*1)+(x+2300+1900*1)*0.002)/(600-400) ==1 "
solveX(eq)
[1] -2004200
solveX1)Ryacas使用Ryacas
软件包solve
,如下所示。(感谢@mikldk对最后一行的改进。)
2)Ryacas0或使用上面的eq
和Ryacas0
包装:
library(Ryacas0)
res <- Solve(eq, "x")
eval(Expr(res)[[1:3]]) # convert to R
## [1] -2004200
是
如果我们用假想的1i
替换x
,然后将rhs移动到lhs,则B
和A
是该表达式的实部和虚部。没有使用任何软件包
r <- eval(parse(text = sub("==", "-", eq)), list(x = 1i))
-Re(r) / Im(r)
## [1] -2004200
r术语2300+1900*1
有意义还是可以简化?@ruibarra这些术语有意义的是租金、工资和工人数量,这个方程显示了给定的最大投资额,然后是租金、工资、工人数量和资本成本。您要解的原始方程是什么?为什么你不能用200而不是600-400?甚至4200而不是2300+1900*1600是产品的价格400是单一成本,我正在开发一个通用函数来显示给定价格、单位成本、固定成本、资本成本和每个周期1次销售的最大投资,什么是0.002?
solveX <- function(eq){
U <- function(x)abs(eval(parse(text = sub("=+","-", eq)), list(x=x)))
optim(0, U, method = "L-BFGS-B")$par
}
eq <- "((2300+1900*1)+(x+2300+1900*1)*0.002)/(600-400) ==1 "
solveX(eq)
[1] -2004200
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
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
library(Ryacas0)
res <- Solve(eq, "x")
eval(Expr(res)[[1:3]]) # convert to R
## [1] -2004200
A * x + B = 0
x = - B / A
r <- eval(parse(text = sub("==", "-", eq)), list(x = 1i))
-Re(r) / Im(r)
## [1] -2004200
e <- parse(text = sub("==", "-", eq))
- eval(e, list(x = 0)) / eval(D(e, "x"))
## [1] -200420