2015-04-17 2 views
5

Я пытаюсь найти способ получить максимальное и минимальное значение функции с помощью Maxima (wxMaxima), но до сих пор я не нашел, как это сделать.Как найти максимум и минимум функции с помощью Maxima?

Не могли бы вы рассказать мне, как бы вы это сделали?

Например, предположим, что у меня есть следующий код:

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

А потом я сюжет этой функции в диапазоне -10, 10, и я получаю:

enter image description here

Я знаю, что максимум равен 3/2, а минимум должен быть -1/2.

ответ

8

Мой совет заключается в том, чтобы найти крайние значения так же, как вы это делали вручную: вычислите производную, решите для производной = 0 и замените любые значения, найденные обратно в исходную функцию. Например:

(%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 

Если бы я быть осторожным, я бы проверить, что х = -2 и х = 2 действительно крайние значения, а не только точки перегиба, и я бы проверил, что знаменатель% О3 отличным от нуля при x = -2 и x = 2, прежде чем пытаться оценить f (x) в этих точках.

+1

+1. Мне особенно понравился шаг 'num (%)'. Это не строго необходимо, но помогает максимам не задыхаться с шагом 'solve'. Я должен помнить это (я часто в конечном итоге копирую числитель вручную ... глупо меня - спасибо) –

0

Используйте функцию lbfgs следующим образом:

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

Код выше дает положение [х] = 2 максимума функции.

+2

Пожалуйста, объясните, почему это должно работать, какова цель 'lbfgs' и т. Д. – nbro

0

lbfgs находит минимальное значение.

Код Тима находит минимальное значение -f(x) и, следовательно, максимальное значение f(x). [x] = переменная. [1.0] = начальная оценка. [-1,0] = найти максимальное значение междуx = -1 и x = 0. 1e-4 = epsilon, я думаю, что в основном это заканчивается уровнем точности или значения шага.

0

enter image description here

Определить, когда производная увеличивается или уменьшается

+0

Пожалуйста, по крайней мере, грубо объясните ваша фотография/код. Также может быть полезно разделить код/​​команды, если вы хотите легко воспроизвести свою фотографию. – nbro

Смежные вопросы