【问题标题】:NMinimize- objective function should be scalar-valuedNMinimize - 目标函数应该是标量值
【发布时间】:2017-10-29 21:47:41
【问题描述】:

尝试使用 NMinimize 函数时出现以下错误。完整代码见图片。

NMinimize::objfs: The objective function {{a (0.000081 a-0.0000169425 b-2.78856*10^-6 c)+b (-0.00001692 a+0.000025 b+0.0000113 c)+(-2.78856*10^-6 a+0.0000113 b+0.000064 c) c}} should be scalar-valued.

好的,所以我弄清楚了问题所在,但不知道如何解决它。矩阵乘法正确发生,但 Mathematica 没有返回标量,而是返回一个包含一项的列表,这会导致 ArgMin 出错。有没有办法解决这个问题而不添加另一个函数来返回列表的第一个(唯一)项目?我宁愿让矩阵向量运算返回一个标量值。

enter image description here

【问题讨论】:

  • Transpose[{a,b,c}] 应该会给您一条错误消息。 Y={a,b,c}; r={{1.*.009*.009,-0.376*.009*.005,-0.03873*.009*.008}, {-0.3765*.009*.005,1*.005*.005,0.2825*.005*.008}, {-0.3873*.009*.008,0.2825*.005*.008,1*.008*.008}}; NMinimize[{Y.r.Y,a+b+c==1&&0<a<1&&0<b<1&&0<c<1}, {a,b,c}] 最小化对我来说很好。请刮擦粘贴以在新笔记本中准确检查此输入。

标签: wolfram-mathematica


【解决方案1】:

要使用您的线性代数公式,请将Y 定义为单行二维矩阵:

Y={{a,b,c}}

那么你可以做 Y.r.Transpose[Y] 。结果是一个元素深度为 2 的数组,因此要获得标量结果:

(Y.r.Transpose[Y])[[1,1]] 

a (0.000081 a - 0.0000169425 b - 0.0000278856 c) + b (-0.00001692 a + 0.000025 b + 0.0000113 c) + (-2.78856*10^-6 a + 0.0000113 b + 0.000064 c) c

(这与评论中的方法相同。)

【讨论】:

    猜你喜欢
    • 2020-06-12
    • 2021-07-02
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2021-07-06
    相关资源
    最近更新 更多