Matlab绘制频散曲线程序代码 联系客服

发布时间 : 星期三 文章Matlab绘制频散曲线程序代码更新完毕开始阅读575d3f76581b6bd97e19ea32

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^{-1})') 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 = hggroup;%要在子对象构建之后构建,构建后立即使用,否则将失效 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=cpp(1:end-1).^2./(cpp(1:end-1)-fd(1:end-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^{-1})')

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 = hggroup;%要在子对象构建之后构建,构建后立即使用,否则将失效 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

cp2=cp1+deter;

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

while y1*y2>0&&cp2

cp2=cp1+deter;

y1=smode(cp1,fd,cl,cs); 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)^2-1)); q=abs(sqrt((cp/cl)^2-1));

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

fs=-4*p*q*sinh(pi*fd/cp*q)*cosh(pi*fd/cp*p)+(-p^2-1)^2*sinh(pi*fd/cp*p)*cosh(pi*fd/cp*q); elseif cp>cs&&cp<=cl%p是实数,q是复数

fs=-4*p*q*sinh(pi*fd/cp*q)*cos(pi*fd/cp*p)+(p^2-1)^2*sin(pi*fd/cp*p)*cosh(pi*fd/cp*q); else

fs=4*p*q*sin(pi*fd/cp*q)*cos(pi*fd/cp*p)+(p^2-1)^2*sin(pi*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;