Using ode45 on a symbolic to numeric function

3 views (last 30 days)
Luke G.
Luke G. on 5 Nov 2020
Commented: Star Strider on 11 Nov 2020
Consider the code below. Both sections achieve the same result--an identical graph shown below. Does anyone have any warnings about starting in symbolic and converting to numeric? For my application (more complex than the example below), I need to divide two symbolic expressions and then plug the resulting expression into ode45 to be solved. Computation time doesn't matter (i.e., the problem solves in < 4s). Any warnings/advice would be greatly appreciated!
%% Numeric
ydot = @(t,y) 2*t;
[t_sol2,y_sol2] = ode45(ydot,[0 5],0);
xlabel('Time'); ylabel('y(t)')
%% Symbolic -> Numeric
syms y t
ydot2(t,y) = 2*t;
ode = matlabFunction(ydot2);
[t_sol,y_sol] = ode45(ode,[0 5],0);
xlabel('Time'); ylabel('y(t)')
Plot of the result:

Accepted Answer

Star Strider
Star Strider on 5 Nov 2020
The situations in which I begin with symbolic expressions for differential equations are generally higher-order and nonlinear. It is always possible to do this manually, however the symbolic approach prevents algebra errors (and the accompanying frustration of dealing with them). I then use odeToVectorField and then matlabFunction to convert the result to an anonymous function. There are a number of other Symbolic Math Toolbox functions listed in Equation Solving that can make this much easier.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!