如何使用Maxima查找函数的最大值和最小值?

时间:2015-04-17 18:15:16

标签: maxima

我试图找到一种方法来使用Maxima(wxMaxima)获取函数的最大值和最小值,但直到现在我还没有找到如何做到这一点。

你能告诉我你会怎么做?

例如,假设我有以下代码:

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

然后我在-10,10范围内绘制此函数,并获得:

enter image description here

我知道最大值是3/2,最小值应该是-1/2。

4 个答案:

答案 0 :(得分:9)

我的建议是以与手动操作相同的方式找到极值:计算导数,求解导数= 0,并将找到的任何值替换回原始函数。 E.g:

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

如果我小心,我会证实x = -2和x = 2确实是极值而不仅仅是拐点,我会证实%o3的分母在x = -2时非零在尝试评估这些点的f(x)之前,x = 2。

答案 1 :(得分:1)

使用此功能lbfgs

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

上面的代码给出了函数最大值的位置[x = 2]。

答案 2 :(得分:1)

enter image description here

确定衍生物何时增加或减少

答案 3 :(得分:0)

lbfgs找到最小值。

Tim的代码找到-f(x)的最小值,因此找到f(x)的最大值。 [x] =变量。 [1.0] =初步估算。 [-1,0] =在 x = -1x = 0之间找到最大值1e-4 = epsilon,我认为基本上这最终会达到准确度或步长值。