programme avec operations sur complexe
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:
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]') |