chyanog
发表于 2013-11-4 15:09:57
mathematica 发表于 2013-11-4 14:33
第二个版本的代码
(*利用递归解决问题!*)
Clear["Global`*"];(*Clear all variables*)
这个实现不错,改写一下:
Clear["`*"];
fun[{x_, xs___}] := Prepend
fun := FromCharacterCode@x
si = {{65, {66, {70}, 69}}, 67};
fun /@ si
chyanog
发表于 2013-11-4 16:08:09
chyanog 发表于 2013-11-4 14:02
@Mathematica,似乎没什么解释的,主要就模式匹配和RuleBased,不熟悉的符号或函数,按F1看看,然后试几个例子就明白了,判断整数是或小数的试试IntegerQ,NumericQ,Element,NumberQ等
mathematica
发表于 2013-11-4 16:29:00
chyanog 发表于 2013-11-4 16:08
@Mathematica,似乎没什么解释的,主要就模式匹配和RuleBased,不熟悉的符号或函数,按F1看看,然后试几 ...
@chyanog
代码1:
If&//@{{65, {66, {70}, 69}}, 67}
代码2:
If&//@{{65, {66, {70}, 69}}, 67}
你觉得这个如何?
mathematica
发表于 2013-11-4 16:31:25
chyanog 发表于 2013-11-4 16:08
@Mathematica,似乎没什么解释的,主要就模式匹配和RuleBased,不熟悉的符号或函数,按F1看看,然后试几 ...
不可否认,这个也马马虎虎是一种新的代码,虽然是"抄袭"你的
wayne
发表于 2013-11-4 22:05:37
mathematica 发表于 2013-11-4 16:29
@chyanog
代码1:
If&//@{{65, {66, {70}, 69}}, 67}
有点大动干戈了吧.
本质上就是让FromCharacterCode 具有 Listable 的属性.所以:
SetAttributes;
FromCharacterCode
wayne
发表于 2013-11-4 22:21:24
zeroieme 发表于 2013-11-4 13:25
借楼提问:
怎么让Mathematica求多元多项式的指数
比如a x y + x 以x、y为未知数。Exponent
既然Mathematica的 Exponent不支持多元函数,我们不妨自己写一个.
基本思路 就是获取所有的项,然后将所有自变量赋成一个变量,再用Exponent.
f = Max /. Thread[{x, y} -> t], t]] &
MonomialList有一个用来排序的选项,可以按照 total degree来排序, 排序完第一个就是最高次项了.
MonomialList[#, {x, y}, "DegreeLexicographic"]
mathematica
发表于 2013-11-5 09:11:09
Map &, {{65, {66, {70}, 69}},
67}, Infinity]
这也是一种办法!
zeroieme
发表于 2013-11-6 11:48:58
wayne 发表于 2013-11-4 22:21
既然Mathematica的 Exponent不支持多元函数,我们不妨自己写一个.
基本思路 就是获取所有的项,然后将所 ...
但MonomialList容易溢出
wayne
发表于 2013-11-10 11:45:36
zeroieme 发表于 2013-11-6 11:48
但MonomialList容易溢出
我测试了一下,发现3^2000项,前面提供的代码,MonomialList 运行需要55秒钟,
而下面的代码需要41秒钟
eqs = (a x y + y + x)^2000;
Total[]]]
wayne
发表于 2013-11-10 11:48:28
其实我们完全没必要展开所有的项.
只需要计算 每一个 参与乘积的因子的最高次幂就行了.