1) Wenn Sie versuchen zu lösen ((y-ymin) * (EC 50 + x)) + abs (ymax) * x = 0 für x symbolisch in Form von y, wo die anderen Variablen dann sind dafür bekannt, versuchen Sie dies:
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)
geben:
expression(list(x == -(2.19835099 * (y + 1607.73011)/(y + 3223.45698))))
2) oder wenn Sie x in Bezug auf alle anderen Symbole wollen dann stattdessen ihre valu substituieren es die anderen Variablen wie yacas Symbole definieren:
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)
geben:
expression(list(x == -((y - ymin) * ec50/(y - ymin + abs(ymax)))))
Lesen Sie die vignette, die Hilfedateien und die Demos ausführen, die mit Ryacas kommen, wenn Sie weitere Informationen benötigen.
3) multiroot Anstatt führen symbolische maninpulation ein alternativer Ansatz ist die Wurzel numerisch mit dem rootSolve Paket zu finden:
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)
geben:
$root
[1] -1.099856
$f.root
[1] 0
$iter
[1] 3
$estim.precis
[1] 0
Überprüfen der Gleichung wir abgeleitet unter Verwendung von Ryacas in (1):
-(2.19835099 * (y + 1607.73011)/(y + 3223.45698))
## [1] -1.099856
3a) nlm Eigentlich können wir dies numerisch ohne irgendwelche Pakete machen.Unter Verwendung des gleichen Aufbau wie in (3):
nlm(function(x, y) f(x, y)^2, 1, y = y)
3b) uniroot Wenn Sie in der Lage sind, den x-Wert klammern, zwischen -10 und 10, sagen wir, dann eine andere Art und Weise, es zu tun, ohne alle Pakete mit der gleiche Aufbau ist wie in (3) ist:
uniroot(f, c(-10, 10), y = y)
Anmerkung:
obwohl die Gleichung zwei variabl hat es, x und y, würde dies in der Regel als univariate Problem angesehen werden, keine multivariate Problem, weil wir für eine Variable zu lösen, x, in Bezug auf der y
in der Frage ymin
überschreitet ymax
so haben wir ausgetauscht sie
Was versuchst du genau zu tun? Was ist die erwartete Ausgabe? Scheint so, als ob die Eingabe für diese Funktionen nur Strings wären, also sehe ich nicht, warum man nicht einfach 'paste()' in literale Werte (oder 'sprintf()' oder was auch immer) einfügen könnte. – MrFlick
Hi @MrFlick, Der Stolperstein löst die multivariate Gleichung mit den angegebenen Parameterwerten in R. Ist das möglich? – RanonKahn
Ich verstehe immer noch nicht, was Sie hier "lösen". Gibt es irgendwo eine Gleichheit, die ich gerade vermisse? Erwarten Sie eine einzigartige Punktlösung? Oder eine Linie? Was (in Worten) versuchen Sie zu lösen? – MrFlick