在求解后使用“ Yacas向量”的右侧作为函数

时间:2019-05-03 02:08:01

标签: r

我正在尝试使用两个方程式来解决优化问题。但是,第二个方程式将使用第一个方程式的导数。如下所示,我在c和d之间需要一些东西。 c将一阶导数设置为零,并将y移到右侧,并将y用于第二个方程式。

x <- Sym("x")

y <- Sym("y")

a <- function(x, y) (60-x-y)*y

b <- Deriv(a, "y")

c <- Solve(b(x, y)==0, y); c #Need something here to extract just the left-hand side (60 - x)/2; it produces "Yacas vector:[1] y == (60 - x)/2"

y <-  function(x) (60 - x)/2

f <- function(x) (60-x-y(x))*x

optimize(f, c(1,100), maximum=TRUE) 

我需要一些可以提取右侧的((60-x)/ 2)并将其用作函数的东西。

2 个答案:

答案 0 :(得分:0)

问题是要求某种可以提取右侧“(60-x)/ 2”并将其用作函数的东西

library(Ryacas)

x <- Sym("x")
y <- Sym("y")

a <- function(x, y) (60-x-y)*y
s <- Solve(deriv(a(x, y), y) == 0, y)

da <- function(x) {}
body(da) <- parse(text = sub("list(y == ", "(", as.character(s), fixed = TRUE))

da
## function (x) 
## ((60 - x)/2)

答案 1 :(得分:0)

您可以这样做:

x <- Sym("x")
y <- Sym("y")
a <- (60-x-y)*y
b <- deriv(a, y)
c <- Solve(b==0, y)
yacas(paste0("y Where ", c))
# expression((60 - x)/2)

定义功能:

f <- function(x){}
body(f) <- yacas(paste0("y Where ", c))$text