How to use ode45 for an equation with space dependent coefficients?

1 vue (au cours des 30 derniers jours)
Mirlan Karimov
Mirlan Karimov le 16 Mar 2019
Commenté : darova le 16 Mar 2019
Consider an equation of form: where so that after each time iteration I have to update to be used in the next time iteration. I have hard coded Runge-Kutta scheme but I believe that there are some tolerance problems. Therefore, I want to try ODE45 and check the difference.

Réponse acceptée

darova
darova le 16 Mar 2019
p = @(x) sin(x).*sqrt(tan(x));
% x(1) == x
% x(2) == x'
f = @(t,x) [x(2); -p(x(1)).*x(1)];
tspan = [0 2];
x0 = [0.5 0.1];
[t, x] = ode45(f,tspan,x0);
plot(t,x(:,1),'r',t,x(:,2),'b')
  2 commentaires
Mirlan Karimov
Mirlan Karimov le 16 Mar 2019
Thank you!
I think I should clarify the question a bit more. What if p is a bit more complicated so that cant be directly written as a function? For example, in my case, where C is a complicated function of x and I is another complicated function obtained by summation of vector cross products?
darova
darova le 16 Mar 2019
function main
clc, clear
tspan = [0 1];
x0 = [ 0.1 0.5]
[t,y] = ode45(f,tspan,x0);
X = y(:,1);
Y = y(:,2);
plot(X,Y,'r')
end
function ydot = f(t,x)
x1 - x(1);
dx = x(2);
C = % complicated function
I = % another
ydot(1) = dx; % x'
ydot(2) = -C/I*x1; % x''
end

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by