ODE with time-varying coefficients
Show older comments
I have the equation of this form below to be solved and I have written the attached code.
syms x(t) A(t) B(t) C(t) D y(t) t Y
x(t) = 20e-3:100e-3;
A(t) = 1./x(t);
B(t) = diff(x(t),t);
C(t) = diff(x(t),t,t);
D = 50;
D1y(t) = diff(y(t),t);
D2y(t) = diff(y(t),t,t);
D3y(t) = diff(y(t),t,t,t);
Eqn3 = D3y(t) + A(t)*D2y(t) + B(t)*D1y(t) + C(t)*y(t) + D == 0;
[VF3,Subs3] = odeToVectorField(Eqn3);
IC = [0;0;15e3]; % initial conditions
R = matlabFunction(VF3, 'Vars',{t,Y});
[T,I] = ode45(R,time,IC);
plot(T,I),grid
Just to be sure the code I have written is doing what I think, I would appreciate if someone could go through it.

3 Comments
Star Strider
on 13 Jan 2021
I have no idea what you want to solve for.
This may get you closer:
syms x(t) A(t) B(t) C(t) D y(t) t Y
% x(t) = 20e-3:100e-3;
A(t) = 1./x(t);
B(t) = diff(x(t),t);
C(t) = diff(x(t),t,t);
D = 50;
D1y(t) = diff(y(t),t);
D2y(t) = diff(y(t),t,t);
D3y(t) = diff(y(t),t,t,t);
Eqn3 = D3y(t) + A(t)*D2y(t) + B(t)*D1y(t) + C(t)*y(t) + D == 0;
[VF3,Subs3] = odeToVectorField(B,C,Eqn3);
IC = [0;0;0;0;15e3]; % initial conditions
R = matlabFunction(VF3, 'Vars',{t,Y});
time = [20 100]*1E-3;
[T,I] = ode45(R,time,IC);
figure
semilogy(T,I)
grid
legend(string(Subs3))
.
David Goodmanson
on 13 Jan 2021
Hi Shozeal,
syms x(t) A(t) B(t) C(t) D y(t) t Y
x(t) = 20e-3:100e-3
A(t) = 1./x(t)
B(t) = diff(x(t),t)
C(t) = diff(x(t),t,t)
x(t) = 1/50
A(t) = 50
B(t) = 0
C(t) = 0
This does not appear to be what you want for x(t), As opposed to something like
x(t) = 1/(1+t^2)
A(t) = 1./x(t)
B(t) = diff(x(t),t)
C(t) = diff(x(t),t,t)
x(t) = 1/(t^2 + 1)
A(t) = t^2 + 1
B(t) = -(2*t)/(t^2 + 1)^2
C(t) = (8*t^2)/(t^2 + 1)^3 - 2/(t^2 + 1)^2
Shozeal
on 14 Jan 2021
Accepted Answer
More Answers (0)
Categories
Find more on Mathematics in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!