Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2009

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

Search the Archive

Re: Error when working with a derivative

  • To: mathgroup at smc.vnet.net
  • Subject: [mg104964] Re: Error when working with a derivative
  • From: Peter Breitfeld <phbrf at t-online.de>
  • Date: Sun, 15 Nov 2009 05:55:55 -0500 (EST)
  • References: <hdlk4k$hcb$1@smc.vnet.net>

You are right.
You used SetDelayed (:=) to define DerivMuVaF. SetDelayed doesn't
evaluate its arguments (hat Attribute HoldAll), so the call
DerivMuVaF[1,2] does the following:
1. The values 1 and 2 are plugged in the rhs, giving D[MuVaF[1,2],1]
2. Then MuVaF[1,2] will be evaluated to 10.
So you asked for D[10,1] which is nonsense.


The easiest way to avoid this is to use Set (=) instead of SetDelayed

DerivMuVaF[ex_ ,ey_] = D[MuVaF[ex,ey],ex]

Another way is to hide the variables using a Module:

DerivMuVaF[ex_,ey_]:=Module[{u,v},D[MuVaF[u,v],u]/.{u->ex,v->ey}]

Keep in mind, that Set usually gives the same results as SetDelayed, if
at the moment of definition no parameter has a value associated with it.
Look at the output of the following:

Clear[x]
f[x_] = x^2 + 1
f[2]
x = 13
f[x]
f[4]

g[x_] := x^2 + 1
g[2]
g[x]
g[4]

but (x now has a the OwnValue 13):
h[x_] = x^2 + 1
h[2]
h[x]


Vicent wrote:

> Hello.
>
> This is my first message to the list.
>
> I work with Mathematica 7.0.0 on Windows.
>
> I work with a multiple-variable function, say "MuVaF", and I want to
> define a function which is the partial derivative with respect to one
> of the variables. I tried with this:
>
>     MuVaF[ex_, ey_] := ex^2 + ey^2 + ex*ey + ex + ey
>
> Then, if I try to derivate it with respect to "ex":
>
>     D[MuVaF[ex, ey], ex]
>
> I get this:
>
>     1 + 2 ex + ey
>
> Which sound OK to me. But if I try this:
>
>     DerivMuVaF[ex_, ey_] := D[MuVaF[ex, ey], ex]
>
> And then this (trying to evaluate the function for a given point):
>
>     DerivMuVaF[1, 2]
>
> I get an error message:
>
>     General::ivar: 1 is not a valid variable. >>
>
> I think that's because Mathematica is understanding I am trying to
> perform the derivative on "1"; it is expecting to get a variable and I
> am giving a number instead. So, what's the right way to tell
> Mathematica I want to work with the derivative function of a
> previously defined function??
>
> I guess the answer should be easy, but I haven't been able to find it
> out by my own.  :-(
>
> Thank you in advance for your answers!
>
>
> --
> Vicent Giner-Bosch
>

-- 
_________________________________________________________________
Peter Breitfeld, Bad Saulgau, Germany -- http://www.pBreitfeld.de


  • Prev by Date: wavelet
  • Next by Date: Re: Error when working with a derivative
  • Previous by thread: Re: Error when working with a derivative
  • Next by thread: NDSolve problem