簡體   English   中英

R:使用優化求解非線性方程

[英]R: solving non linear equation using optimise

因此,我試圖求解具有3個未知因子的方程。 我決定使用nlm。

我定義了函數F,該函數接受3個參數,這些參數被放入向量中,而我試圖尋找的是向量X,它驗證了以下等式:

F(X)-F(X1)-F(X2)-F(X3)= 0

所以我將nlm應用於LHS。 但是我得到一些奇怪的結果,而不是找到使LHS接近零的解決方案,而是給出使LHS收斂到-infinite的解決方案。

誰能指出我正確的方向。

謝謝大家 :)

rm(list=ls())
Ta <- 30 #commun parameter
c <- 0.09 #commun parameter

Delta_T <- c( 10, 20, 30 ) #vector containing X1(1), X2(1) and X3(1)
tetha <- c( 0.9, 1.1, 1.5 ) #vector containing X1(2), X2(2) and X3(2)
t <- c( 300, 400, 100 ) 
N <- t/tetha #vector containing X1(3), X2(3) and X3(3)

F <- function(X){ #definition of function F
  x <- X[1] 
  y <- X[2]
  N <- X[3]
  N*(min(c(y,2))/2)^1/3*x^1.9*exp(-1414/(x+Ta+273))*(1+c*(x/20)^2.1*(2/min(y,2))^1/3)
}

S <- vector("numeric",length(t))  #creation of F(X1) F(X2) and F(X3)
for (i in 1:length(t)) {
  S[i]=F(c(Delta_T[i],tetha[i],N[i]))
}

Eq <- function(X){  #creation of F(X)-F(X1)-F(X2)-F(X3)
  F(X)-sum(S)}
p <- c(min(Delta_T),min(tetha),min(N))

Sol = nlm(Eq,p)  

編輯:所以我找到了解決問題的方法,而不是寫

Eq <- function(X){  #creation of F(X)-F(X1)-F(X2)-F(X3)
  F(X)-sum(S)}

我將abs()應用於函數Eq

Eq <- function(X){  #creation of F(X)-F(X1)-F(X2)-F(X3)
      abs(F(X)-sum(S)) }

我沒有得到令人滿意的結果,誤差接近0,但是由於min(2,X [2]),X [2]比2大得多

所以我找到了解決這個問題,而不是使用功能nlm解決我的非線性方程,我使用的函數auglag從包裝nloptr

Eq <- function(X){  #creation of F(X)-F(X1)-F(X2)-F(X3)
  F(X)-sum(S)}
p <- c(min(Delta_T),min(tetha),min(N))

Sol = auglag(p,Eq,hin = Eq)

auglag是一種非常強大的非線性優化算法。 當我收到錯誤10e-7時,結果非常令人滿意

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM