因此,我正在尝试求解具有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大得多
答案 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