2017-02-24 25 views
0

當我嘗試使用RSymPy庫解決方程時,我得到了NotImplementedError:多變量方程錯誤。RSymPy - 處理多元方程

我不知道我錯在哪裏,或者我應該使用其他庫用於多變量方程,還是有一種解決方法使它工作?

此外,我無法將變量形式的值傳遞給方程參數(ymax,ymin和ec50),而無需對其進行硬編碼。

library(rSymPy) 
ymax <- Var("ymax") 
ymin <- Var("ymin") 
ec50 <- Var("ec50") 
sympy("var('x y')") 
sympy("expr = ((y-ymin)*(ec50+x))+abs(ymax)*x") 
sympy("solve(expr.subs([(ymin, 1615.72687), (ec50, 2.19835099), (ymax, -1607.73011)]),x, y)") 
+0

你想要做什麼?什麼是預期的輸出?看起來像這些函數的輸入只是字符串,所以我不明白爲什麼你不能'粘貼()'在字面值(或'sprintf()'或其他)。 – MrFlick

+0

Hi @MrFlick,絆腳石是用R中提供的參數值求解多變量方程。可能嗎? – RanonKahn

+0

我還是不明白你在這裏「解決」什麼。有沒有平等的地方,我只是失蹤?你期待獨特的點解決方案嗎?還是一條線?你試圖解決什麼(用文字)? – MrFlick

回答

3

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) 

注:

  • 雖然方程具有兩個variabl ES,X和Y,這通常會在這個問題看作是一個單變量的問題,而不是一個多變量的問題,因爲我們解決了一個變量x,y中

  • 方面ymin超過ymax,所以我們已經交換他們

+0

親愛的@ G-Grothendieck謝謝您的全面回覆。我非常感激。作爲上述查詢的下一步,我發佈了一個全局曲線擬合相關問題。請問您如何解決問題並繼續? http://stackoverflow.com/questions/42465934/dose-repsone-global-curve-fitting-using-r - 謝謝! – RanonKahn