【问题标题】:Maple: specify variable over which to maximizeMaple:指定要最大化的变量
【发布时间】:2016-03-21 05:28:50
【问题描述】:

这是一个非常简单的问题,但令人惊讶的是在网上发现的很少......

我想在 maple 中找到一个函数的最小化器,我不确定如何指示哪个是感兴趣的变量?让我们举一个非常简单的例子,我想要 x 中的二次表达式的符号最小化器,参数为 a、b 和 c。

在不指定任何内容的情况下,它确实会最小化所有变量 a、b、c 和 x。

f4 := a+b*x+c*x^2
minimize(f4, location)

我试图在函数中指定变量,也没有用:

f5 :=(x) ->a+b*x+c*x^2
minimize(f5, location)

我应该怎么做?而且,如果我想要两个变量 x 和 y,我该怎么办?

fxy := a+b*x+c*x^2 + d*y^2 +e*y

【问题讨论】:

    标签: minimize maple


    【解决方案1】:
    f4 := a+b*x+c*x^2:
    
    extrema(f4, {}, x);
    
                                  /         2\ 
                                  |4 a c - b | 
                                 < ---------- >
                                  |   4 c    | 
                                  \          / 
    
    fxy := a+b*x+c*x^2 + d*y^2 +e*y:
    
    extrema(fxy, {}, {x,y});
    
                           /           2        2\ 
                           |4 a c d - b  d - c e | 
                          < --------------------- >
                           |        4 c d        | 
                           \                     / 
    

    极值的性质取决于参数的值。对于上面的第一个示例(x 中的二次方),它将取决于 c 的符号。

    命令extrema 接受可选的第四个参数,例如分配候选解点的未分配名称(或未评估引用的名称)(作为其计算的副作用)。例如,

    restart;
    
    f4 := a+b*x+c*x^2:
    
    extrema(f4, {}, x, 'cand');
    
                                                   2
                                           4 a c - b
                                         {----------}
                                             4 c
    
    cand;
    
                                                 b
                                         {{x = - ---}}
                                                 2 c
    
    fxy := a+b*x+c*x^2 + d*y^2 +e*y:
    
    extrema(fxy, {}, {x,y}, 'cand');
    
                                               2        2
                                    4 a c d - b  d - c e
                                   {---------------------}
                                            4 c d
    
     cand;
    
                                            b          e
                                   {{x = - ---, y = - ---}}
                                           2 c        2 d
    

    或者,您可以设置偏导数并手动求解。请注意,对于这两个示例,solve 返回一个结果(每个结果)。

    restart:
    
    f4 := a+b*x+c*x^2:
    
    solve({diff(f4,x)},{x});
    
                                                 b
                                         {x = - ---}
                                                2 c
    
    normal(eval(f4,%));
    
                                                   2
                                          4 a c - b
                                          ----------
                                             4 c
    
    fxy := a+b*x+c*x^2 + d*y^2 +e*y:
    
    solve({diff(fxy,x),diff(fxy,y)},{x,y});
    
                                            b          e
                                    {x = - ---, y = - ---}
                                           2 c        2 d
    
    normal(eval(fxy,%));
    
                                               2        2
                                    4 a c d - b  d - c e
                                    ---------------------
                                            4 c d
    

    可以通过发出命令showstat(extrema) 查看extrema 命令的代码。您可以看到它如何解释solve 返回多个结果的情况。

    【讨论】:

    • 哦,谢谢!实际上我也有兴趣获得 arg max/maximizer 本身,这就是我使用 location 参数的原因。我将如何处理 extrema()?谢谢!
    • 这是使用extrema 命令的可选第四个参数完成的。我为此添加了示例。
    猜你喜欢
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多