2017-04-13 14 views
0

Ich habe die schwierigste Zeit versucht, diese Gleichung in einen nichtlinearen Löser in R zu implementieren. Ich probiere sowohl die nleqslv und BB Pakete, aber bisher nichts als Fehler. Ich habe die Dokumentation gesucht und gelesen, bis meine Augen geblutet haben, aber ich kann mein Gehirn nicht darum wickeln. Die Gleichung selbst funktioniert wie folgt:Nichtlineare Gleichung mit Summierungen in R

The Equation

s2 * sum(price^(2*x+2)) - s2.bar * sum(price^(2*x)) = 0

Wo s2, s2.bar und price Vektoren gleicher Länge bekannt sind.

Der letzte Versuch, den ich in BB versuchte, war dies:

gamma = function(x){ 
     n = len(x) 
     f = numeric(n) 
     f[n] = s2*sum(price^(2*x[n]+2)) - s2.bar*sum(price^(2*x[n])) 
     f 
     } 

g0 = rnorm(length(price)) 
results = BBsolve(par=g0, fn=gamma) 

Jede Hilfe sehr

geschätzt
+0

f [n] ist ein Element eines Vektors, aber Sie versuchen, ihm einen ganzen Längenvektor zuzuordnen (s2). Willst du s2 [n] und s2.bar [n] anstelle von s2 und s2.bar verwenden? Der Preis verursacht kein Problem, weil Sie den gesamten Vektor summieren, nachdem Sie den Exponenten genommen haben. – psychometriko

+0

Lass es mich nochmal versuchen: Ich gehe dann wahrscheinlich von Anfang an alles falsch. Die eigentliche Gleichung ich versuche zu lösen diese: http://i1330.photobucket.com/albums/w561/lompoc421/CodeCogsEqn%201_zpsrwocvotk.gif – Lompoc42

Antwort

0

Von Ihnen Beschreibung der verschiedenen Teile in der Funktion können Sie die Formel zu haben scheinen verwendet durcheinander.

Ihre Funktion gamma sollte höchstwahrscheinlich als

gamma <- function(x){ 
    f <- s2*sum(price^(2*x+2)) - s2.bar*sum(price^(2*x)) 
    f 
} 

s2 sind price und s2.bar Vektoren, die aus Ihrer Beschreibung geschrieben werden, so dass die Formel, die Sie gab einen Vektor zurück.

Da Sie keine Daten angegeben haben, können wir nicht testen. Ich habe versucht, mit zufällig generierten Werten für s2, price, s2.bar zu testen. Manchmal bekommt man eine Lösung mit nleqslv und BB aber nicht immer.

Im Fall des Pakets nleqslv funktioniert die Standardmethode nicht immer. Da das Paket verschiedene Methoden hat, sollten Sie die Funktion testnslv aus dem Paket verwenden, um festzustellen, ob eine der bereitgestellten Methoden eine Lösung findet.

+0

Ich kann nicht glauben, es ist so einfach, endete als Dies. Dies scheint zu funktionieren, wenn auch nicht immer, aber das ist ein ganz anderes Thema. Vielen Dank! – Lompoc42

+0

Und vergessen Sie nicht, die Beendigungscodes 'nleqslv' und' BBsolve' zu ​​testen, um zu prüfen, ob eine Lösung gefunden wurde. Und gib eine Aufwertung? – Bhas

+0

Ja, ich musste eine kleine Test While-Schleife schreiben, um sicherzustellen, dass es Lösungen zurückgeworfen hat, die konvergierten. Hoffentlich bin ich auf dem richtigen Weg. Versucht zu upvote aber es wird mich nicht ohne mindestens 15 Rufpunkte lassen. – Lompoc42

Verwandte Themen