MathGroup Archive 1992

[Date Index] [Thread Index] [Author Index]

Search the Archive

[no subject]

thanks to the more than two dozen people who responded to my
inquiry about converting a series to a function.  a few people
asked me to pass on any responses.  I'm attaching a few represetative

-r. kline
rvk at


In[10]:= f = (Normal[Series[Sin[x],{x,0,5}]] /. x->#)&

Out[10]= Normal[Series[Sin[x], {x, 0, 5}]] /. x -> #1 & 

In[11]:= f[x]

              3    5
             x    x
Out[11]= x - -- + ---
             6    120

In[12]:= f[r]

              3    5
             r    r
Out[12]= r - -- + ---
             6    120

The transforming of general expressions into functions is something
that I regularly accomplish with the following inelegant but quick
solution.  Say I have an exression called bob:

In[1]:= bob = Normal[ Series[ Sin[x], {x,0,5} ] ]

             3    5
            x    x
Out[1]= x - -- + ---
            6    120

Now turn that into a function:

In[2]:= fun[z_]:=bob/.{x->z}

It now has all of the properties of ordinary functions of arbitrary arguments:

In[3]:= fun[alpha]

                     3        5
                alpha    alpha
Out[3]= alpha - ------ + ------
                  6       120

In[4]:= D[fun[alpha],alpha]

                 2        4
            alpha    alpha
Out[4]= 1 - ------ + ------
              2        24



     3    5
    x    x
x - -- + ---
    6    120

The definition of the function f is not exactly what you want.


f[x_] := a

The reason is that ":=", or in FullForm SetDelayed[],  has the attribute HoldAll
, which means it does not evaluate it's arguments.  In this example it means tha
t "a" does not evaluate to the series with "x" in it.


{HoldAll, Protected}
You can force evaluation of the right hand side by the following definition:

f1[x_] := Evaluate[ a ]
Note that you now get the desired result.



f1[x_] := x - x^3/6 + x^5/120

Wanting to assign a function to c computed result occurs often.


  You asked about a=Normal[Series[Sin[x],{x,0,5}]] and f[x_]:=a ...
What you want instead of f[x_]:=a is f[x_]:=Release[a]. That should do it.


        Suppose I create a series, using   
        giving a = x - x^3/3! + x^5/5!.                                         
        I now want to use a to create a function of x, which, functionally,     

Define   a=Normal[Series[Sin[x],{x,0,5}]] // InputForm

and then F[x_] := Evaluate[a] // N.


You need to understand the distinction between Set[ ] ("=") and SetDelayed[ ]
(":=").  With SetDelayed[ ] you form a rule with the *unevaluated* right
hand side.  So if you type f[x_] := a you get exactly what you typed in
and since there is no "x" in "a" there is nothing for the pattern matcher
to match.  It doesn't work.  If you type f[x_] = a the "a" first gets
evaluated to x - x^3/3! + x^5/5! and the rule that you get is then
f[x_] = x - x^3/6 + x^5/120.  This rule will then work.


You need to do an immediate assignment:

f[x_] = a    (* NOT f[x_] := a *)

  • Prev by Date: automata package
  • Next by Date: speech processing
  • Previous by thread: automata package
  • Next by thread: speech processing