Resoudre une équation à 100 balles

Le Trouveur Messages postés 12 Statut Membre -  
 nour_z -
Bonjour à toutes et tous,

je suis étudiant ingé et je bosse sur un projet d acoustique.
je bute sur la résolution d'une équation.
c'est l'équation de dispersion permettant l'analyse de la propagation des ondes acoustiques dans une plaque d'aluminium homogène.

un des cas est le suivant (mais si je résous celui-là je résous les autres):

[img]http://z1.zod.fr/z/dispersion-bio.jpg[/img]

j ai des ouvrages sur le sujet à dispo, j ai retourné l'équation dans tous les sens en essayant de linéariser la tangente à la main, mais je pense qu'il faille recourir à la toute puissance de l'informatique pour résoudre ca ^^ (si quelqu'un sait comment on peut résoudre ca à la main, je suis preneur aussi)... et surtout à vous ^^

donc si quelqu un pouvait me dire comment procéder (utilisation d un logiciel (freeware), faire un prog en matlab(ou j'avoue avoir un peu de mal), etc ...) je lui en serais reconnaissant car je sais que ma question est pas évidente.

merci d'avance.

4 réponses

damlegone32 Messages postés 75 Statut Membre 29
 
Salut,

Une manière de procéder serait de déclarer une fonction f(k) qui correspond au terme de droite de ton équation et de chercher le zero de cette fonction et ce pour plein de valeur de w (ou de la fréquence).

Avec matlab tu déclare la fonction comme cela

function f = ma_fonction_de_dispersion(k)
f = "terme de gauche de ton equation de dispersion";


=> fonction a enregister dans un .m

puis dans un autre .m faire

vect_w=valeur_mini:pas:valeur_max;
for ii = 1:length(vect_w)
global w=vect_w(ii); %global pour être accessible dans ma_fonction_de_dispersion
k(ii) = fzero(@ma_fonction_de_dispersion,estimation) %estimation : valeur approximative du zero
end
plot(vect_w,k);


N'hésite a demander si tu as des problèmes avec Matlab pour écrire ces fonctions. Si tu n'as pas matlab (c'est pas donné quand même cette licence :) ) tu peut utiliser le logiciel gratuit équivalent scilab.

A+
0
Le Trouveur Messages postés 12 Statut Membre 2
 
merci j ai essayé avec scilab que j ai dl car je n aurai matlab que lundi

voici le code:
function f = ma_fonction_de_dispersion(k)
f = 4*(sqrt((ω^2)/(39942400)-k^2 ))*(sqrt((ω^2)/(9703225)-k^2 ))*k^2*tan(sqrt((ω^2)/(39942400)-k^2 )*0.005/2)+(9703225)-k^2 )^2*tan(sqrt((ω^2)/(9703225)-k^2 )*0.005/2)=0; // LIGNE 2

vect_ω=376991:15000:628318;

for ii = 1:length(vect_ω)

global ω=vect_ω(ii);
k(ii) = fzero(@ma_fonction_de_dispersion,estimation) //estimation : valeur approximative du zero

end
endfunction // LIGNE 18

plot(vect_ω,k);

et mon message d erreur :
Missing operator, comma, or semicolon
at line 2 of function ma_fonction_de_dispersio called by :
endfunction
line 18 of exec file called by :
exec("C:/Documents and Settings/isen/dispersion.sci");
in execstr instruction called by :

autre chose, je ne comprends pas le paramètre estimation de la fonction zéro.

merci
0
damlegone32 Messages postés 75 Statut Membre 29
 
Salut,

Le bout de code que je t'ai donné c'était pour matlab. Même si scilab lui ressemble c'est pas tout a fait pareil. Notammant la fonction fzero n'existe pas sous scilab. D'après ce que j ai trouvé c'est la fonction fsolve qu'il faut utilisé avec scilab mais la syntaxe est différente.

Je te fais signe dès que j'en sais plus

A+
0
Le Trouveur Messages postés 12 Statut Membre 2
 
bonjour,

j ai vu des chercheurs qui se servent régulièrement de matlab, ils m ont dit que matlab ne pourrait pas résoudre une telle équation d'entrée sans la rendre "bonne" pour matlab.

je vais essayer d'autres pistes telle que la linéarisation de la tangente par un développement limitée pour améliorer la formule d'originie ou alors une résolution graphique même si cette dernière idée me semble assez ardue à mettre en oeuvre pour mon cas.

si vous avez d autres idées je suis preneur
0
damlegone32 Messages postés 75 Statut Membre 29
 
Salut,

voila ce que j'ai fait sous scilab:
w=300000:10000:600000

for ii = 1:length(w)

deff('[y]=f(x)','y = abs((4*(sqrt((w(ii)^2)/(39942400)-x^2 ))*(sqrt((w(ii)^2)/(9703225)-x^2 ))*x^2*tan(sqrt((w(ii)^2)/(39942400)-x^2 )*0.005/2)..
+(9703225-x^2)^2*tan(sqrt((w(ii)^2)/(9703225)-x^2 )*0.005/2)))');

[k(ii)] = fsolve([100],f);

end

plot(w/(2*%pi),k);

J'obtient une courbe linéaire.

Et c'est après que j'ai remarqué que ton équation avait une solution évidente :
k = w/Ct.
Bizarre non, pour une équation si complexe.
Y a t il une erreur de frappe
ou y a t il d'autres solutions et si oui comment veux tu tracer une fonction f(k) si plusieurs k sont possibles?

A+
0
nour_z
 
Bonjour,
j'ai un problème au niveau de syntaxe au niveau de commande de matlab.le problème c'est fiare une procedure qui permet d'obtenir les courbes des solutions pour y(0) variant de -5et 5, l'equation differencielle est:y'=x+y. j'ai vraiment besoin de solution
merciiiiiiiiiiiiiiiiiii d'avance
0