Bonjour tous,

J'ai depuis plusieurs jours un programme qui me pose des problemes car il ne me donne pas les resultats que j'attendais, je pense donc qu'il y a un probleme mais je ne vois pas lequel....

Serait il possible que vous le regardiez pour me dire ce que vous en pensez???

C'est un programme avec des nombres complexes

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
%Verifier le contenu :
rf1_real=reaction_node{1};
rf2_real=reaction_node{2};
rf1_img=reaction_node{3}.*i;
rf2_img=reaction_node{4}.*i;
 
rf1=rf1_real+rf1_img;
rf2=rf2_real+rf2_img;
 
%rf1 et rf2 sont des nombres complexes chaque ligne correspond à une frequence de sortie et chaque colonne correspond à une amplitude
 
 
%A et B sont les cosinus et sinus d'angles, on veut pour chaques frequences 
%faire une projection
 n_max=nb_frequences;
 for n=1:1:n_max;
 for z=1:1:nombre_noeuds;
     rf_{n}(z)=rf1(n,z)*A(z)+rf2(n,z)*B(z);
     rf_radial{n}=rf_{n}';
 end 
 end
 
 %rappel en complexe
 %z=a+ib z'=a-ib donc le module=(z*z')^(1/2)
 %partie reelle a=(Z+Z')/2
 %partie img b=(Z-Z')/2i
 %argument n'est pas atan=b/a car cela est defini à k.pi pres or un
 %argument est toujours defini a 2.k.pi pres donc on utilise acos=a/module
 
 for n=1:1:n_max;
 for z=1:1:nombre_noeuds
 conjugue_rf_radial{n}(z)=conj(rf_radial{n}(z));
 module_rf_radial{n}(z)=(rf_radial{n}(z)*conjugue_rf_radial{n}(z))^(1/2);
 partie_reel{n}(z)=(rf_radial{n}(z)+conjugue_rf_radial{n}(z))/2;
 partie_imaginaire{n}(z)=(rf_radial{n}(z)-conjugue_rf_radial{n}(z))/(2*i);
 argument_degres_rf_radial{n}(z)=(asin(partie_imaginaire{n}(z)/module_rf_radial{n}(z)))*(180/pi);
 end
 end
 
 
 
  %MOYENNE
  %A present on va trier les données pour que X soit la representation de   %theta mais dans l'ordre
  %croissant, et Y les composantes de U qui sont ds l'ordre correspondant a X
  %on pourra ensuite facilement integrer avec TRAPZ
  n_max=nb_frequences;
  for n=1:1:n_max;
  [X1 I1] = sort(Theta);%sort permet de mettre ds ordre croissant, ici on met theta ds ordre
  Y1{n} = module_rf_radial{n}(I1); %puis on attribur cet ordr ds X1, Y1sera composantes aux theta ss perdre l'ordre
  for(z=1:1:nombre_noeuds) ;
     X1_rad(z)=X1(z)*(pi/180); %on passe X en radians pour l'integration
  end
  max_X1_rad=max(X1_rad);
  min_X1_rad=min(X1_rad);
  periode1=abs(max_X1_rad)+abs(min_X1_rad);
  module_RF_mean{n}=(1/periode1)*trapz(X1_rad,Y1{n});
  end
  n_max=nb_frequences;
  for n=1:1:n_max;
  [X2 I2] = sort(Theta);%sort permet de mettre ds ordre croissant, ici on met theta ds ordre
  Y2{n} = argument_degres_rf_radial{n}(I2); %puis on attribur cet ordr ds X1, Y1sera composantes aux theta ss perdre l'ordre
  for(z=1:1:nombre_noeuds);
     X2_rad(z)=X2(z)*(pi/180); %on passe X en radians pour l'integration
  end
  max_X2_rad=max(X2_rad);
  min_X2_rad=min(X2_rad);
  periode2=abs(max_X2_rad)+abs(min_X2_rad);
  argument_degres_RF_mean{n}=(1/periode2)*trapz(X2_rad,Y2{n});
  end
 
  for n=1:1:n_max;
      module(n)=module_RF_mean{n};
      argument(n)=argument_degres_RF_mean{n};
  end
 
%ON TRACE A PRESENT module_RF_mean EN FONCTION DE LA FREQUENCE
n_max=nb_frequences;
for n=1:1:n_max;
figure(21)
hold on
bar(n,module(n));
title(' SPECTRE D''AMPLITUDE', 'color', 'b'); %titre du graphique
xlabel('fréquence [Hz]');
ylabel('module-amplitude [MPa]'); %legende abscisse et ordonnée
end  
%ON TRACE A PRESENT argument_RF_mean EN FONCTION DE LA FREQUENCE
n_max=nb_frequences;
for n=1:1:n_max;
figure(22)
hold on
bar(n,argument(n));
title(' SPECTRE DE PHASE', 'color', 'b'); %titre du graphique
xlabel('fréquence [Hz]');
ylabel('argument [degrès]'); %legende abscisse et ordonnée
end  
 
%reconstruirction de la fonction à partir des spectre
%phy=arg(Pk)
%|Pk|=module de Pk
%p(t)=Pk.exp(jkwt)=|Pk|.exp(j(kwt+phy))=|Pk|.cos(kwt+phy)+|Pk|.j.sin(kwt+phy)
 
z = 1; %initialisation d'un compteur pour les indices de P
P = zeros(1,length(0:0.0005:2)); % on initialise P cela donne P=0, utilie pour 1ere boucle
for t=0:0.0005:2;
    for n=1:1:n_max;
        P(z)=P(z)+module(n)*cos(2*pi*n*t+argument(n))+module(n)*i*sin(2*pi*n*t+argument(n));
    end
    z = z+1;
end
P_physique=real(P);
T=[0:0.0005:2];
 
figure(23)
hold on
plot(T,P_physique)
title(' P(t) Physique', 'color', 'b'); %titre du graphique
xlabel('temps   [s]');
ylabel('P(t)   [MPa]')