I got such an error while running this code.

1 visualizzazione (ultimi 30 giorni)
Rajan Bhandari
Rajan Bhandari il 2 Mag 2018
Modificato: Jan il 2 Mag 2018
%x'(t)=y(t)+0.2*x(t)*y(t)*(x(t)+y(t)*cot(t))/(y(t)^2-q)
%y'(t)=-x(t)+(1-0.2*y(t)^2)*(x(t)+y(t)*cot(t))/(y(t)^2-1)
function dx=Untitled3(t,x)
dx(1)=x(2)+0.2*x(1)*x(2)*(x(1)+x(2)*cotd(x(3)))/(x(2)^2-1);
dx(2)=-x(1)+(1-0.2*x(2))*(x(1)+x(2)*cotd(x(3)))/(x(2)^2-1);
dx(3)=1;
dx=dx';
end
I run the code as
[T,Y]=ode45(@Untitled3,[0:0.2:10],[3.228,1.4667,19.72])
and got the error message
Warning: Failure at t=6.905309e-01. Unable to meet integration tolerances without reducing the step size below the smallest value allowed
(1.776357e-15) at time t.
> In ode45 (line 308)
  1 Commento
John D'Errico
John D'Errico il 2 Mag 2018
Modificato: John D'Errico il 2 Mag 2018
1. Learn to format your code so it is readable. On this site, that means if you paste in code, you need to then select the block of code, then click on the "{} Code" button to format it.
2. I predict that with the use of names like "untitled3", you will one day become known far and wide for producing unreadable spaghetti code.
3. Oh. If you want an answer to your real question, even though I cannot read your code at all, that error from ODE45 almost always means you have a stiff system of equations. So you need to use a solver that can handle stiff problems. That would be tools like ODE15S.

Accedi per commentare.

Risposte (2)

Torsten
Torsten il 2 Mag 2018
dx(2)=-x(1)+(1-0.2*x(2)^2)*(x(1)+x(2)*cotd(x(3)))/(x(2)^2-1);
instead of
dx(2)=-x(1)+(1-0.2*x(2))*(x(1)+x(2)*cotd(x(3)))/(x(2)^2-1);
Best wishes
Torsten.
  1 Commento
Jan
Jan il 2 Mag 2018
Very nice! +1
%y'(t) = -x(t) + (1 - 0.2 * y(t)^2) * (x(t) + y(t) * cot(t)) / (y(t)^2 - 1)
dx(2) = -x(1) + (1 - 0.2 * x(2)) * (x(1) + x(2) * cotd(x(3))) / (x(2)^2 - 1);
@Rajan Bhandari: Use spaces to write readable code.

Accedi per commentare.


Jan
Jan il 2 Mag 2018
Modificato: Jan il 2 Mag 2018
Beside the stiffness of the system, it can be a pole in the trajectory also. Try it by stopping the integration shortly before the integration fails:
[T, Y] = ode45(@Untitled3, [0, 6.9e-1], [3.228,1.4667,19.72]);
plot(T, Y)
You will see that the first component Y(:, 1) explodes. You cannot integrate over such a pole. This might be a property of the physical system you simulate, or a typo in the formula. [EDITED] See Torsten's answer for such a typo...

Categorie

Scopri di più su Programming in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by