Por que Replace e ReplaceAll fornecem resultados diferentes, mesmo quando apenas uma regra e uma expressão são usadas?
Talvez alguém possa me explicar por queReplace
dá uma resposta diferente deReplaceAll
, mesmo usando uma regra e, penso, tenho uma expressã
De acordo com a documentação:
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
e para Substituir
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.
Tenho esta expressão:
z/(0.5 -1.4 z+z^2)
e esta regra
z -> Exp[I*w]
A seguinte entrada
Clear[z]
hz = z/(0.5 - 1.4 z + z^2);
Replace[hz, z -> Exp[I*w]]
ReplaceAll[hz, z -> Exp[I*w]]
gera este resultado:
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*)
Então,ReplaceAll
fez o trabalho que eu esperava, mas nãoReplace
. A única coisa que acho que estou perdendo aqui é o que faz das partes uma expressão. Então, talvez hz não seja a expressão "um"? Ok, tudo bem, mas deveria ter sido capaz de aplicar a regra pelo menos a uma parte dela. Mas não fez nenhuma substituição em nenhum lugar
FullForm[hz]
Times[z,Power[Plus[0.5`,Times[-1.4`,z],Power[z,2]],-1]]
Não é uma expressão hz? Caso contrário, quantas partes possui? É o número de folhas no final do gráfico gerado porTreeForm[hz]
? Nesse caso, vejo 3 'z' lá eReplace[]
deveria então ter substituído um deles
Eu sempre usei/.
sem pensar nisso, que é o mesmo queReplaceAll
, mas agora eu useiReplace[]
pensar é o mesmo que/.
, Eu encontrei isso e notei as diferentes funções. (tantas funções para aprender, tão pouco tempo:)