Ich war Experimentieren mit Ihrer Funktion. Rewrite der target
Funktion die a;b
Konstanten in Ihrem Kommentar zu verwenden, wie in Ihrem zweiten Kommentar wie folgt:
target <- function(x, a=.00680,b=3.43164)
{
z <- x[1]/(x[1]+x[2])
y <- numeric(2)
y[1] <- z*exp(-x[2]*(x[2]+z*(1-exp(-x[1]/z))))-a
y[2] <- z/x[2]*(1-exp(-x[2]))-exp(-x[2])*z/x[1]*(1-exp(-x[1]))-b
y
}
Die Standardwerte für a
und b
sind, was Sie ursprünglich angegeben. Mit ihnen erhalten Sie eine schlecht konditionierte Jacobiam.
jedoch, wenn wir einige andere Werte a
und b
zum Beispiel geben, wie so
nleqslv(xstart, target, control=list(btol=.01),jacobian=TRUE,method="Newton",a=2,b=1)
oder
nleqslv(xstart, target, control=list(btol=.01),jacobian=TRUE,method="Newton",a=2,b=2)
dann zum ersten Ausdruck der volle Rückgabewert von nleqslv
ist
$x
[1] 2.4024092 -0.7498464
$fvec
[1] 1.332268e-15 2.220446e-16
$termcd
[1] 1
$message
[1] "Function criterion near zero"
$scalex
[1] 1 1
$nfcnt
[1] 10
$njcnt
[1] 7
$iter
[1] 7
$jac
[,1] [,2]
[1,] -0.2930082 -1.2103174
[2,] 0.1801120 -0.6566861
Ich bin geneigt zu con Es kann sein, dass entweder Ihre Funktion falsch ist oder Sie für a
und b
unmögliche Werte angegeben haben. Methode Broyden
scheint auch gut zu funktionieren.
Wie lauten die Nummern -0,00680 und -3,43164? Ich bekomme Fehler: Fehler in Fn (Par, ...): Argument "y" fehlt, ohne Standard ... bekommen Sie das gleiche? –
Sie sind ein Teil der Gleichung :). Ich habe eine Gleichung wie folgt f (x, y) = (z * exp (-y * (y + z * (1-exp (-x/z)))); z/y * (1-exp (- y)) - exp (-y) * z/x * (1-exp (-x))) = (a, b) wobei (a, b) bestimmte Werte annehmen kann. In der Post stelle ich (a, b) = (0.00680; 3.43164). – Gauss
Der Fehler wird durch eine falsche Definition der Funktion Ziel verursacht ... die nleqslv Verwendung Vektoren ... Ich habe das Problem behoben, jetzt können Sie versuchen, und Sie werden eine andere Nachricht haben :) – Gauss