F=@(t,X) [P(X(1),X(2));Q(X(1),X(2))];
opcions=odeset('AbsTol',1e-8,'RelTol',1e-8);
opcions=odeset(opcions,'Events',@condicioA1);
tf=25; %cal escollir un temps prou gran
[t,X,te,Xe]=ode45(F,[t0,tf],X0,opcions);
angle=Xe(4,1); %descartem la primera fila ja que correspon a t=0
fprintf('angle = %.6f\n',angle)
opcions=odeset('AbsTol',1e-8,'RelTol',1e-8);
opcions=odeset(opcions,'Events',@condicioA2);
tf=5; %cal escollir un temps prou gran
[t,x,te,xe]=ode45(f,[t0,tf],x0,opcions);
fprintf('temps = %.6f\n',temps)
F=@(t,X) [P(X(1),X(2),X(3));Q(X(1),X(2),X(3));R(X(1),X(2),X(3))];
opcions=odeset('AbsTol',1e-8,'RelTol',1e-8);
opcions=odeset(opcions,'Events', @condicioA3);
[t,X,te,Xe]=ode45(F,[t0,tf],X0,opcions);
fprintf('distancia = %.6f\n',dist)
P=@(t,x,y) -0.5*x+2*y-0.02*x.*y;
Q=@(t,x,y) -x+(1+sin(t)).*y;
F=@(t,X) [P(t,X(1),X(2));Q(t,X(1),X(2))];
opcions=odeset('AbsTol',1e-8,'RelTol',1e-8);
opcions=odeset(opcions,'Events', @(t,X) condicioA4(t,X,P,Q));
%la funcio 'condicio' tambe depen de P i Q, pero els fixem
%per tenir una funcio nomes de (t,X)
tf=8; %cal escollir un temps prou gran pero no massa
[t,X,te,Xe]=ode45(F,[t0,tf],X0,opcions);
fprintf('temps = %.6f\n',temps)
plot(X(:,1),X(:,2)) %dibuix de l'orbita
plot(Xe(1,1),Xe(1,2),'r*') %marquem el punt trobat
function [expr,aturar,signe]=condicioA1(t,X)
function [expr,aturar,signe]=condicioA2(t,x)
function [expr,aturar,signe]=condicioA3(t,X)
function [expr,aturar,signe]=condicioA4(t,X,P,Q)
%afegim P i Q com a variables addicionals per tal que
%es reconeguin dins la funcio 'condicio'
expr=X(1)*P(t,X(1),X(2))+X(2)*Q(t,X(1),X(2));