File Exchange

image thumbnail

fulldiff.m

version 1.2 (6.42 KB) by

Symbolically computes full derivative wrt time using chain rule and time variables.

4.77778
9 Ratings

4 Downloads

Updated

View License

Symbolically computes full time derivative of given function and time dependant variables. It's an expansion of the partial derivative functionality of DIFF. Chain rule application automatically creates necessary higher order derivatives. Only base dependent variable need to be input, eg {x y}, dx and dy, etc. are assumed time dependant and d2x and d2y are created if required. This is motivated by the combination of partial derivative and full derivative required to compute Lagrange?s equations of motion.

Comments and Ratings (12)

Hari Wu

Really good! Thanks a lot!

I have replaced findsym with symvar, for newer MATLAB version, to eliminate warning.
https://github.com/auralius/fulldiff/blob/master/fulldiff.m

Brian

Brian (view profile)

Tim Jorris, I found a bug? See my code and results:

clear all;
syms e1 e2 e10 e20
x=[e1;e10;e2;e20];
y=fulldiff(x,{e1,e10,e2,e20})
z=fulldiff(x,{e1,e10,e2,e20},2)

y =

de1
0
de2
0


z =

d2e1
0
d2e2
0

Sinan

Sinan (view profile)

Amr

Amr (view profile)

I am having a problem running this code on Matlab 2010a.
I even tried the example in the mfile
clc
clear all
close all
syms x y dx d2y

f = x*y*(dx^2)*(d2y)
fulldiff(f) % (assumes x only) produces
% 3
% y dx d2y + 2 x y dx d2y d2x
% whereas
fulldiff(f,{x, y}) % produces
% 3 2 2
% y dx d2y + 2 x y dx d2y d2x + x dx d2y dy + x y dx d3y
But I keep getting the following error:
??? Error using ==> strfind
Inputs must be character arrays.

Error in ==> fulldiff>findhigher at 153
cid=strfind(allvar,',');

Error in ==> fulldiff at 120
dvars=findhigher(fun,vars,dvars);

Please advise

Bassam Jalgha

Really useful! I just used your code to develop a dynamics simulator for kinematic chains.

Scott Boynton

Very nicely done and effective. I'm also working with the Lagrange equations and it saved me a lot of time. Thank you.

Peter Pott

Hi Tim,

this piece of code seems to be the answer to all my (matlab) problems! But it produces an error message:
??? Undefined function or variable 'true'.
Error in ==> C:\path\fulldiff.m
On line 87 ==> while true
Is it a matlab-release-numer incompatibility or my fault?

Best regards

Peter
(pppott_at_web.de)

Francesco Igino Cosco

thank to your code I was able to do my work without translate my code in Mathematica.

Daichi Nozaki

Bruno Guerreiro

This function is extremly useful!

However I think I found a bug. Try this sequence and observe that the two last lines should give the same result:

syms m g R a real; y = 1/m*R*a + g; fulldiff(y,{R,a},2)
syms m g R a real; y = 1/m*R*a + g; fulldiff(y,{R,a},3)
syms m g R dR d2R a da d2a real; d2y = 2/m*da*dR+1/m*a*d2R+1/m*R*d2a; fulldiff(d2y,{R,a})

According to my calculus, only the last result is correct. I conclude that there's a bug with the multiple derivatives.

Matlab should think of including this kind of calculus into the symbolic toolbox, as well as "undefined" matrix and vector symbolic calculus.

Updates

1.2

Bug fixed. Code now looks for an exact match for variable names. Thank you Henrique.

1.1

Fixes the bug pointed out by Henrique.

Improved to properly captures higher (>2) order derivatives

MATLAB Release
MATLAB 8.0 (R2012b)
Acknowledgements

Inspired: ddt, Dynamics Simulator for Kinematic Chains

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video