# Using ode45 on a symbolic to numeric function

3 views (last 30 days)
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);
figure
plot(t_sol2,y_sol2,'-o')
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);
figure
plot(t_sol,y_sol,'-o')
xlabel('Time'); ylabel('y(t)')
Plot of the result: 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.
##### 2 CommentsShowHide 1 older comment
Star Strider on 11 Nov 2020
As always, my pleasure!