2013-01-16 106 views
1

假設我有一個x和一個數組變量的函數。Mathematica - 優化數組變量

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一個[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}} 

回答

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

這是它,謝謝。實際上,最後一部分似乎已經足夠了 - 我甚至不必像你那樣重寫函數定義(這在一般情況下是不切實際的,因爲函數可能會在其他地方自動組合)。你可能想編輯這個以使你的答案更加簡潔。 – blutfink