Bonjour, étant étudiante en sciences de la mer, je travaille avec matlab sur de la modélisation des populations.
J'ai ici un problème technique je pense.
Suite à mon code (programme générale et fonction), j'obtiens une courbe de la forme d'une parabole.
Je dois l'obtenir convexe (ce qui est bon avec ce code) mon problème est que les valeurs en ordonnée sont négatives, or cela est censé représenter une distance, donc l'erreur commise entre la valeur observée et la valeur calculée.
Le deuxième souci est que quand j'arrive à avoir les valeurs sur l'ordonnée positives, ma courbe est concave, ce qui ne correspond pas.
Je ne sais pas si j'ai donné assez d'informations, merci d'avance
et la fonction :
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 clear; clc; u=zeros(2,1); tmax=10; %Dur?e de simulation duree=0:0.1:tmax; global Cenv epsilon_a alpha beta gamma phi K k1 Cenv=40; epsilon_a=0.8; phi=1; k1min=0; k1max=1; dk1=0.0001; alpha=0.1;beta=0.1;gamma=10; L0=40; % Condition initiale C0=0; K=1; d=[]; erreur=0; k1moit=(k1min+k1max)/2; Lobs=[78 101 127 156 176]; for k1=k1min:dk1:k1max; [t,u]=ode45(@contaminant,duree,[L0 C0]); L=u(:,1);C=u(:,2); if k1<=k1moit; for i=1:5 erreur=erreur-((Lobs(1,i)-L((1+20*i),1))^2); end else for i=1:5 erreur=erreur+(Lobs(1,i)-L((1+20*i),1))^2; end end d=[d;erreur]; end m=min(d); abs=k1min:dk1:k1max; figure(4) plot(abs,d);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 function du=contaminant(t,u); global Cenv epsilon_a alpha beta gamma phi K k1 du=zeros(2,1); L=u(1);C=u(2); psi=K/(K+C); du(1)=1/(3*alpha)*(epsilon_a*gamma*phi*psi-alpha*beta/psi*L); du(2)=k1*Cenv/L-3*C/L*(1/(3*alpha)*(epsilon_a*gamma*phi*psi-alpha*beta/psi*L));
Partager