R:使用优化算法求解非线性方程

时间:2018-07-02 14:53:04

标签: r mathematical-optimization

因此,我正在尝试求解具有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)) }

我没有得到令人满意的结果,因为min(2,X [2]),误差接近0但X [2]比2大得多

1 个答案:

答案 0 :(得分:0)

因此,我找到了解决此问题的方法,而不是使用函数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

时,结果非常令人满意