Re: Pattern matching "on the fly"
- To: mathgroup at smc.vnet.net
- Subject: [mg30111] Re: [mg30100] Pattern matching "on the fly"
- From: Andrzej Kozlowski <andrzej at bekkoame.ne.jp>
- Date: Sat, 28 Jul 2001 22:08:49 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
I think you are correct and Mathematica has no built in way to accomplish this but it is pretty easy to write your own program which will do just this. In[1]:= myexpand[f_,n_]:= Fold[Expand[#1^2*If[#2==1,f,1]]&,f,Rest[IntegerDigits[n,2]]] In[2]:= x^n_ ^:=0 /; n> 2; In[3]:= myexpand[(1+x),1000000]//Timing Out[3]= 2 {0.03 Second, 1 + 1000000 x + 499999500000 x } I doubt that Reduce can do this faster. Andrzej Kozlowski Toyama International University JAPAN http://platon.c.u-tokyo.ac.jp/andrzej/ On Saturday, July 28, 2001, at 02:51 PM, Tony MacKenzie wrote: > Hello from down under, > > I am trying to use Mathematica's pattern matching abilities to achieve > something I can do using the computer algebra software REDUCE. I want > to do > this because I need to take advantage of the powerful numerical > algorithms > of Mathematica. > > I want to set all powers of some variable greater than a certain value > to > zero, but I want mathematica to apply this pattern matching "on the fly" > (while an expression is being evaluated, not after the expression has > been > evaluated). > > I'll give a quick example. I want to set all powers of x greater than 2 > to > zero i.e. x^3=>0, x^4=>0 and so on. In REDUCE I can use the following > statement > > let x^3=>0; (* This replaces x^3 with 0, x^4 with 0 and so on*) > Then if I evaluate (1+x)^1000000, I quickly (a few seconds) find this > expression gives 499999500000*x^2 + 1000000*x + 1. The pattern > matching is > done as the expression is being expanded. > > Now in Mathematica I have tried x^n_ ^:=0 /; n> 2; This works, but it > only > appears to be applied after an expression has been expanded. For > example if > I try > > x^n_ ^:=0 /; n> 2; > Expand[(1+x)^1000000]; > > in Mathematica, the evaluation is very slow (which I think is because > the > pattern matching is applied after the expansion and not on the fly). > > Any help would be greatly appreciated as I am very new to Mathematica. > > Tony MacKenzie > University of Southern Queensland, Australia > > > > > >