Bonjour,

J'ai un programme avec les données et un script séparés qui fonctionnent en 2d pour représenter la solution d'une équation différentielle à l'aide d'ode45. J'aimerai prolonger cet exemple avec une équation différentielle à 3 coordonnées et représenter la sphère sur le même schéma mais je ne vois pas comment étendre sans que ça plante...

Le fichier de données pour la fonction f est le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
function dx=FF(t,x)
global lambda;
dx=zeros(2,1);
 
f1=1/(x(1)^4);   
f2=-x(2);
 
dx(1)=f1;
dx(2)=f2;
et le script le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
global lambda;
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4]);
% point initial [0 1] changé en [-1 0] puis en [-sqrt(2)/2 sqrt(2)/2]
lambda=0.1;
T0=20;  % T0=20
[T,Y1] = ode45(@FF,[0 T0],[-sqrt(2)/2 sqrt(2)/2],options);
 
%% Def cercle
th=0:0.01:2*pi;
xc=cos(th);
yc=sin(th);
 
plot(Y1(:,1),Y1(:,2),xc,yc,'linewidth',2);
axis equal;
voici mes idées pour l'adaptation en 3d
pour la déclaration de la fonction:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
function dx=H(t,x)
global lambda;
dx=zeros(3,1);
 
f1=1/(x(1)^4);   % -1    % F=( -100, 10) 
f2=-x(2); % x(1)^2
f3=x(3)^2;
 
 
dx(1)=f1;
dx(2)=f2;
dx(3)=f3;
Puis le script
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
options = odeset('RelTol',1e-3,'AbsTol',[1e-3 1e-3 1e-3]);
% point initial [-1/sqrt(3) 1/sqrt(3) 1/sqrt(3) ]
lambda=0.1;
T0=20;  % T0=20
[T,Y1] = ode45(@H,[0 T0],[-1/sqrt(3) 1/sqrt(3) 1/sqrt(3) ],options);
 
%% Def sphere
[xc,yc,zc]=sphere(100);
figure
surf(xc,yc,zc);
plot3(Y1(:,1),Y1(:,2),Y1(:,3),'linewidth',2);
Ce n'est pas très concluant. J'ai ce message d'erreur:
Warning: Failure at t=1.732022e+000.  Unable to meet integration tolerances without reducing the step size below 
the smallest value allowed (3.552714e-015) at time t.
Voilà si quelqu'un a une idée?

Merci pour votre aide.

PS : je débute en MATLAB