4

実数のリストに基づいて出力を提供する時系列のような関数があります(つまり、1、2、3、...実数のリストで関数を実行できます)。私が直面している問題は、特定のリストの長さに対して関数を最大化する方法です(一連の制約に従います)。関数を固定数の実数(つまりf[x_Real, y_Real] 、の代わりに)に固定し、をリストの最初の2つの要素としてf[x_List]扱いx、関数を呼び出すこともできますが、これはあまりエレガントではありません。リスト内の要素数を簡単に変更できるようにしたい。yMaximize

リストを引数として取る、私が説明したような関数を固定リスト長に最適化するための最良の方法は何ですか?

4

2 に答える 2

3

SlotSequence次のように、 (通常は綴り##が ) 引数を持つ純粋な関数を使用します。

In[1]:= f = With[{r = Total[{##}^2]}, Sin[r]/r]&;
In[2]:= NMaximize[f[x,y,z], {x,y,z}]
Out[2]= {1., {x -> -0.0000402914, y -> 0.0000278573, z -> -0.0000765568}}

編集:

  1. のよう##に、ではなくxsにバインドされるため、機能しません。またはそうするでしょう。SequenceListTotal[xs]Plus[xs]Plus[##]
  2. 単純なものよりも純粋な関数の方が好きDownValuesです。単純な構造だからです。古いバージョンの Mathematica では純粋な関数からより良いパフォーマンスを得ることができたので、これのいくつかは習慣です。の代わりに純粋な関数を使用するDownValuesことは、パターン マッチングのディスパッチや非標準の評価で特別なことをしていないことを示す良い方法です。
于 2009-10-02T14:38:22.957 に答える
1

これがあなたが求めているものかどうかはわかりませんが、二重アンダースコアを使用して、指定されていない数の入力を持つ関数を定義できます。

f[in__] := Mean[{in}]
f[5, 6]
f[1, 2, 3, 4]

3 つのアンダースコアを使用して、0 個以上の引数を示します。

g[x_, y_, z___] := {{x}, {y}, {z}}
g[5, 6]
g[1, 2, 3, 4]
于 2009-09-08T00:36:20.370 に答える