Wolfram mathematica 如何最大化Mathematica中的一个函数,该函数将可变长度列表作为输入?

Wolfram mathematica 如何最大化Mathematica中的一个函数,该函数将可变长度列表作为输入?,wolfram-mathematica,Wolfram Mathematica,我有一个类似于时间序列的函数,它根据 实数列表(即,您可以在实数列表上运行函数) 1,2,3,…实数)。我遇到的问题是如何最大化 给定列表长度的函数(受一组约束)。 我可以将函数固定为固定数量的实数(即f[x\u real,y\u real] 而不是f[x_List]),并将x和y视为第一个 列表的两个元素,并调用函数上的最大化,但是 这不是很优雅。我希望能够轻松地更改号码 列表中元素的名称 优化我所描述的函数的最佳方法是什么 对于固定的列表长度,将列表作为参数?我不确定这是否是您要问的,但您可

我有一个类似于时间序列的函数,它根据 实数列表(即,您可以在实数列表上运行函数) 1,2,3,…实数)。我遇到的问题是如何最大化 给定列表长度的函数(受一组约束)。 我可以将函数固定为固定数量的实数(即
f[x\u real,y\u real]
而不是
f[x_List]
),并将
x
y
视为第一个 列表的两个元素,并调用函数上的
最大化
,但是 这不是很优雅。我希望能够轻松地更改号码 列表中元素的名称

优化我所描述的函数的最佳方法是什么
对于固定的列表长度,将列表作为参数?

我不确定这是否是您要问的,但您可以使用双下划线定义一个输入数量不确定的函数:

f[in__] := Mean[{in}]
f[5, 6]
f[1, 2, 3, 4]
使用三个下划线表示零个或多个参数:

g[x_, y_, z___] := {{x}, {y}, {z}}
g[5, 6]
g[1, 2, 3, 4]

使用带有
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}}
编辑:

  • ##
    类似,
    xs
    将绑定到一个列表,而不是
    列表,因此
    Total[xs]
    不起作用
    Plus[xs]
    Plus[##]
    可以
  • 对于简单的事情,我更喜欢纯函数而不是
    DownValues
    ,因为它们是更简单的构造。有些是习惯,因为在旧版本的Mathematica中,纯函数可以获得更好的性能。使用纯函数而不是
    DownValues
    仍然是一个很好的方法,可以表明您在模式匹配分派或非标准求值方面没有做任何花哨的事情

  • 为什么不把Sin[r]/r]
    和[{r=Total[xs]}结合起来呢?