Bonjour,
je viens d'arriver sur le forum et je suis debutant sur matlab et en programmation.
Je souhaite minimiser l'erreur entre des données expérimentales et le résultat de mon programme Matlab.
cont et def sont des vecteurs composés de 418 points . Il s'agit des données expérimentales
contcal est un vecteur composé de 416 points. Il s'agit du résultat de mon calcul matlab.
je cherche a minimiser la difference entre le vecteur cont et contcal.Pour cela je cherche a miniser l'erreur e calculée a chaque itération (voir programme). Pour cela je cherche a déterminer la meilleure combinaison entre les coefficients G1,G2,G3,alpha1,alpha2,alpha3 pour que l'erreur e soit la plus petite possible.
Pour miniser cette erreur je voudrais utiliser la fonction fmincon de Matlab. Il s'agit pour cela de trouver le vecteur x=(G1,G2,G3,alpha1,alpha2,alpha3) tel que l'erreur soit la plus petite possible en ayant comme contrainte 0<abs(alpha1)<1,0<abs(alpha2)<1,0<abs(alpha3)<1 et abs(alpha1)>abs(alpha2)>abs(alpha3)
Pouvez vous m'aider?
Voici mon programme:
Je peux bien sur aussi vous envoyer les données si besoin est.
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 G0=7837.4; G1=132.8861; G2=41.5930; G3=28.1075; alpha1=-0.0001; alpha2=-0.3930; alpha3=-0.4102; %Les données expérimentales sont composées de 418 points m=418; deltatime=0.00000001; %on initialise l'erreur et les boucles à zéro e=0; for i=1:m-1 k=i+1; loop1=0; loop2=0; loop3=0; for j=0:i-1 loop1=loop1+((j+1)^(1+alpha1)-j^(1+alpha1))*(def(k-j)-def(k-j-1)); boucle1(i)=loop1; loop2=loop2+((j+1)^(1+alpha2)-j^(1+alpha2))*(def(k-j)-def(k-j-1)); boucle2(i)=loop2; loop3=loop3+((j+1)^(1+alpha3)-j^(1+alpha3))*(def(k-j)-def(k-j-1)); boucle3(i)=loop3; end end for i=1:m-1 deralpha1(i)=(deltatime^(alpha1))/(gamma(2+alpha1))*(((1+alpha1)/(i^(-alpha1))*def(1))+boucle1(i)); deralpha2(i)=(deltatime^(alpha2))/(gamma(2+alpha2))*(((1+alpha2)/(i^(-alpha2))*def(1))+boucle2(i)); deralpha3(i)=(deltatime^(alpha3))/(gamma(2+alpha3))*(((1+alpha3)/(i^(-alpha3))*def(1))+boucle3(i)); contcal(i)=G0*def(i)+G1*deralpha1(i)+G2*deralpha2(i)+G3*deralpha3(i); e=e+(contcal(i)-cont(i))*(contcal(i)-cont(i)); end figure; plot (def,cont,'m*'); figure; plot (defgraphe,contcal,'g+'); figure; plot (def,'m*'); figure; plot (defgraphe,'m*'); figure; plot (contcal,'m*'); figure; plot (cont,'m*');
En vous remerciant.
Partager