2015-04-17 21 views
5

Ho provato a trovare un modo per ottenere il valore massimo e minimo di una funzione utilizzando Maxima (wxMaxima), ma fino ad ora non ho trovato il modo di farlo.Come trovare il massimo e il minimo di una funzione usando Maxima?

Potresti dirmi come lo faresti?

Per esempio, supponiamo di avere il seguente codice:

f(x) := (3*x)/(x^2 - 2*x + 4); 

E poi ho tracciare questa funzione nel range -10, 10, e io ottenere:

enter image description here

lo so che il massimo è 3/2 e il minimo dovrebbe essere -1/2.

risposta

8

Il mio consiglio è di trovare i valori estremi nello stesso modo in cui lo si farebbe a mano: calcolare la derivata, risolvere per derivata = 0 e sostituire qualsiasi valore trovato nella funzione originale. Ad esempio:

(%i1) f(x) := (3*x)/(x^2 - 2*x + 4); 
             3 x 
(%o1)      f(x) := ------------ 
             2 
            x - 2 x + 4 
(%i2) diff (f(x), x); 
          3   3 x (2 x - 2) 
(%o2)     ------------ - --------------- 
         2    2   2 
         x - 2 x + 4 (x - 2 x + 4) 
(%i3) ratsimp (%); 
             2 
            3 x - 12 
(%o3)     - ----------------------------- 
          4  3  2 
          x - 4 x + 12 x - 16 x + 16 
(%i4) num (%); 
              2 
(%o4)        12 - 3 x 
(%i5) solve (%, x); 
(%o5)       [x = - 2, x = 2] 
(%i6) map (lambda ([e], subst (e, f(x))), %); 
             1 3 
(%o6)        [- -, -] 
             2 2 

Se fossi facendo attenzione, avrei verificato che x = -2 ex = 2 sono valori davvero estremi e punti di flesso e non solo, e avrei verificato che il denominatore% O3 è diverso da zero x = -2 e x = 2 prima di provare a valutare f (x) in quei punti.

+1

+1. Ho particolarmente apprezzato il passo 'num (%)'. Non è strettamente necessario ma aiuta Maxima a non strozzarsi con il passo 'solve'. Devo ricordarmelo (spesso finisco per copiare il numeratore a mano ... sciocco me - grazie) –

0

usando lo lbfgs simili:

lbfgs(-f(x), [x], [1.0], 1e-4, [-1,0]); 

Il codice sopra dà la posizione [x = 2] del massimo della funzione.

+2

Per favore, spiega perché dovrebbe funzionare, qual è lo scopo di 'lbfgs', ecc. – nbro

0

lbfgs trova il valore minimo.

Il codice di Tim trova il valore minimo di -f(x) e quindi il valore massimo di f(x). [x] = la variabile. [1.0] = stima iniziale. [-1,0] = ricerca del valore massimo trax = -1 e x = 0. 1e-4 = epsilon, penso che fondamentalmente questo sia il livello di accuratezza o valore di passo.

0

enter image description here

identificare quando il derivato sta aumentando o diminuendo

+0

Per favore, almeno, spiega approssimativamente la tua foto/codice. Potrebbe anche essere utile condividere il codice/i comandi se si desidera riprodurre facilmente la propria immagine. – nbro