2017-09-30 6 views
0

Ich versuche eine M-Datei zu schreiben, die die Max/Min einer Funktion in einem bestimmten Bereich findet.Matlab finde min/max der Funktion

Lassen Sie uns sagen, dass ich eine Gleichung im Befehlsfenster definiert haben, wie so:

> y = @(x) -1*x^2 + 3 
y = 

    function_handle with value: 

    @(x)-1*x^2+3 

Und lassen Sie uns sagen, dass meine gewünschten Bereich ist von -3 bis 3 ... So würde ich meine M-Datei mit

starten
function fminmax = input(f, lowerbound, upperbound) 

aber was würde ich dann verwenden? Ich habe eine Weile gegoogelt und kann nichts hilfreiches finden. Bitte helfen Sie!

+0

[Dies] (https://www.mathworks.com/help/matlab/ref/fminbnd.html) wurde der erste Treffer, wenn gegoogelt ich Ihre Frage Titel. – beaker

Antwort

1

Sie konnten die bereits vorhandene Funktion x = fminbnd(fun, x1, x2) verwenden, die Sie min für eine Funktionsgriff fun im Bereich von x1 und x2 gibt. Um das Maximum zu erhalten, könntest du einfach das Negativ deines Funktionsgriffs benutzen.

Ihre Funktion könnte wie folgt aussehen:

function [min, max] = fminmax(f, lowerbound, upperbound) 
    min = fminbnd(f, lowerbound, upperbound); 
    max = fminbnd(@(x) -f(x), lowerbound, upperbound); 
end 
+0

Matlab spuckt eine Fehlermeldung aus, wenn ich das versuche. Es heißt "Undefined operator '*' für Eingabeargumente vom Typ 'function_handle'" – Programmer

+0

@Marcus my bad. Ein Funktions-Handle ist kein numerischer Wert und kann daher nicht mit ** - 1 ** multipliziert werden. Ich habe meine Antwort bearbeitet. Dies sollte den Trick machen. – Atzeloth