Resoudre une équation à 100 balles

Fermé
Le Trouveur Messages postés 12 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 9 septembre 2008 - 18 avril 2008 à 23:26
 nour_z - 7 févr. 2009 à 20:42
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 74 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 31 mai 2011 29
19 avril 2008 à 01:31
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 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 9 septembre 2008 2
19 avril 2008 à 18:47
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 74 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 31 mai 2011 29
26 avril 2008 à 13:26
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 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 9 septembre 2008 2
26 avril 2008 à 15:00
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 74 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 31 mai 2011 29
26 avril 2008 à 22:27
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
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