Ce programme a pour but d afficher les courbes de dispersions de deux façons théoriques différentes :

          - Méthode de moindre au carré avec l’équation de Rayleigh-Lamb.

- Méthode dite analytique.


Voici le code réalisé sous Matlab, qui nous a permit de faire ce programme avec le résultat obtenue.

%function y=Lamb()
%BONNE VERSION

% This function compute the dispersion curve omega(k) for S0 and A0 Lamb
% modes using a mean square fit to minimize the equation dispersion given
% in Royer page ?
% X is wavevector x h / pi
% Y is omega x h / pi
% Need to give pin=Y0 for initial fit at X=2 (where S0 and A0 are almost equal
% to the Rayleigh dispersion)
% Than, X decreases to zero, using pout as the new pin at each step.
% (this is because it is hard to find pin for small values of X)
% (To calculate higher modes, must know cutoff frequency and go increasing
% with bounds pinmin & pinmax (fminsearchbnd) to avoid jumps from on mode
% to the other).
% Patrick July 2007
%figure
h=.352/2; % half-thickness in mm
%%% 100
Vt=4630;  % m/s
% Vt=5840;
Vl=9134;  % m/s
a=5.2e-2;
b=3.6e-2;
% autre : APL 88,251907(2006)
% Vt=5360;
% Vl=8950;
% %%% 110
% Vt=4673;  % m/s
% Vl=9134;  % m/s
% %%% 111
% Vt=5085;  % m/s
% Vl=9360;  % m/s
% ajustement
%Vt=4000;  % m/s
% Vl=6360; %Alu
% Vt=3140;
X=0:0.001:0.3;

%alpha=0;    % 0 si mode symétrique / pi/2 si mode antisymétrique
Z=[];

options = optimset('Display','notify','MaxFunEvals',100000,'TolFun',1e-8,'MaxIter',20000,'TolX',1e-12*10000);
% Display : Level of display.
    % 'off' displays no output;
    % 'iter' displays output at each iteration;
    % 'final' displays just the final output;
    % 'notify' (default) displays output only if the function does not converge.
    % FunValCheck: Check whether objective function values are valid.
    % 'on' displays a warning when the objective function returns a value that is complex, Inf or NaN.
    % 'off' (the default) displays no warning.
% MaxFunEvals: Maximum number of function evaluations allowed
% MaxIter: Maximum number of iterations allowed
% OutputFcn: Specify a user-defined function that the optimization function calls at each iteration.
% TolFun: Termination tolerance on the function value
% TolX: Termination tolerance on x

%figure

%% Modes anti-symétriques
alpha=pi/2;
pin=1200;          % initial value, to be changed for m>0
Y=[];
for x=fliplr(X)
    [pout,fval,exitflag]=    fminsearch(@(y) dispersion(x,y),pin,options);
    pin=pout;
    Y=[Y pout];
end
Z=[Z;fliplr(Y)];

figure,
%  plot(pi*X/h,Z*0.001/(2*h))
%k=sqrt((n*pi/a)^2+(m*pi/b)^2);
plot(pi*X/h*1000,1e6*Z*0.001/(2*h),'r')
ylabel('f(Hz)')

%plot(pi*X/h*1000,1e6*2*pi*Z*0.001/(2*h))

%xlim([0,max(X)])
% xlim([0 1200])
%ylim([0 2.5])
title(['dispersion: variation de v en fonction de k epaisseur:h=',num2str(2*h),'mm'])
 xlabel('k(m^{-1})')
%xlabel('\lambda(mm)')
ylabel('\omega(rad/s)')
%ylim([0 1.6])
%xlim([0 5])
%legend('S0','A0','Location','NorthWest');
y=Z;    % output from function

hold on

% Vp=2*Vt*(1-(Vt^2/Vl^2));
% ohmega=1.15*(Vp./sqrt(3)).*(pi*X/h*1000).^2*h*1e-3;
%
%
% plot(pi*X/h*1000,ohmega/(2*pi))
%
% h = legend('methode numerique','equation theorique',2);
% set(h,'Interpreter','none')
% ylim([0 1e5])

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     function sse=dispersion(x,y)
%         p2=y^2/Vl^2-x^2;     % (ph/pi)^2
%         q2=y^2/Vt^2-x^2;     % (qh/pi)^2
%         sse = abs(y^4/Vt^4 - (4*x^2*q2*(1-sqrt(p2)/sqrt(q2)*tan(pi*sqrt(p2)+alpha)/tan(pi*sqrt(q2)+alpha))))^2;
%        sse = abs(y^4/Vt^4 - (4*x^2*(y^2/Vt^2-x^2)*(1-sqrt((y^2/Vl^2-x^2)/(y^2/Vt^2-x^2))*tan(pi*sqrt((y^2/Vl^2-x^2))+alpha)/tan(pi*sqrt((y^2/Vt^2-x^2))+alpha))))^2;
%        sse = abs(y^4/Vt^4 - (4*x^2*(y^2/Vl^2-x^2)*(1-sqrt((y^2/Vt^2-x^2)/(y^2/Vl^2-x^2))*tan(pi*sqrt((y^2/Vt^2-x^2))+alpha)/tan(pi*sqrt((y^2/Vl^2-x^2))+alpha))))^2;
% Check in Royer the correct expression
%     end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% end

Retour en haut de la page.