MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by Ruye Wang
on 7 May 2013

I use the follow code to create a sigmoid function of x with a parameter a, and its derivative with respect to x:

>> syms a x

>> g = 1/(1+exp(-a*x))

>> dg = diff(g,x)

I then plot them with a=1:

>> g=matlabFunction(g);

>> dg=matlabFunction(dg);

>> x=-10:0.01:10;

>> plot(x,g(x,1),x,dg(x,1))

>> subplot(1,2,1)

>> plot(x,g(1,x),x,g(x,1))

>> subplot(1,2,2)

>> plot(x,dg(1,x),x,dg(x,1))

While the first plot gives two identical curves, the second one gives two different ones: dg(1,x) is right but dg(x,1) is wrong.

From these results it seems the function dg takes the first argument as a and second x, instead of the other way around. But why is it this the case? What is the general rule in terms of the order of the parameters/variables in such a function?

Thanks for the help!

Answer by Iman Ansari
on 8 May 2013

See:

doc matlabFunction

Help: When converting symbolic expressions, the order is alphabetical.When converting symbolic functions, the input arguments appear infront of other variables. Other variables are sorted alphabetically.

You can change it:

syms a x g = 1/(1+exp(-a*x)) dg = diff(g,x) g=matlabFunction(g,'vars',[x a]) dg=matlabFunction(dg,'vars',[x a]) x=-10:0.01:10; figure; plot(x,g(x,1),x,dg(x,1)) figure; subplot(1,2,1) plot(x,g(1,x),x,g(x,1)) subplot(1,2,2) plot(x,dg(1,x),x,dg(x,1))

## 0 Comments