segunda-feira, 26 de janeiro de 2009

Jardinagem com Mathematica

Muitos exemplos de códigos avançados no Mathematica usam os comandos Reap e Sow. Mas afinal, o que é isto?

Sow (plantar) e Reap (colher) servem para "pescar" informações de dentro de laços (ou similares). Parece bobo, mas essa dupla funciona como um try-catch bombado.

Por exemplo, você pode colher só aonde tem "x" (último argumento).

In[1]:= Reap[Sow[1, x]; Sow[2, y]; Sow[3, x], x]
Out[1]= {3,{{1,3}}

Ou só os valores pares:

In[1]:= Reap[Sum[If[EvenQ[#], Sow[#], #]& [i^2 + 1], {i, 10}]]
Out[1]= {395, {{2, 10, 26, 50, 82}}}

Ou acompanhar as iterações de um algoritmo (veja o uso do ":>", que é outro bizu):

In[1]:= Reap[FindRoot[Cos[x] x, {x, 1}, StepMonitor :> Sow[x]]]

ou 

In[1]:= ListPlot[Reap[NIntegrate[1/Sqrt[x], {x, -1, 0, 1},
EvaluationMonitor :> Sow[x]]][[2, 1]]]

Nenhum comentário:

Postar um comentário