1)如果試圖解決((Y-YMIN)*(EC 50 + X))+ ABS(YMAX)* X = 0對於x象徵在y中的術語,其中其他變量已知那就試試這個:
library(Ryacas)
ymin <- -1607.73011
ymax <- 1615.72687
ec50 <- 2.19835099
x <- Sym("x")
y <- Sym("y")
e <- ((y-ymin)*(ec50+x))+abs(ymax)*x
Solve(e, x)
捐贈:
expression(list(x == -(2.19835099 * (y + 1607.73011)/(y + 3223.45698))))
2),或者如果你想在所有其他符號的項x然後,而不是取代它們VALU ES定義其他變量yacas符號:
library(Ryacas)
ymax <- Sym("ymax")
ymin <- Sym("ymin")
ec50 <- Sym("ec50")
x <- Sym("x")
y <- Sym("y")
e <- ((y-ymin)*(ec50+x))+abs(ymax)*x
Solve(e, x)
,並提供:
expression(list(x == -((y - ymin) * ec50/(y - ymin + abs(ymax)))))
閱讀vignette,幫助文件並運行附帶Ryacas如果你需要更多的信息演示。
3)multiroot而不是執行符號maninpulation一種替代方法是找到根數值使用rootSolve包:
library(rootSolve)
ymin <- -1607.73011
ymax <- 1615.72687
ec50 <- 2.19835099
f <- function(x, y) ((y-ymin)*(ec50+x))+abs(ymax)*x
# using x=1 as the starting value find the value of x for which y=10
y <- 10
multiroot(f, 1, y = y)
給出:利用方程我們
$root
[1] -1.099856
$f.root
[1] 0
$iter
[1] 3
$estim.precis
[1] 0
仔細檢查(1)中使用Ryacas衍生而來:
-(2.19835099 * (y + 1607.73011)/(y + 3223.45698))
## [1] -1.099856
3a)nlm其實我們可以在沒有任何軟件包的情況下以數字方式完成此操作。使用相同的設置(3):
nlm(function(x, y) f(x, y)^2, 1, y = y)
3B)uniroot如果你能括號的x值,-10和10,說出來的話另一種方式之間用做它沒有任何套餐相同的設置是如在(3)是:
uniroot(f, c(-10, 10), y = y)
注:
你想要做什麼?什麼是預期的輸出?看起來像這些函數的輸入只是字符串,所以我不明白爲什麼你不能'粘貼()'在字面值(或'sprintf()'或其他)。 – MrFlick
Hi @MrFlick,絆腳石是用R中提供的參數值求解多變量方程。可能嗎? – RanonKahn
我還是不明白你在這裏「解決」什麼。有沒有平等的地方,我只是失蹤?你期待獨特的點解決方案嗎?還是一條線?你試圖解決什麼(用文字)? – MrFlick