2016-07-19 52 views
1

我需要一些幫助解決這些很無聊6個非線性方程組使用R.解決方案中的R複式非線性方程組:B和λ值

sigma1^2 = b1^2 + b2^2 
sigma2 = b1* b3 + b2*b4 
sigma3^2 = b3^2 + b4^2 
sigma4^2 = lambda1 * b1^2 + lambda2 * b2^2 
sigma5 = lambda1 * b1 * b3 + lambda2 * b2 * b4 
sigma6^2 = lambda1 * b3^2 + lambda2 * b4^2 

我已經知道所有的西格瑪值,現在我需要知道b和lambda值。 我已經嘗試過是:

library(nleqslv) 
fun <- function(x) { 
    f <- c(sigma1[1,1], sigma1[1,2], sigma1[2,2], sigma2[1,1], sigma2[1,2], sigma2[2,2])     
    f[1] <- x[1]^2 + x[2]^2      
    f[2] <- x[1]*x[3]+ x[2]*x[4]     
    f[3] <- x[3]^2 + x[4]^2   
    f[4] <- x[5]*x[1]^2+x[6]*x[2]^2 
    f[5] <- x[5]*x[1]*x[3] + x[6]*x[2]*x[4] 
    f[6] <- x[5]*x[3]^2 + x[6]*x[4]^2 
    return(f) 
} 
startx <- c(0.01,0.02,0.02,0.01,1.5,1.7) 
nleqslv(startx,fun,jacobian=TRUE,control=list(btol=.01)) 

其中x [1]至X [4]是我的B值,X [5]和X [6]是我的λ值。

問題是返回的$ fvec值與sigma值不一致。 我在做什麼錯?如果你能分享你的意見,那會很棒,謝謝!

+0

嗨新竹,你應該告訴我們你試過了什麼。在問你的下一個問題之前,請閱讀http://stackoverflow.com/help/how-to-ask。 –

+0

對不起,我附上我的代碼:) –

回答

1

好吧,我只是嘗試以下和它的工作,希望它可以爲別人同樣的問題有所幫助:

ini <- function(x){ 
    c(x[1]^2 + x[2]^2 - sigma1[1,1], 
    x[1]*x[3]+ x[2]*x[4] - sigma1[1,2], 
    x[3]^2 + x[4]^2 - sigma1[2,2], 
    x[5]*x[1]^2+x[6]*x[2]^2 - sigma2[1,1], 
    x[5]*x[1]*x[3] + x[6]*x[2]*x[4] - sigma2[1,2], 
    x[5]*x[3]^2 + x[6]*x[4]^2 - sigma2[2,2]) 
} 
x0 <- c(0.01,0.02,0.02,0.01,1.5,1.7) 
nleqslv(x0, ini, method = "Broyden") 

在X0的初始值是真的任意選擇,但最終結果x根據方程轉換後與西格馬值相符。我現在很開心:D

+0

向我們顯示設置'sigma'的代碼。這是不可重現的。 – Bhas