Bonsoir à tous,
J'ai un petit problème sur l'affichage de plusieurs courbes sur un même graphe. J'ai fais un code sur la représentation d'une propagation d'une onde sur un fil et je dois afficher 10 courbes représentant 10 étapes de l'évolution de celle-ci. J'ai réussi à faire un graphe avec les 10 courbes mais le problème est que les courbes sont identiques. Je pense que les différentes variables que je demande à tracer évolue avec le temps or j'aimerai les figer à un instant t. Si quelqu'un aurait une solution à mon problème je suis tout ouïe, et pour des questions supplémentaires aussi.
Les codes suivants sont utiles pour le fonctionnement du fichier onde.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 function Y=Alpha(X,xp,amax,L) Y=(X>=0).*(X<=xp).*((amax/xp).*X)+(X>xp).*(X<=L).*((amax/(L-xp)).*(L-X)); end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 function Y=Beta(X,xmin,xmax,bmax) Y=(X>=xmin).*(X<=xmax).*bmax; end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function A=matrice(I,c,Dt,Dx) A=sparse(I+1,I+1); %matrice creuse, seuls les termes non-nuls seront stockés (les termes non définis seront égaux a 0) for i=2:I b=(c*Dt/Dx)^2; A(i,i)=2*(1-b); A(i,i-1)=b; A(i,i+1)=b; %les 4 lignes suivantes ne sont pas obligatoires car U(1)=0 et U(I+1)=0, on aurait donc pu laisser ces 4 termes a* 0 (ou n'importe quelle autre valeur, cf partie 1 question 2) end endMerci d'avance,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128 %------------------------------ % Initialisation %------------------------------ L=1; c=100; % Vitesse de propagation en m/s CFL=0.99; I=1000; xmin=0; xmax=L; xp=0.5*L; amax=0.01; bmax=0; P=0.00001; % temps de pause en secondes %------------------------------ % Paramêtres déduits %------------------------------ Dx=L/I; Dt=CFL*Dx/c; X=(0:Dx:L)'; T0=L/c; T=12*T0; N=round(T/Dt); %------------------------------ % Instant d'affichage %------------------------------ Taff1=0; Taff2=T0/25; Taff3=4*T0/25; Taff4=7*T0/25; Taff5=10*T0/25; Taff6=6*T0; Taff7=7*T0; Taff8=8*T0; Taff9=9*T0; Taff10=10*T0; %------------------------------ % Assemblage de la matrice %------------------------------ A=matrice(I,c,Dt,Dx); %------------------------------ % Initialisation %------------------------------ V=Alpha(X,xp,amax,L); U=V+Dt.*Beta(X,xmin,xmax,bmax); plot(X,V); pause(P) clf(); plot(X,U); pause(P) for n=1:N W=A*U-V; if n==1 clf() plot(X,W) pause(P) end if mod(n,4) clf() plot(X,W) pause(P) end % il faut stocker U avant le changement de variables (ou V apres) % en transformant les n en temps (n*Dt je pense) tester quand t=Taff % idée: les Taff en n peuvent etre mis dans une matrice et tester % a chaque fois le dernier élément dispo V=U; U=W; end ut1 = Taff1; ut2 = Taff2; ut3 = Taff3; ut4 = Taff4; ut5 = Taff5; ut6 = Taff6; ut7 = Taff7; ut8 = Taff8; ut9 = Taff9; ut10 = Taff10; for t=1:N W=A*U-V; switch t case ut1 figure(2) plot(X,W) case ut2 figure(2) plot(X,W) case ut3 figure(2) plot(X,W) case ut4 figure(2) plot(X,W) case ut5 figure(2) plot(X,W) case ut6 figure(2) plot(X,W) case ut7 figure(2) plot(X,W) case ut8 figure(2) plot(X,W) case ut9 figure(2) plot(X,W) case ut10 figure(2) plot(X,W) end V=U; U=W; end
Partager