【发布时间】:2011-07-26 21:23:35
【问题描述】:
也许有人可以向我解释为什么Replace 给出的答案与ReplaceAll 不同,即使我使用的是一种规则,而且我认为我只有一种表达方式。
根据文档:
ReplaceAll looks at each part of expr, tries all the rules on it, and then goes on to
the next part of expr. The first rule that applies to a particular part is used; no
further rules are tried on that part, or on any of its subparts
用于替换
A list of rules can be given. The rules are tried in order. The result of the first
one that applies is returned. If none of the rules apply, the original expr is
returned.
我有这样的表达方式:
z/(0.5 -1.4 z+z^2)
还有这条规则
z -> Exp[I*w]
以下输入
Clear[z]
hz = z/(0.5 - 1.4 z + z^2);
Replace[hz, z -> Exp[I*w]]
ReplaceAll[hz, z -> Exp[I*w]]
产生这个结果:
z/(0.5 -1.4 z+z^2) (*from Replace*)
E^(I w)/(0.5 -1.4 E^(I w)+E^(2 I w)) (*from ReplaceAll*)
所以,ReplaceAll 完成了我预期的工作,但不是 Replace。我认为我在这里缺少的唯一一件事是构成表达式的部分。所以也许 hz 不是“一个”表达?好的,很好,但它应该能够将规则至少应用于其中的一部分。但它没有在任何地方做任何替换
FullForm[hz]
Times[z,Power[Plus[0.5`,Times[-1.4`,z],Power[z,2]],-1]]
hz 不是一种表达方式吗?如果不是,它有多少个部分?是TreeForm[hz]生成的图表末尾的叶子数吗?如果是这样,那么我会在那里看到 3 个“z”,然后 Replace[] 应该替换其中一个
我一直用/.不假思索,和ReplaceAll一样,但现在我用Replace[]的想法和/.一样,我发现了这个并注意到了不同的功能。
(要学习的功能太多,时间太少:)
【问题讨论】: