# How to define the derivative of a function as a new function in Maxima

1. Sep 4, 2011

### HotMintea

For example,

F(x) := x^2;
Fx(x) := diff(F(x),x,1);

didn't seem to work, since

Fx(3);

returned an error.

Any help would be appreciated.

2. Sep 4, 2011

### HotMintea

Okay, I'll be more specific. Basically, I'd like to give names to the derivatives of functions. The following is how I tried.

A(x):=A1*exp(%i*k*x)+A2*exp(-%i*k*x);
Ax(x):=diff(A(x), x,1);
B(x):=A2*exp(-%i*k*x);
Bx(x):=diff(B(x),x,1);
C(x):=C1*exp(j*x)+C2*exp(-j*x);
Cx(x):=diff(C(x),x,1);

A(-a/2)=C(-a/2);
B(a/2)=C(a/2);
Ax(-a/2)=Cx(-a/2);
Bx(a/2)=Cx(a/2);

After that I'd like to solve the last 4 equation for A2, C1, and C2 in terms of A1. However, I already have an error for the last 2 expressions [ ev(...) = ev(...) ].

Judging from the error message:

diff: second argument must be a variable; found -a/2
#0: Ax(x=-a/2)
-- an error. To debug this try: debugmode(true);
diff: second argument must be a variable; found a/2
#0: Bx(x=a/2)
-- an error. To debug this try: debugmode(true);

I think the error comes from how I defined Ax(x), Bx(x), and Cx(x).

But I still cannot figure out how to fix it. Any help would be appreciated.

3. Sep 4, 2011

### Dickfore

Are we supposed to know the syntax for 'Maxima'? Is it a very common software package?

4. Sep 4, 2011

### Simon_Tyler

@Dickfore: Maxima is one of the more common opensource computer algebra systems out there.

@HotMintea: I've never really used Maxima much - apart from via Sage.
The problem in your code is that the right hand side does not get evaluated until the definition is used. This is a problem because it has to recalculate the derivative everytime AND it gives an error when called with a number:
Fx(2) --> diff(F(2), 2) --> error

The second issue (the error) can be solved by localizing the derivative variable then substituting in the value, e.g.
Fx(x):=block([y], subst([y=x], diff(F(y),y)));

But then Maxima has to go through that whole mess everytime the derivative Fx is called. A better solution is to use the construct:

Fx(x) := ''(diff(F(x),x));

I found most of this on the thread
http://www.math.utexas.edu/pipermail/maxima/2007/004706.html [Broken]

It seems that there aren't many Maxima users on this forum. Maybe the above mailing list (http://maxima.sourceforge.net/maximalist.html) would be a better place if you have questions. Also try http://stackoverflow.com or one of the Sage forums such as http://ask.sagemath.org or https://groups.google.com/forum/#!forum/sage-support

Last edited by a moderator: May 5, 2017
5. Sep 5, 2011

### HotMintea

Thanks for the explanation. Now I understand why.

It definitely worked.

I tried out the mailing list archive. It seems great.

I'll try them when the archive doesn't work.