2017-09-30 1 views
0

J'essaye d'écrire un fichier M qui trouve le max/min d'une fonction, étant donné une certaine plage.Matlab find min/max de la fonction

Disons que je l'ai défini une équation dans la fenêtre de commande comme ceci:

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

    function_handle with value: 

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

Et disons que ma gamme désirée est de -3 à 3 ... Je commencerais mon M-fichier avec

function fminmax = input(f, lowerbound, upperbound) 

mais que puis-je utiliser? J'ai été googling pendant un moment et je ne peux pas trouver quelque chose d'utile. S'il vous plaît aider!

+0

[Ce] (https://www.mathworks.com/help/matlab/ref/fminbnd.html) a été le premier coup quand je googlé votre question Titre. – beaker

Répondre

1

Vous pouvez utiliser la fonction déjà existante x = fminbnd(fun, x1, x2) qui vous donne la min pour une fonction poignée fun dans la gamme de x1 et x2. Pour obtenir le maximum, vous pouvez simplement utiliser le négatif de votre poignée de fonction.

Votre fonction pourrait ressembler à ceci:

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

Matlab recrache un message d'erreur lorsque j'essaie. Il est dit "Opérateur non défini '*' pour les arguments d'entrée de type 'function_handle'" – Programmer

+0

@Marcus my bad. Un handle de fonction n'a pas de valeur numérique et ne peut donc pas être multiplié par ** - 1 **. J'ai édité ma réponse. Cela devrait faire l'affaire. – Atzeloth