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

其实我们完全没必要展开所有的项.
只需要计算 每一个 参与乘积的因子的最高次幂就行了.
页: 1 [2] 3
查看完整版本: 关于Mathematica软件的命令使用的讨论