ODE solver running continuously. Why?

I cannot figure out why my code (to solve for a system of ODE's) is running continuously. Every time I run it, I have to use CTRL+C to stop it. Please help! The code is:
clear
clc
%Error in ODE solver, will not "stop" solving.
fprintf('\nQuestion 3\n');
tspan= [0:.05:20];
F0=[2.5; 3; -1; 1];
[t,fn]=ode45(@fn_feq3,tspan,F0);
y=fn(:,1);
x=fn(:,2);
plot(t,x,t,y);
xlabel('Time (sec)');
ylabel('x and y');
legend('x vs t','y vs t');
title('#3 Plot');
function dF=fn_feq3(t,f)
dy=f(1);
dx=f(2);
dz=(2*f(2))+(-6*f(1))+(-3*f(1)*f(3));
dw=14-2*f(4)-2*f(2)*f(1);
dF=[dy;dx;dz;dw];
end

 採用された回答

Walter Roberson
Walter Roberson 2017 年 12 月 10 日

0 投票

One of your outputs is heading to -infinity. When it reaches about -1E12 then MATLAB needs to take a lot of smaller steps to try to maintain integration tolerances.
If you switch to ode15s then you will fairly quickly get a final result around -9E17

3 件のコメント

Antoine Mora
Antoine Mora 2017 年 12 月 10 日
So I had this problem in a final exam today where we were instructed to use ode45 (as that was the only ode solver we learned) so how would I have fixed this so that it would run using ode45?
Thank you!
Walter Roberson
Walter Roberson 2017 年 12 月 10 日
You could either just let it run until it finishes or you could pass in an options structure that permits less accurate integration tolerance
Antoine Mora
Antoine Mora 2017 年 12 月 10 日
I'll try that out. Thank you

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Community Treasure Hunt

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

Start Hunting!

Translated by