Q:Proper use of Evaluate[] inside Which[]
- To: mathgroup at smc.vnet.net
- Subject: [mg14400] Q:Proper use of Evaluate[] inside Which[]
- From: sergio_r at my-dejanews.com
- Date: Sun, 18 Oct 1998 15:10:05 -0400
- Organization: Deja News - The Leader in Internet Discussion
- Sender: owner-wri-mathgroup at wolfram.com
(*--------------------------------------------------------------------------- Hello: How can I force the evaluation of an expression inside Which? For instance, the following piece of code: ----------------------------------------------------------------------------*) Clear[Xa, Xb, iIndex, jIndex, X, g, ff, x, f, k]; Xa = 0.0; Xb = 3.0; jIndex = 3; iIndex = 1; X[1] = Xa; X[i_] := X[i-1] + (Xb - Xa)/(jIndex-1) g[j_][x_] := (x-X[j])*(x-j) ff[i_][j_][x_] := Which[ (i == 1 && j != 1), Which[ x >= Evaluate[X[j-1]] && x < Evaluate[X[j]], Evaluate[g[j][x]], x >= Evaluate[X[j]] && x <= Evaluate[X[j+1]], Evaluate[g[i][x]], True, 0], True, 0]; k = 0; Do[For[i=1, i<=(iIndex + 2), i=i+1, k = k + 1; f[k][x_] := Evaluate[ff[i][j][x]]], {j,1,(jIndex-1)}] ?f (*--------------------------------------------------------------------------- produces the following output: In[1]:= $Version[] Out[1]= Solaris 3.0 (November 22, 1996)[] In[2]:= << test.m Global`f f[1][x_] := 0 f[2][x_] := 0 f[3][x_] := 0 f[4][x_] := Which[x >= 0. && x < 1.5, (-2 + x)*(-1.5 + x), x >= Evaluate[X[2]] && x <= Evaluate[X[2 + 1]], (-1 + x)*(0. + x), True, 0] f[5][x_] := 0 f[6][x_] := 0 How come Evaluate[] does not evaluate the second condition? How can I overcome this? I would like to get something like: f[4][x_] := Which[x >= 0. && x < 1.5, (-2 + x)*(-1.5 + x), x >= 1.5 && x <= 3.0, (-1 + x)*(0. + x), True, 0] Sergio Rojas E-mail: sergio at scisun.sci.ccny.cuny.edu PS. Mathematica 2.2 output for this code is: In[10]:= $Version Out[10]= SPARC 2.2 (February 5, 1994) In[11]:= << test.m Global`f f[1][x_] := 0 f[2][x_] := 0 f[3][x_] := 0 f[4][x_] := Which[x >= Evaluate[X[2 - 1]] && x < Evaluate[X[2]], (-2 + x)*(-1.5 + x), x >= Evaluate[X[2]] && x <= Evaluate[X[2 + 1]], (-1 + x)*(0. + x), True, 0] f[5][x_] := 0 f[6][x_] := 0 ----------------------------------------------------------------------------*) -----------== Posted via Deja News, The Discussion Network ==---------- http://www.dejanews.com/ Search, Read, Discuss, or Start Your Own