如何最大化 Mathematica 中接受可变长度列表作为输入的函数?
我有一个类似时间序列的函数,它给出基于 实数列表(即您可以在一系列实数上运行该函数 1,2,3,...实数)。我遇到的问题是如何最大化 给定列表长度的函数(受一组约束)。 我可以将函数修复为固定数量的实数(即 f[x_Real, y_Real]
而不是 f[x_List]
)并将 x
和 y
视为第一个 列表的两个元素,并在函数上调用Maximize,但这 并不是很优雅。我希望能够轻松更改号码 列表中的元素数。
优化我所描述的函数的最佳方法是什么? 接受一个列表作为参数,对于固定的列表长度?
I have a time-series like function which gives an output based on a
list of real numbers(i.e. you can run the function on a list of
1,2,3,... real numbers). The issue I'm encountering is how to maximize
the function for a given list length(subject to a set of constraints).
I could fix the function to a fixed number of real numbers(i.e. f[x_Real, y_Real]
instead of f[x_List]
) and treat x
and y
as the first
two elements of the list, and call Maximize
on the function, but this
is not really elegant. I want to be able to easily change the number
of elements in the list.
What is the best way to optimize a function like I described, which
takes a list as an argument, for a fixed list length?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用带有
SlotSequence
(通常拼写为##
)参数的纯函数,如下所示:EDIT:
##
,xs
将绑定到Sequence< /code>
,而不是
List
,因此Total[xs]
不起作用。Plus[xs]
或Plus[##]
会。DownValues
,因为它们的构造更简单。其中一些是习惯,因为在旧版本的 Mathematica 中,您可以从纯函数中获得更好的性能。使用纯函数而不是DownValues
仍然是表明您没有对模式匹配调度或非标准评估做任何花哨的事情的好方法。Use a pure function with a
SlotSequence
(usually spelled##
) argument, like so:EDIT:
##
,xs
will be bound to aSequence
, not aList
, soTotal[xs]
won't work.Plus[xs]
orPlus[##]
would.DownValues
for simple things, because they're the simpler construct. Some of this is habit, because in older versions of Mathematica you could get better performance out of pure functions. Using a pure function instead ofDownValues
is still a good way to indicate that you aren't doing anything fancy with pattern-matching dispatch or non-standard evaluation.我不确定这是否是您要问的,但您可以使用双下划线定义一个具有未指定数量的输入的函数:
使用三个下划线表示零个或多个参数:
I'm not sure if this is what you're asking, but you can define a function with an unspecified number of inputs with a double underscore:
Use three underscores to denote zero or more arguments: