Использование правой части «вектора Yacas» после Solve как функции - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь решить задачу оптимизации, используя два уравнения. Но производная первого уравнения будет использоваться во втором уравнении. Как вы можете видеть ниже, мне нужно что-то между 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 голосов
/ 03 мая 2019

Вы можете сделать:

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
0 голосов
/ 03 мая 2019

Вопрос требует что-то, что извлечет только правую часть "(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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...