2016-04-07 17 views
0

Ich habe versucht, eine Reihe von nicht linearen Gleichungen zu lösen, aber stecken.Lösen nichtlinearer Gleichungen in R mit BB-Paket

0<x1<1 ; x2>0 ; x3>0 

library(BB) 

f <- function(x) { 
    x1 <- x[1] 
    x2 <- x[2] 
    x3 <- x[3] 

    F <- rep(NA, 3) 

    F[1] <- 1-x1^(log(1+1/(x3)^x2))-0.64 

    F[2] <- x1^(log(1+1/(x3)^x2))-x1^(log(1+(2/x3)^x2))-0.17 

    F[3] <- x1^(log(1+(2/x3)^x2))-x1^(log(1+(3/x3)^x2))-0.10 

    return(F) 
} 

p0 <- c(0.5,2,1) 

dfsane(par=p0, fn=f,control=list(maxit=30000)) 

Es blieb bei einem Fehler auf der ersten Iteration nur

„Fehler: Fehler bei der Funktionsauswertung“

Kann mir jemand helfen, wie der Fehler zu beheben?

Antwort

0

Um diese Art von Fehler zu debuggen, können Sie den Wert von x, der bei jeder Funktionsiteration verarbeitet wird, ausdrucken, um das Argument zu identifizieren, das die Fehlfunktion Ihrer Funktion verursacht.

Als ich so tat, fand ich, dass die folgenden Eingabedatum problematisch:

x <- c(-1.199934, -2.745093, 3.648077) 
f(x) 
# [1] NaN NaN NaN 

Sie sollten Ihre Funktion aktualisieren, damit es nicht NaN zurückkehrt für out-of-bounds-Daten (oder einen bewegen Solver, der Einschränkungen für die Funktionsargumente akzeptiert).

+0

@ Josliber, Ja, Sie sind wahr. Tatsächlich habe ich Einschränkungen für die Funktionsargumente, wie ich im Anfang als 0 0 erwähnt habe; x3> 0. Kann jemand helfen, solche Situation zu ertragen? –

+0

@BilalPara Das Paket nloptr bietet eingeschränkte nichtlineare Optimierung. Sie können überprüfen, ob das in Ihrem Fall funktioniert. – josliber

+0

@ Josliber, bin ich etwas verwirrt, wie man Optimierungsmethode verwendet, um Lösung der nichtlinearen Gleichungen dort zu erhalten. –

Verwandte Themen