Compiled function
- To: mathgroup at smc.vnet.net
- Subject: [mg93776] Compiled function
- From: SigmundV <sigmundv at gmail.com>
- Date: Tue, 25 Nov 2008 07:19:23 -0500 (EST)
Dear group, Consider the following: derData[data_, h_] := (Drop[data, 1] - Drop[data, -1])/h; front = With[ {fa = Function[{x, y}, Piecewise[{{0, 2 <= x <= 3 && 2 <= y <= 3}}, 1], Listable], fc = Function[{x, y}, (x y + 10)^0]}, Compile[{{r, _Real, 2}, {dt, _Real}, {\[Theta], _Real}}, Module[{x, y, a, b, c, C = Cos[\[Theta]], S = Sin[\[Theta]], da, db, dc, dx, dy, cxy, xy, cxyxy, xnew, ynew, dphi = 2 \[Pi]/1000}, x = r[[All, 1]]; y = r[[All, 2]]; dx = derData[x, dphi]; dx = Join[dx, {dx[[1]]}]; dy = derData[y, dphi]; dy = Join[dy, {dy[[1]]}]; a = fa[x, y]; b = 2 a; c = fc[x, y]; da = derData[a, dphi]; da = Join[da, {da[[1]]}]; db = 2 da; dc = derData[c, dphi]; dc = Join[dc, {dc[[1]]}]; cxy = dc dt + S dx + C dy; xy = C dx - S dy; cxyxy = a^2 cxy^2 + b^2 xy^2; xnew = x + dt c S + dt^2 (-a^2 b db (dc dt S + dx))/cxyxy + dt (a^2 C cxy - b^2 S xy) Sqrt[cxyxy - a^2 db^2 dt^2]/cxyxy; ynew = y + dt c C + dt^2 (-a^2 b db (dc dt C + dy))/cxyxy - dt (a^2 S cxy + b^2 C xy) Sqrt[cxyxy - a^2 db^2 dt^2]/cxyxy; Transpose[{xnew, ynew}] ] ] ]; As you see, fa is a piecewise function, but the module won't compile. However, when fa is a continuous function, like Exp[-(x^2 + y^2)], the module compiles without problems. Can anyone shed some light on this? Why does the compilation work in the latter case, but not in the first? King regards, Sigmund Vestergaard