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,但 X[2] 比 2 大得多,因为 min(2,X[2])

所以我找到了这个问题的解决方案,我没有使用函数 nlm 来求解我的非线性方程,而是使用了包 nloptr 中的函数 auglag

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