Wie zur Minimierung einer Funktion über ein input-parameter in R
Angenommen ich habe eine Funktion, die wie folgt definiert
myFunction = function(input1, input2, input3) {
# do something with input and then return
}
und jetzt will ich minimieren myFunction
nur über die erste Eingabe, nämlich input1
, während die Befestigung der anderen Parameter.
In R, es scheint, dass es einige verpackten Funktionen wie nlm
, optim
usw. Aber die Dokumentation nicht wirklich erklären, wie das problem oben. Zum Beispiel scheint es, dass optim
können nur minimieren einer Funktion über nur 1 Eingang? Ich bin wahrscheinlich falsch, aber bitte korrigieren Sie mich, und zeigt mir die empfohlene Art, das zu tun diese Art der Minimierung problem.
Vielen Dank!
InformationsquelleAutor Enzo | 2013-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Minimierung der Ausgabe, wenn die Eingabe ein Vektor, die Sie verwenden können
optim
.Das erste argument
optim
(7:10
in meinem Beispiel) ist der Startwert fürinput1
(a Vermutung, wo zu Beginn der Optimierung). Die zweite ist die Funktion, und Sie können dann gehen in den festen Parametern (wieinput2
undinput3
).In diesem Beispiel, das minimum stellt sich heraus, dass ein Vektor, der nur 3s (so minimiert, dass
sum(abs(input1 - 3))
).Wenn Sie ausgeführt wurden, nur eine 1-dimensionale Minimierung, verwenden Sie die
optimize
- Funktion, und übergeben Sie die anderen Eingänge, um es nach dem passieren der Funktion:Wenn Sie wollen, zu minimieren, basierend auf
input2
oderinput3
(eine, die nicht das erste argument der Funktion), können Sie geben, die anderen als benannte Argumente:Wenn Sie sich Fragen, warum dies möglich ist, ist es, weil
optimize
ist definiert als:Dass
...
ermöglicht die Verwendung einer beliebigen Anzahl von zusätzlichen Parametern, die es dann weitergeben zumyFunction
....
:o = optimize(myFunction, 2, 3, interval=c(-100, 100))
herzlichen Dank - ich war mir nicht bewusst, was möglich war.
Ich sehe, danke für deine ausführliche Antwort!
Ich bin leider eine Sache, die ich vergaß zu erwähnen war, was sollte ich tun, wenn mein erstes argument ist ein Vektor? Es scheint, dass
optimize()
erwartet, dass alle Argumente mit reellen zahlen.klar zu sein, Sie wollen zu optimieren über den gesamten Vektor, wie in finden der Vektor der Länge minimiert, dass der Ausgang (an dem Punkt ist es nicht mehr 1d-Optimierung)? Oder wollen Sie die Optimierung starten, einmal für jeden der Werte in diesem Vektor?
InformationsquelleAutor David Robinson