Matlab绘制频散曲线程序代码

Matlab绘制频散曲线程序代码
Matlab绘制频散曲线程序代码

function disper

%绘制平板频散曲线

%tic

clc;clear;

cl=5790;%材料纵波波速(钢板)

cs=3200;%材料横波波速(钢板)

dfd=0.01*1e3;

fd0=(0.01:dfd/1e3:20)*1e3;% 频厚积( MHz*mm ) d_Q235=6;

cps_min=2700;

cpa_min=100;

cp_max=10000;

mode=3;%绘制的模式数

precision=1e-8;

cpa=zeros(length(fd0),mode);

cps=zeros(length(fd0),mode);

for i=1:length(fd0)

fd=fd0(i);

[cp12 n]=ss(cps_min,cp_max,fd,cl,cs,mode);

for j=1:n

cp1=cp12(j,1);

cp2=cp12(j,2);

cps(i,j)=serfen(cp1,cp2,fd,cl,cs,precision); end

[cp12 n]=aa(cpa_min,cp_max,fd,cl,cs,mode);

for j=1:n

cp1=cp12(j,1);

cp2=cp12(j,2);

cpa(i,j)=aerfen(cp1,cp2,fd,cl,cs,precision);

end

end h=zeros(mode,2);

%相速度

figure(1)

for j=1:2

if j==1

cp=cps;

color='b';

else

cp=cpa;

color='r'; end

for i=1:mode cpp=cp(:,i);

ind=find(cpp==0); if ~isempty(ind)

h(i,j)=plot((fd0(ind(end)+1:end))/d_Q235,cpp(ind(end)+1:end),color);

else h(i,j)=plot(fd0/d_Q235,cpp,color);

end

hold on

end

if j==2

xlabel('f/(KHz)')

ylabel('C_{ p}/(km ? s^-l})')

title('6mm 钢板相速度频散曲线')

set(gca,'xtick',(0:0.6:20)*1e3/d_Q235,'xticklabel',(0:0.6:20)*1e3/d_Q235)

xlim([0, 1000]);%

set(gca,'ylim',[0 cp_max],'ytick',(0:cp_max/1e3)*1e3,...

'yticklabel',0:cp_max/1e3)

grid on

hSGroup = hggrou p;%要在子对象构建之后构建,构建后立即使用,否则将失效

hAGroup = hggroup;

set(h(:,1),'parent',hSGroup)

set(h(:,2),'parent',hAGroup)

set(get(get(hSGroup,'Annotation'),'LegendInformation'),...

'IconDisplayStyle','on');

set(get(get(hAGroup,'Annotation'),'LegendInformation'),...

'IconDisplayStyle','on');

legend('对称模式','反对称模式')

end

end %群速度

figure(2)

for j=1:2

if j==1

cp=cps; color='b';

else

cp=cpa;

color='r';

end

for i=1:mode

cpp=cp(:,i);

ind=find(cpp==0);

if ~isempty(ind)

fd=fd0(ind(end)+1:end)'; cpp=cpp(ind(end)+1:end);

else

fd=fd0';

end

dcdf=diff(cpp)/dfd;

cg=c pp (1:e nd-1)A2./(cp p(1:e nd-1)-fd(1:e nd-1).*dcdf);

h(i,j)=plot(fd(1:end-1)/d_Q235,cg,color);

hold on

end

if j==2

xlabel('f/(KHz)')

ylabel('C_{g}/(km ? s^-l})')

title('6mm 钢板群速度频散曲线')

set(gca,'xtick',(0:0.6:20)*1e3/d_Q235,'xticklabel',(0:0.6:20)*1e3/d_Q235)

xlim([0, 1000]);%

set(gca,'ylim',[0 5.5]*1e3,'ytick',(0:0.5:5.5)*1e3,'yticklabel',0:0.5:5.5)

grid on

hSGroup = hggrou p;%要在子对象构建之后构建,构建后立即使用,否则将失效

hAGroup = hggroup;

set(h(:,1),'parent',hSGroup)

set(h(:,2),'parent',hAGroup)

set(get(get(hSGroup,'Annotation'),'LegendInformation'),...

'IconDisplayStyle','on');

set(get(get(hAGroup,'Annotation'),'LegendInformation'),...

'IconDisplayStyle','on');

legend('对称模式','反对称模式')

end

end %toc end

%对称模式

function [cp0 n]=ss(cp_min,cp_max,fd,cl,cs,mode) cp2=cp_min;

deter=33; cp0=zeros(mode,2);

n=0;

while cp2

y2=smode(cp2,fd,cl,cs);

while y1*y2>0&&cp2

y2=smode(cp2,fd,cl,cs);

end if y1*y2<0 n=n+1; cp0(n,:)=[cp1 cp2];

else if y1==0&&y2~=0 n=n+1;

cp0(n,:)=[cp1 cp1]; elseif y2==0&&y1~=0 n=n+1;

cp0(n,:)=[cp2 cp2]; cp2=cp2+1;

elseif y1==0&&y2==0 n=n+1; cp0(n,:)=[cp1 cp1]; n=n+1; cp0(n,:)=[cp2 cp2];

cp2=cp2+1;

end

end end end function fs=smode(cp,fd,cl,cs)

p=abs(sqrt((cp/cs)A2-1));

q=abs(sqrt((cp/cl)A2-1));

if cp<=cs%p 和q 都是复数

fs=-4* p*q*s in h( pi*fd/c p*q)*cosh( pi *fd/cp* p)+(-pA2-1)A2*si nh(p i*fd/c p*p 广cosh( pi*fd/cp *q);

elseif cp>cs&&cp<=cl%p 是实数,q 是复数

fs=-4* p*q*s in h( pi*fd/cp*q)*cos( pi *fd/cp* p)+( pA2-1)A2*si n(pi *fd/c p*p 广cosh( pi*fd/c p*q); else

fs=4* p*q*si n(pi*fd/cp *q)*cos (p i*fd/c p*p)+(pA2-1)A2*si n(p i*fd/cp* p)*cos( pi *fd/cp*q); end end function cp=serfen(cp1,cp2,fd,cl,cs,precision)

while cp2-cp1>precision

y1=smode(cp1,fd,cl,cs);

y2=smode(cp2,fd,cl,cs);

cp0=(cp1+cp2)/2;

y0=smode(cp0,fd,cl,cs);

if y1*y0<0

cp2=cp0;

elseif y2*y0<0

cp1=cp0;

elseif y0==0

break

elseif y1==0

cp2=cp1;

break

elseif y2==0

cp1=cp2;

break

end end cp=(cp2+cp1)/2;

end %反对称模式

function [cp0 n]=aa(cp_min,cp_max,fd,cl,cs,mode) cp2=cp_min;

deter=33;

cp0=zeros(mode,2);

n=0;

while cp2

cp1=cp2;

cp2=cp1+deter;

y1=amode(cp1,fd,cl,cs);

y2=amode(cp2,fd,cl,cs);

while y1*y2>0&&cp2

cp1=cp2;

cp2=cp1+deter;

y1=amode(cp1,fd,cl,cs);

y2=amode(cp2,fd,cl,cs);

end

if y1*y2<0

n=n+1; cp0(n,:)=[cp1 cp2];

else

if y1==0&&y2~=0

n=n+1; cp0(n,:)=[cp1 cp1]; elseif y2==0&&y1~=0

n=n+1; cp0(n,:)=[cp2 cp2]; cp2=cp2+1;

elseif y1==0&&y2==0

n=n+1; cp0(n,:)=[cp1 cp1]; n=n+1;

cp0(n,:)=[cp2 cp2]; cp2=cp2+1;

end

end

end end function fs=amode(cp,fd,cl,cs)

p=abs(sqrt((cp/cs)A2-1)); q=abs(sqrt((cp/cl)A2-1));

if cp<=cs%p 和q 都是复数

fs=-4* p*q*s in h( pi*fd/cp* p)*cosh( pi*fd/c p*q)+(-pA2-1)A2*si nh( pi*fd/c p*q)*cosh( pi*fd/cp*p); elseif cp>cs&&cp<=cl%p 是实数,q 是复数

fs=4* p*q*si n(pi*fd/cp*p 广cosh( pi*fd/cp*q)+( pA2-1)A2*s in h( pi *fd/c

p*q)*cos( pi*fd/c p*p); else

fs=4* p*q*si n(pi*fd/cp*p )*cos (p i*fd/c p*q)+( pA2-1)A2*si n(p i*fd/cp*q)*cos( pi *fd/cp* p); end end function cp=aerfen(cp1,cp2,fd,cl,cs,precision) while cp2-

cp1>precision y1=amode(cp1,fd,cl,cs); y2=amode(cp2,fd,cl,cs); cp0=(cp1+cp2)/2;

y0=amode(cp0,fd,cl,cs);

if y1*y0<0

cp2=cp0;

elseif y2*y0<0

cp1=cp0;

elseif y0==0

break

elseif y1==0

cp2=cp1;

break

elseif y2==0 cp1=cp2; break

end

end cp=(cp2+cp1)/2;

end

相关主题
相关文档
最新文档