Re: Multiline functions
- To: mathgroup at smc.vnet.net
- Subject: [mg112768] Re: Multiline functions
- From: Raffy <adraffy at gmail.com>
- Date: Thu, 30 Sep 2010 04:49:30 -0400 (EDT)
- References: <i7uses$ram$1@smc.vnet.net>
On Sep 29, 1:13 am, Sam Takoy <sam.ta... at yahoo.com> wrote: > Hi, > > I'm not sure if I'm approaching functions that require several lines > properly. Here's my approach to solving Laplace's equation on the unit > circle with Dirichlet boundary conditions. (Construct partial Fourier > series, multiply each term by r^n and sum.) Something about my code > seems terribly awkward. I'm looking for comments on how to improve it. > (Just the code. I know that mathematically there may be better ways.) > > Thanks in advance, > > Sam > > FourierCoefficients[f_, order_] := ( > out = {1/(2 Pi) Integrate[f[a], {a, -Pi, Pi}]}; > For[n = 1, n < order, n = n + 1, > out = Append[ > out, {1/Pi Integrate[f[a] Cos[n a], {a, -Pi, Pi}], > 1/Pi Integrate[f[a] Sin[n a], {a, -Pi, Pi}]}]]; > out) > > LaplaceOnUnitCircle[phi_, order_] := ( > f[r_, alpha_] = ( > fc = FourierCoefficients[phi, order]; > sum = fc[[1]]; > For[n = 1, n < order, n = n + 1, > sum = > sum + r^n (fc[[n + 1]][[1]] Cos[n alpha] + > fc[[n + 1]][[2]] Sin[n alpha]); > ]; > sum); > f > ); > LaplaceOnUnitCircle[Cos, 5][r, \[Alpha]] > > Answer: r Cos[\[Alpha]] - correct. ClearAll[LaplaceOnUnitCircle]; LaplaceOnUnitCircle[phi_, order_Integer] := With[{ off = Integrate[phi[a], {a, -Pi, Pi}]/(2 Pi), cos = Table[Integrate[phi[a]*Cos[n*a]/Pi, {a, -Pi, Pi}], {n, order}], sin = Table[Integrate[phi[a]*Sin[n*a]/Pi, {a, -Pi, Pi}], {n, order}] }, Function[{r, a}, off + Sum[r^n*(cos[[n]]*Cos[n*a] + sin[[n]]*Sin[n*a]), {n, order}]] ]; You'll notice that LaplaceOnUnitCircle[Cos, 5] returns a function that already has some of the problem evaluated. Also, this function isn't bound to any global symbol (like f in your example), which means you can do: f1 = LaplaceOnUnitCircle[Cos, 5]; f2 = LaplaceOnUnitCircle[Cos, 10]; With is perfect for injecting evaluated results into an unevaluated/ held expression.