首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合模式收集术语

组合模式收集术语
EN

Stack Overflow用户
提问于 2011-12-08 16:14:01
回答 1查看 641关注 0票数 1

我有一个Mathematica表达式(称为expr),它是许多项的总和。此外,我有一个列表(称为var),其中一些变量和函数可能出现在其中一些术语中。

我想做的第一件事是提取包含一定次数的变量和函数的术语。例如,如果是var = {a, f[_]},那么我可能想提取所有包含变量a的所有术语,其中包含变量a一次,函数f提取2次。f[f[a + b]]是满足这些条件的术语的一个例子。

我想做的第二件事是创建一个列表(称为输出),其中包含原始表达式的所有术语。该列表应该按照包含变量和变量中指定的函数的次数对术语进行分组。对于var = {a, f[_]},输出将是output = {{sum of those terms containing 0 * a and 0 * f[_], "sum of..." 1 * a and 0 f, "sum of..." 2a 0f, ... }, {"sum of..." 0a 1f, "sum of..." 1a, 1f, ... }}

给定问题2的解决方案,很容易解决问题1:要提取表达式的某个术语,只需从列表输出中选择正确的元素即可。出于这个原因,我试图解决问题2。为了保持清晰,我从一个简单的表达式开始,只包含一个术语。首先,我生成一个模式列表。

代码语言:javascript
复制
expr = f[a + f[y]]
var = {{a, 1}, {f[_], 3}}
basicpattern[symbol_, n_, term_] = 
Hold[Table[Count[{term}, symbol, 10] == i, {i, 0, n}]]
basicpattern[#1, #2, expr] & @@@ var // ReleaseHold

输出是

代码语言:javascript
复制
{{False, True}, {False, False, True, False}}

其解释是:变量a出现一次,函数f出现2次。现在,我想利用基本模式中列表的外部乘积来组合模式。然后,新的模式列表可以与案例一起使用,以从expr中选择术语并将它们放入列表中。

在这里,我被困住了:如何将列表的外部乘积放在列表中?我猜

代码语言:javascript
复制
Outer[And, {{True, False}, {True, False, False, False}}, 1]

但这并没有给出八个条款。

更新

在Sjoerd的帮助下,我走得更远了一点。

代码语言:javascript
复制
expr = f[a + f[y]];
var = {{a, 1}, {f[_], 3}};
basicpattern[symbol_, n_, term_] := 
Table[Hold[Count[{term}, symbol, 10]] == i, {i, 0, n}];
basicpattern[#1, #2, expr] & @@@ var;
Outer[And, ##] & @@ %;
test = %[[2, 3]]
%// ReleaseHold

作为输出

代码语言:javascript
复制
Hold[Count[{f[a + f[y]]}, a, 10]] == 1 &&
Hold[Count[{f[a + f[y]]}, f[_], 10]] == 2
True

其解释是f[a + fy]包含一次a和两次f_。外部产品是这样的测试列表。

假设我将费用改为

expr = f[a + fy] + gz +y^2-13x+ 12a +a fx

如何使用测试内容收集包含一次a和两次f_的所有术语

EN

回答 1

Stack Overflow用户

发布于 2011-12-09 21:26:08

你的问题说来话长,但我想你的问题归根结底是:

如何将列表的外部乘积取在列表中?

如果这是你唯一想知道的事的话。可以简单地这样做:

代码语言:javascript
复制
booleanLists = {{True, False}, {True, False, False, False}};

Outer[And, ##] & @@ booleanLists

(* ==>  {{True, False, False, False}, {False, False, False, False}} *)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8434033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档