zhouguang 发表于 2013-10-16 11:02:15

关于Mathematica软件的命令使用的讨论

使用了Mathematica软件有一段时间了,发现用一些命令的组合可以实现一些比较基础的功能,但是觉得方法未必是最优的,希望大家能够讨论一下有没有更好的方法,不知道大家有没有兴趣。
Q1:
描述:已知一个List为si,列出每个元素出现的次数。
输入:si={1,2,1,1,"a",{2},1,2,2}
输出:so={{1, 4}, {2, 3}, {"a", 1}, {{2}, 1}}
方法:Map[{First[#], Length[#]} &, Split]]
Q2:
描述:已知一个List为si和函数f,且f==f,求Outer,但是,结果中不包括f,且f和f只出现一次。
输入:si={1,2,5}
输出:so={f, f, f}
方法:Map]]], si[[#[]]]] &, Subsets], {2}]]
Q3:
描述:用第一个元素来汇总。
输入:si = {{1, 1}, {2, "Two"}, {3, 3}, {1, "One"}, {1, "yi"}, {2, "1+1"}, {5, "5th"}, {3, {"x", "x", "x"}}}
输出:so={{1, {1, "One", "yi"}}, {2, {"1+1", "Two"}}, {3, {3, {"x", "x", "x"}}}, {5, {"5th"}}}
方法:Map[{First], Last[#]} &, Map, First[#1] == First[#2] &]]]

上面是3个例子,请大家看看。呵呵。

chyanog 发表于 2013-10-16 15:13:51

si = {1, 2, 1, 1, "a", {2}, 1, 2, 2};
Tally

si = {1, 2, 5};
f @@@ Subsets
f @@@ Table], {i, Reverse@si}, {j, si}]

si = {{1, 1}, {2, "Two"}, {3, 3}, {1, "One"}, {1, "yi"}, {2,"1+1"}, {5, "5th"}, {3, {"x", "x", "x"}}};
{#[], #[[;; , 2]]} & /@ GatherBy

mathematica 发表于 2013-10-17 10:12:13

Tally@{1,2,1,1,"a",{2},1,2,2}
运行结果:
{{1, 4}, {2, 3}, {"a", 1}, {{2}, 1}}

mathematica 发表于 2013-10-17 10:13:14

如何用mathematica软件统计表中的元素的个数
http://bbs.emath.ac.cn/forum.php?mod=viewthread&tid=5123&extra=page%3D1

昨天我就想回复你的!

zhouguang 发表于 2013-11-4 10:59:37

Q4:
描述:将数字转换为字母,FromCharacterCode。
输入:si={{65, {66, {70}, 69}}, 67}
输出:so={{"A", {"B", {"F"}, "E"}}, "C"}
Q5:
描述:在一定条件下,求f。
输入:si=f,x。(要求在x之后除了回车没有任何字符。)
输出:so=f

zeroieme 发表于 2013-11-4 13:25:41

借楼提问:
怎么让Mathematica求多元多项式的指数
比如a x y + x 以x、y为未知数。Exponent得到x、y各自独立结果,不是 2。

我现在采取换元{x->z x ,y->z y}再求Exponent[%,z]

mathematica 发表于 2013-11-4 13:59:57

zhouguang 发表于 2013-11-4 10:59
Q4:
描述:将数字转换为字母,FromCharacterCode。
输入:si={{65, {66, {70}, 69}}, 67}


Clear["Global`*"];(*Clear all variables*)
fun:=Module[{a=a0},
               If[Not@ListQ@a,(*如果a不是一个表*)
                     FromCharacterCode@a,(*由数字到字母*)
                     (*如果a是表,但是a的第一个元素不是表*)
                     If&&(Not@ListQ@First@a),
                         Join],
                         Map
                     ]
               ]
]
si={{65, {66, {70}, 69}}, 67};
Map

结果:{{"A", {"B", {"F"}, "E"}}, "C"}

chyanog 发表于 2013-11-4 14:02:49

zhouguang 发表于 2013-11-4 10:59
Q4:
描述:将数字转换为字母,FromCharacterCode。
输入:si={{65, {66, {70}, 69}}, 67}

si = {{65, {66, {70}, 69}}, 67};
si /. x_Integer :> FromCharacterCode

Clear
f := FromCharacterCode;
f := x;
f //@ si

g := FromCharacterCode
g := x
g //@ si

mathematica 发表于 2013-11-4 14:10:37

(*利用递归解决问题!*)
Clear["Global`*"];(*Clear all variables*)
fun:=Module[{a=a0},
               If[Not@ListQ@a,(*如果a不是一个表*)
                     FromCharacterCode@a,(*由数字到字母*)
                     (*如果a是表,但是a的第一个元素不是表*)
                     If&&(Not@ListQ@First@a),
                         Join],
                         (*如果a是表,且a的第一个元素还是表*)
                         Map
                     ]
               ]
]
si={{65, {66, {70}, 69}}, 67};
Map

mathematica 发表于 2013-11-4 14:33:15

第二个版本的代码
(*利用递归解决问题!*)
Clear["Global`*"];(*Clear all variables*)
fun:=Module[{a=a0},
               If[Not@ListQ@a,(*如果a不是一个表*)
                     FromCharacterCode@a,(*由数字到字母*)
                     Prepend,fun@First@a],
               ]
]
si={{65, {66, {70}, 69}}, 67};
Map
页: [1] 2 3
查看完整版本: 关于Mathematica软件的命令使用的讨论