R: решение нелинейного уравнения с использованием оптимизации - PullRequest
0 голосов
/ 02 июля 2018

Так что я пытаюсь решить уравнение, которое имеет 3 неизвестных фактора. Я решил использовать NLM.

Я определил свою функцию F, которая принимает 3 параметра, которые помещаются в вектор, и я пытаюсь найти вектор X, который проверяет следующее уравнение:

F (X) -F (Х1) -F (Х2) -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])

1 Ответ

0 голосов
/ 05 июля 2018

Так что я нашел решение этой проблемы, вместо того, чтобы использовать функцию 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

...