2nd degree ODE with ode45
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello everybody,
this is a great occasion to explain MATLAB's ODE solving strategies to less experienced users like me.
I'm trying to solve a 2nd degree ODE u'' = (1/t)*u' - 4*(t^2)*u with ode45; on [1,20].
Inspired by the documentation for ode45, I tried:
function dy = rigid(x,y)
function ddy = rigid(x,dy)
dy = @(x) diff(y)
ddy = @(x) (1/x)*dy(x) - 4*(x^2)*y(x)
tspan = [1 20]
y0 = [sin(1)+cos(1); 1*cos(1)-1*sin(1)]
[X,Y] = ode45(@rigid,tspan,y0)
plot(X,Y)
which my MATLAB accepts without error messages, but doesn't produce any plot. Could you give me a hint what could be wrong?
Thank you!
0 Kommentare
Antworten (1)
bym
am 24 Mai 2012
Well, pretty close. You need to define the ODE as a system of first order ODE's realizing the function arguments can be a matrix (example without using anonymous functions):
function dudt = rigid(t,x)
dudt = [x(2);x(2)./t-4.*t.^2*x(1)]; % function named rigid.m
in the script you would then use
tspan = [1 20];
y0 = [sin(1)+cos(1); 1*cos(1)-1*sin(1)];
[X,Y] = ode45(@rigid,tspan,y0);
plot(X,Y);
4 Kommentare
Sean de Wolski
am 25 Mai 2012
I don't know about the error but you're not going to be able to stack two anonymous functions into a vector du. You will get and error on lines 6/7 for trying this.
Walter Roberson
am 25 Mai 2012
Storing anonymous functions in [object] vectors used to be supported (but not in numeric vectors). But it led to ambiguous syntax, so now one is required to use cell arrays to store anonymous functions.
Siehe auch
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!