MATLAB: Plotting the derivative of a non symbolically defined function

differential equationsMATLABplotting

I've solved a second order nonlinear differential equation in matlab and would like to plot it's derivative:
my attempts so far:
syms phi(t)
figure
hold on
for v =1:10
[V] = odeToVectorField(diff(phi,2)== 28*(0.45-0.136)-(0.9)^2 * 0.45*1.21*sqrt(2)*v^2*sin(phi)*sin(pi/4-phi)/(4*0.25));
M = matlabFunction(V,'vars', {'t','Y'});
sol = ode45(M,[0 20],[0 5]);
fplot(@(x)deval(sol,x,1), [0, 20])
end
ddt = gradient(phi(:)) ./ gradient(t(:));
fplot(ddt)
Doing this returns an error. I've also tried
y =diff(phi)
fplot(y)
which just does nothing.
Any help would be great!

Best Answer

You could just do it totally numerically:
phi0 = 0;
dphidt0 = 5;
IC = [phi0 dphidt0];
tspan = 0:0.1:20;
v = 1:10;
phi = zeros(numel(tspan),numel(v));
dphidt = zeros(numel(tspan),numel(v));
for i = 1:numel(v)
[t, Y] = ode45(@(t,Y) odefn(t,Y,v(i)),tspan, IC);
phi(:,i) = Y(:,1);
dphidt(:,i) = Y(:,2);
lgndstr = sprintf('v = %2i \n',i);
lgnd(i,:) = lgndstr;
end
figure(1)
plot(t,phi),grid
xlabel('t'),ylabel('\phi');
legend(lgnd)
figure(2)
plot(t,dphidt),grid
xlabel('t'),ylabel('d\phi dt');
legend(lgnd)
function dYdt = odefn(~,Y,v)
phi = Y(1);
dphidt = Y(2);
dYdt = [dphidt;
28*(0.45-0.136)-(0.9)^2*0.45*1.21*sqrt(2)*v^2*sin(phi)*sin(pi/4-phi)/(4*0.25)];
end
Related Question