python-3.x - 多维 Rosenbrock 函数的 Sympy 实现?
问题描述
我最近一直在尝试学习如何在 Python 中使用符号微积分。大多数基本的 SymPy 教程都很简单,但是我将如何表示像 N 维(甚至 N)Rosenbrock 函数这样复杂的东西呢?这个函数有两个主要的复杂因素:它的参数是一个向量,函数访问这个向量中特定的索引元素,并且函数包括一个索引和。
是否可以在 SymPy 中表示类似的东西?如果是这样,您能否提供有关我如何应对这两个挑战的代码片段或提示?
解决方案
您可以使用Sum
and执行此操作Indexed
:
https://docs.sympy.org/latest/modules/concrete.html
https://docs.sympy.org/latest/modules/tensor/indexed.html
In [34]: x = IndexedBase('x')
In [35]: i, n = symbols('i, n', integer=True)
In [36]: Sn = Sum(100*(x[2*i-1]**2 - x[2*i])**2 + (x[2*i-1] - 1)**2, (i, 1, n))
In [37]: Sn
Out[37]:
n
____
╲
╲
╲ ⎛ 2⎞
╱ ⎜ 2 ⎛ 2 ⎞ ⎟
╱ ⎝(x[2*i - 1] - 1) + 100⋅⎝x[2*i - 1] - x[2*i]⎠ ⎠
╱
‾‾‾‾
i = 1
In [38]: Sn.subs(n, 2).doit()
Out[38]:
2 2
2 ⎛ 2 ⎞ 2 ⎛ 2 ⎞
(x[1] - 1) + 100⋅⎝x[1] - x[2]⎠ + (x[3] - 1) + 100⋅⎝x[3] - x[4]⎠
你可以做一些事情,但是在不替换为具体整数的Sn
情况下可以使用哪些操作是有限制的。n
推荐阅读
- python - 使用行的值在 pandas 中创建一个新列
- php - 使用 slugs 而不是 id
- javascript - 如何在“。”之后调用函数,javascript
- python - 使用 tkinter 的 Listbox GUI 从列表中选择项目
- powershell - 使用流水线命令同步写入 foreach 内的命令行
- python-3.x - 无法使用 Selenium-Python 打开 TOR
- android - 在 recyclerview 上更改方向期间再次从 Internet 加载数据
- javascript - 移动 iOS 和 Android Safari/Chrome 之间的 JavaScript 差异
- android - Android应用程序随机关闭而没有任何错误
- android - Flutter - 返回自定义对象的 PlatformChannel 绑定方法