Re: Derivatives D[ ] as Functions inside Tables; Need Help!
- To: mathgroup at smc.vnet.net
- Subject: [mg13210] Re: Derivatives D[ ] as Functions inside Tables; Need Help!
- From: Tobias Oed <tobias at physics.odu.edu>
- Date: Mon, 13 Jul 1998 07:42:58 -0400
- Organization: Old Dominion University
- References: <6nsil0$f32@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
AES wrote:
>
> I'm trying to define a function f1[a,x] and its derivative f2[a,x],
> where from my point of view x is the independent variable and "a" is
> a parameter I'll change on different runs. So I write, as a simple
> example:
>
> Remove["Global`*"]
>
> f1[a_,x_] :=a Cos[x] + a^2 Sin[x]
>
> f1[a,x]
>
> f2[a_,x_] := D[f1[a,x],x]
>
> f2[a,x]
>
> a=2
>
> f1[a,x]
>
> f2[a,x]
>
> Table[{x, f1[a,x], f2[a.x]} // N, {x,0,4}] // TableForm
>
> and everything looks fine -- except the function f2[a,x] will not
> evaluate inside the Table[ ]. I don't understand this -- help in
> understanding will be much appreciated.
>
> siegman at ee.stanford.edu
You defined your f1 and f2 functions using using :=. This means that
the right hand side of the definition is evaluated only when it is
definition is used. This is no problem for f1, but the derivation of
f2 is not done:
In[1]:= f1[a_,x_] :=a Cos[x] + a^2 Sin[x]
In[2]:= f2[a_,x_] := D[f1[a,x],x]
In[3]:= ??f2
Global`f2
f2[a_, x_] := D[f1[a, x], x]
Everything looks nice when you call f2 in such a way that the
derivation can be done once the arguments are substituted:
In[4]:= f2[b,z] //InputForm
Out[4]//InputForm= b^2*Cos[z] - b*Sin[z]
But when you give numerical arguments to your f2, the derivation cannot
be done:
In[5]:= f2[3,7]
General::ivar: 7 is not a valid variable.
Out[5]= D[3 Cos[7] + 9 Sin[7], 7]
The solution is to use = instead of := in your definition of f2
In[6]:= f3[a_,x_] = D[f1[a,x],x] // InputForm
Out[6]//InputForm= a^2*Cos[x] - a*Sin[x]
so that
In[7]:= f3[3,7]
Out[7]//InputForm= 9*Cos[7] - 3*Sin[7]
and it also works in tables:
In[8]:= Table[{x, f1[2,x], f3[2,x]} // N, {x,0,4}] // TableForm
Out[8]//TableForm= 0 2. 4.
1. 4.44649 0.478267253856766
2. 2.8049 -3.483182199839933
3. -1.4155 -4.242210002521516
4. -4.3345 -1.100969492838591
Hop this helps Tobias.