在 Mathematica 中自动生成和

2024-01-16

这是我在实现的过程中遇到的一个设计问题广义分配律 https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.125.8954。假设需要自动生成如下形式的表达式


(source: yaroslavvb.com http://yaroslavvb.com/upload/sum-prod-formula.png)

总和、固定变量和“求和”变量中的项是为每个此类表达式自动生成的,并且“f”函数是单独定义的。要生成上面的表达式,我可能需要调用

sumProduct(factors,fixedVariables,fixedValues,freeVariables,freeRanges)

where

factors={{1,4},{3,4},{3,4,5}}
fixedVariables={1,3}
fixedValues={-1,9}
freeVariables={4,5}
freeRanges={Range[5],Range[6]}

该函数的输出将等于

Total[{f14[-1,1]f34[9,1]f345[9,1,1],f14[-1,2]f34[9,2]f345[9,2,1],....}]

f 项的表示可能不同,即 f[{1,4},{-1,1}] 而不是 f14[-1,1]。使用 Integer 来引用每个变量也只是一种设计选择。

谁能建议一种优雅的方法来实现 sumProduct ?

编辑 11/11Janus 的解决方案,为了可读性而重写

factors = {{1, 4}, {3, 4}, {3, 4, 5}};
vars = {{1, {-1}}, {3, {9}}, {4, Range[5]}, {5, Range[6]}};

(* list of numbers => list of vars *)
arglist[factor_] := Subscript[x, #] & /@ factor;

(* list of factors => list of functions for those factors *)
terms = Apply[f[#], arglist[#]] & /@ factors;

(* {var,range} pairs for each variable *)
args = {Subscript[x, #1], #2} & @@@ vars;

Sum[Times @@ terms, Sequence @@ args]

我会将固定变量和自由变量放在一起,并将它们全部指定在列表中:

variables={{1,{-1}},{3,{9}},{4,Range[5]},{5,Range[6]}};

那么你的sumProduct可以非常简洁地实现

sumProduct[f_, factors_, vars_] := Module[{x}, Sum[
   Times @@ ((Subscript[f, ##] @@ (Subscript[x, #] & /@ {##}) &) @@@ factors),
   Sequence @@ ({Subscript[x, #1], #2} & @@@ vars)]]

这被称为sumProduct[f,factors,variables]吐出一句长话:

Subscript[f, 1,4][-1,1] Subscript[f, 3,4][9,1] Subscript[f, 3,4,5][9,1,1]+....

这就是你所追求的吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Mathematica 中自动生成和 的相关文章

  • 模式匹配不等式

    我想从不平等的实例中提取论据 以下不起作用 知道为什么以及如何解决它吗 Inequality 1 Less x Less 2 Inequality a c e gt a c e Inequality 1 Less x Less 2 Hold
  • Mathematica 中的空值和非空值测试

    在 Mathematica 中测试某个值是否为 Null 的最佳 最干净 建议的方法是什么 并且不为空 例如 a Null b 0 f n If n Null 1 2 f a f b 结果是 1 If 0 Null 1 2 我本来期望 f
  • C# 中的复杂计算

    最好的 最有效的 工具是什么 NET C 用于计算 积分 偏导数 其他不平凡的数学 人们能否对 Mathematica 和 Matlab 及其集成发表评论C Math NET http www mathdotnet com是一个用 C 编写
  • Mathematica 中的条件数据操作

    我正在努力准备高效数据分析的最佳工具在数学中 我有大约 300 列和 100 000 行 最好的技巧是什么 删除 提取 或简单地 考虑 数据结构的部分 用于绘制例如 我能想到的最棘手的例子之一是 给定一个数据结构 对于第 2 列中的值等于
  • 对嵌套列表内的列表进行排序

    我有一个嵌套列表 9 8 7 8 7 6 7 6 5 6 5 4 5 4 3 4 3 2 3 2 1 我需要对列表中的列表进行排序才能创建 7 8 9 6 7 8 5 6 7 4 5 6 3 4 5 2 3 4 1 2 3 我该怎么做呢 你
  • 对函数体评估感到困惑

    我对以下行为感到困惑Function In 1 InlineCellInMessage Function expr DisplayForm Cell BoxData MakeBoxes expr StandardForm Input Hol
  • 设计方法:过载与开关?

    关于封装设计的性能和可扩展性 最好是 重载 函数名称 让 Mathematica 根据模式 条件 测试以及系统对定义的排序方式来确定要使用哪个版本 或者使用 Switch 或类似命令 构建单个函数来直接求值 Mathematica 的表达能
  • Mathematica 下调 Lhs 值

    有谁知道 Mathematica 中是否有一个内置函数可以获取 downvalue 规则的 lhs 没有任何保留 我知道如何编写代码来做到这一点 但这对于内置程序来说似乎已经足够基本了 例如 a 1 2 a 2 3 BuiltInIDoNo
  • 在mathematica中使用Input[]输入数据

    我怎样才能在这段代码中使输入命令对话框中的文本像这样 输入 1 元素 输入 2 元素 For k 1 k n k br Input Enter the i element AppendTo x br 确保您的变量匹配 您可以使用Row来构建
  • PlotLegends 使 Manipulate[] ing 图形变得慢如爬行

    我设置了一个简短的程序 使用 Manipulate 显示具有不同参数的相同函数的三个图 我想用参数的值来标记每个函数 我的出发点是让一个传奇人物出现 在绘图中添加 PlotLegend 会导致 Mathematica 变得异常缓慢 我的代码
  • 将符号暴露给 $ContextPath

    有多种Internal 有用的上下文函数 例如InheritedBlock https stackoverflow com questions 4198961 what is in your mathematica tool bag 568
  • 为什么即使仅使用一种规则和一种表达式,Replace 和 ReplaceAll 也会给出不同的结果?

    也许有人可以向我解释为什么Replace给出了不同的答案ReplaceAll 即使我使用一条规则 并且我认为我有一种表达方式 根据文档 ReplaceAll looks at each part of expr tries all the
  • 解决电力塔

    a 2 Power 10 6 10 9 3 Power 4 9 7 5 TwoTower n Nest 2 1 n 最小的是什么n这样TwoTower n gt a This question http www quora com How
  • 如何在 Mathematica 中将包含小数点的字母数字(参考)数字转换为字符串

    我有以下类型 DAA76647 1 的参考号 我想将其原封不动地转换为 Mathematica 中的字符串 That is myfn DAA76647 1 给出作为输出 DAA76647 1 是否有捷径可寻 输入不能是字符串 除了转换为字符
  • Mathematica 中的输入/输出单元标签是由什么生成的以及如何向它们添加自动计时?

    当 Mathematica 计算单元格时 它会为输入单元格和输出单元格提供细胞标签 http reference wolfram com mathematica ref CellLabel htmls In Line and Out Lin
  • NDS 求解波动方程时的不稳定性

    我正在尝试使用NDSolve求解波动方程 以检查使用它是否比我的旧特征方程更容易和 或更快 方法实施 我得到了很多特征方法没有得到的不稳定性 并且由于这些是简单的方程 我想知道出了什么问题 希望不是问题的物理方面 ans Flatten N
  • 在 Mathematica 中使用图形进行渐变填充

    我如何使用以下内容创建Rectangle in Graphics Using Polygon 你可以 Graphics EdgeForm Black Polygon 0 0 3 0 3 1 0 1 VertexColors gt White
  • 如何在mathematica中自动加载用户定义的函数

    我有一堆在 mathematica 中经常使用的用户定义函数 我想知道是否可以将它们存储在单独的文件中 并且 mathematica 会在启动时加载它们并将它们视为内置函数 这样每当我创建新的 nb 文件时就不必重复定义 类似于 Matla
  • R 中从右到左的运算符结合性可能吗?

    我是 R 新手 我刚刚发现我患有支架恐惧症 https mathematica stackexchange com a 17315 2266 请参阅链接中的评论 我喜欢这种方式magrittr符号 gt 有效 因为它在某些情况下避免了嵌套括
  • Mathematica 和 MouseListener - 使用 Mma 开发交互式图形

    我想为 Mathematica 3D 图形添加交互性 除了 Manipulate 之外 Manipulate 很酷但有其局限性 考虑 Mathematica 中四个立方体问题的演示的四个示例 单击其中一个立方体即可旋转一个立方体 问题 是否

随机推荐