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 :
et le script 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;
voici mes idées pour l'adaptation en 3d
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;
pour la déclaration de la fonction:
Puis le script
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;
Ce n'est pas très concluant. J'ai ce message d'erreur:
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);
Voilà si quelqu'un a une idée?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.
Merci pour votre aide.
PS : je débute en MATLAB
Partager