Mathematica符号和符号

时间:2013-06-20 20:45:40

标签: syntax wolfram-mathematica symbols

我对Mathematica比较陌生,虽然我熟悉很多编码惯例,但我对Mathematica使用@,@,#,%和&等符号的方式一无所知。在命令中。具体来说,我正在寻找帮助,使用GatherBy对包含i对的列表cases的对进行分组。

我一直在使用e = GatherBy[cases, MemberQ[#, i] &];,当我在我的函数范围之外测试它时,它正常工作,但当放入功能模块时,而不是搜索cases,它正在搜索一些我在我的函数中声明的其他列表。

我认为这种情况正在发生,因为我滥用#符号(也可能是&符号)。

请帮助指导我做错的事情和/或所有这些符号的某些文档及其在Mathematica中的用法。

非常感谢您提供给我的任何和所有帮助。

干杯!

修改

以下是对我的功能的更多解释

distill[mono_] := Module[{cases, e, f, g, h, check, res},


cases = FactorList[mono];



cases = Cases[cases, {P[_Integer, _Integer], _}];


(*Flatten the list*)

cases = Flatten[cases];

(*Remove the extra 1s *)
cases = Cases[cases, P[_Integer, _Integer]];


cases = cases //. P[r_, q_] :> {r, q};


(*Create equivalance list on the points*)

映射值是一个全局数组,包含对中的所有可能值

For[i = mappedVals[[1]], i <= Length[mappedVals]/2, i++,

Print[i];

e = GatherBy[cases, MemberQ[#, i] &];
If[Position[e[[1]], i] == {}, f = Flatten[e[[2]]], 
 f = Flatten[e[[1]]]];
If[Position[e[[1]], i] == {}, check = 0, check = 1];

g = Union[f];

If[check == 0, h = e[[1]], h = e[[2]] ];

cases = Append[h, g];
];


cases

];

我希望将此函数传递给单项式,例如-q P [41,42] P [41,43] P [42,43],并最终在这些点上创建等价类。 P[a,b]表示在我描绘的模型中,节点a和节点b之间存在连接。在这个例子中,我希望输出的等价类是{41,42,43},因为41连接到42,它连接到43.对于更多非平凡的例子,我希望对P[41,42]P[41,43]P[42,43]P[44,45]P[44,45]到产生等价类{{41,42,43},{44,45}},因为44和45属于它们自己的类型并且没有连接到任何其他值。我通过将单项式变成因子列表,仅选择对,将对转换为更可行的格式,然后启动我的算法来构造类来创建这些等价类。这是算法的要点......

- 以全局列表mappedVals中的第一个可能值开始(包含对中的所有可能值)

- 使用GatherBy收集包含测试值的所有点(旁注:GatherBy并不总是将包含值的对作为返回列表中的第一个元素,因此我使用了{{ 1}}函数检查两个元素中哪一个包含测试值的对)

- 形成包含测试值的所有对的并集,然后用对的并集替换所有对

- 对所有可能的值重复此操作,直到PositionQ包含我前面提到的定义所定义的所有等价类

我的错误显示为cases,其中41是第一个测试值,因为它位于Set::partw: Part 41 of {-q^4 (1/q+q) (1/T+T),2 q^2 (1/q+q) (1/T+T),-q P[41,42] P[41,43] P[42,43],-q (1/T+T)^3,-q P[41,42] P[41,43] P[42,43],(1/q+q) (1/T+T)} does not exist. >>中,而长,恶心的集合是我的代码中其他位置使用的全局变量。

我认为我的问题在于调用函数mappedVals[[1]]。我正在尝试搜索e = GatherBy[cases, MemberQ[#, i] &];形式为cases的对象,例如包含41个。

很抱歉这么啰嗦,但我真的很感激任何帮助。

0 个答案:

没有答案