Mathematica – 优化数组变量

问题描述 投票:0回答:2

假设我有一个 x 的函数和一个数组变量。

A = Array[a, 2];
f[x_] := (x-.5)^2 + a[1]^2 + a[2]^2

现在我想最小化两者,这会导致错误。

FindMinimum[f[x], {x, A}]

FindMinimum::nrlnum:函数值{0.707107,1.41421 a[1.]}不是 维度为 {2}、{x,A} = {1.,1.} 的实数列表。 >>

我该怎么写这个?

相比之下,它对于非数组变量效果很好。

f[x_] := (x-.5)^2 + y^2 + z^2;
FindMinimum[f[x], {x, y, z}]
{0., {x -> 0.5, y -> 0., z -> 0.}}

而且,奇怪的是,如果我只有数组变量,它就可以正常工作。

A = Array[a, 3]
f := (a[3] - .5)^2 + a[1]^2 + a[2]^2
FindMinimum[f, A]
{0., {a[1] -> 0., a[2] -> 0., a[3] -> 0.5}}
arrays optimization syntax wolfram-mathematica
2个回答
3
投票

我愿意:

bigA = Array[a, 2];
f[x_] := (x - .5)^2 + Total[bigA^2]

FindMinimum[f[x], Flatten[{x, bigA}]]
(* {0., {x -> 0.5, a[1] -> 0., a[2] -> 0.}} *)

0
投票

尝试使用数组参数为 FindMinimum 设置初始值:

bigA = Transpose[{Array[a, 2], {.25, .4}}]

还有更简单的方法吗?

© www.soinside.com 2019 - 2024. All rights reserved.