clc

clear

close all

n1=0;

syms c;   %定义速度c为符号函数

err=[];      %xx,err存贮误差

eps=1e-12;         %精度

ct=3.130;cl=6.350;%铝板的横波速度3130m/s,纵波速度6350m/s   这边的速度最好是给出的个位数,如果太大,完蛋!那tanh会趋近于0,所以图形就不对

d=1;

m=0.5:0.1:3.1;

A=[];

cp1 = [];

n1 = 0;

k = 1;

yy = [];

for j=1:length(m)

xx=[];     %%存贮当前cp下频率f的解

cp=m(j);

f1=0.1:0.01:20;

f=0.1;

y1=((cp/ct)^2-2)^2*tanh((d*pi*f/cp)*sqrt(1-(cp/cl)^2));

y2=4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*f/cp)*sqrt(1-(cp/ct)^2));

%plot(f,y1,f,y2)

b1=subs(y1-y2);

y11=[y1];

y22=[y2];

for i=2:length(f1)

f=f1(i);

y1=((cp/ct)^2-2)^2*tanh((d*pi*f/cp)*sqrt(1-(cp/cl)^2));

y2=4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*f/cp)*sqrt(1-(cp/ct)^2));

y11=[y11;y1];

y22=[y22;y2];

b2=subs(y1-y2);

if  b2==0

xx=[xx;f];

else if b1*b2<0     %在b1*b2<0是可以改进,取(f1+f2)/2

%  xx=[xx;(f1(i)+f1(i-1))/2];

a = f1(i-1);b = f1(i);

while ((b-a)>eps)

c = (b+a)/2;

fa = ((cp/ct)^2-2)^2*tanh((d*pi*a/cp)*sqrt(1-(cp/cl)^2))-4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*a/cp)*sqrt(1-(cp/ct)^2));

fb = ((cp/ct)^2-2)^2*tanh((d*pi*b/cp)*sqrt(1-(cp/cl)^2))-4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*b/cp)*sqrt(1-(cp/ct)^2));

fc = ((cp/ct)^2-2)^2*tanh((d*pi*c/cp)*sqrt(1-(cp/cl)^2))-4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*c/cp)*sqrt(1-(cp/ct)^2));

if fa*fc < 0

b=c;

else

a=c;

end

end

xx = [xx;c];

end

end

b1=b2;

end

n=length(xx);

%if n>n1

%   n1=n;

%end

%yy=cp*ones(n,1);

%plot(xx,yy,'*b')  %%%最后结合的时候只需要这一个图形即可

%hold on

%end

if n>0

A(k,1:length(xx))=xx;    %%%A表示群速度的频率矩阵,其中的每一行都代表某一群速度下的各个频率的排列

yy =[yy;cp];

k = k + 1 ;

n1=n;

if n>n1

n1 = n;

end

end

end

for i=1:n1

plot(A(:,i),yy)

hold on

end

%%%%%%%%%%%第二段

m1 = 0;

m2 = 0;

n1=0;                     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

m=3.2:0.1:6.3;

cp1 = [];

A = [];

l =1;

yy = [];

for k=1:length(m)

cp=m(k);

xx=[];  %xx1=[];

%  m2=0;

ff=[0];

%(d*pi*f/cp)*sqrt((cp/ct)^2-1)=(2*k+1)*pi/2   %%%其中y相当于频率f,x相当于2k+1中的k

%将上式换成y=……x的关系f=(2*k+1)*((cp/ct)^2-1)^-0.5*cp/(2*d);

b=0:1:20;

for i=1:length(b)

k1=b(i);

fy=(2*k1+1)*((cp/ct)^2-1)^-0.5*cp/(2*d);

if fy<=20

ff=[ff;fy];          %%%断点

else

i=length(b);

end

end

%%%那几个断点f1是不能取的,取得话,会出现tan无穷的情况

for i=1:length(ff)

if i~=length(ff)

f1=ff(i)+0.01:0.01:ff(i+1)-0.01;

f=f1(1);

y1=((cp/ct)^2-2)^2*tanh((d*pi*f/cp)*sqrt(1-(cp/cl)^2));

y2=-4*sqrt((cp/ct)^2-1)*sqrt((1-cp/cl)^2)*tan((d*pi*f/cp)*sqrt((cp/ct)^2-1));

b1=subs(y1-y2);                                 %%%b1=0,没有结果的原因之一!!!

if b1 == 0

xx=[xx;f];

end

for j=2:length(f1)

f=f1(j);

y1=((cp/ct)^2-2)^2*tanh((d*pi*f/cp)*sqrt(1-(cp/cl)^2));

y2=-4*sqrt((cp/ct)^2-1)*sqrt((1-cp/cl)^2)*tan((d*pi*f/cp)*sqrt((cp/ct)^2-1));

b2=subs(y1-y2);

if  b2==0

xx=[xx;f];

else if b1*b2<0     %在b1*b2<0是可以改进,取(f1+f2)/2

% xx=[xx;(f1(j)+f1(j-1))/2];

a = f1(j-1);b = f1(j);

while ((b-a)>eps)

c = (b+a)/2;

fa = ((cp/ct)^2-2)^2*tanh((d*pi*a/cp)*sqrt(1-(cp/cl)^2))-4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*a/cp)*sqrt(1-(cp/ct)^2));

fb = ((cp/ct)^2-2)^2*tanh((d*pi*b/cp)*sqrt(1-(cp/cl)^2))-4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*b/cp)*sqrt(1-(cp/ct)^2));

fc = ((cp/ct)^2-2)^2*tanh((d*pi*c/cp)*sqrt(1-(cp/cl)^2))-4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*c/cp)*sqrt(1-(cp/ct)^2));

if fa*fc < 0

b=c;

else

a=c;

end

end

xx = [xx;c];

end

end

b1=b2;

end

end

end

n=length(xx);

%   if n>n1

%      n1=n;

%   end

%   yy=cp*ones(n,1);

% plot(xx,yy,'*b')  %%%最后结合的时候只需要这一个图形即可

%  hold on

%end

if n>0

A(l,1:length(xx))=xx;    %%%A表示群速度的频率矩阵,其中的每一行都代表某一群速度下的各个频率的排列

yy =[yy;cp];

l = l + 1 ;

if n>n1

n1 = n;

end

end

end

for i=1:n1             %%%%%%for 循环中的初始值,步长,以及终止值是在第一次循环的时候确定的,不会在运行的过程在改变,成为变量一样的存在,所以这里用while代替

yy1 = yy;

xx1 = A(:,i);

n2 = size(xx1);

j=1;

while (j <= n2)     %%%是为了去掉列向量中 的0元素

if xx1(j) == 0

yy1(j) = [];

xx1(j) = [];

n2 = size(xx1);

j=0;

end

j=j+1;

end

plot(xx1,yy1)

hold on

end

%%%%下面的应该是不变的,只要给出A矩阵就可以了

%%%%%%%%%%%%%%%%%%%%第三段

A=[];

ff=[0];

m=6.4:0.1:10;

n1=0;

cp1 = [];

l = 1;

yy = [];

for k=1:length(m)

cp=m(k);

xx=[];

b=0:1:20;

for i = 1:length(b)

k1 = b(i);

fx=((2*k1+1)*cp*((cp/cl)^2-1)^-0.5)/(d*2);

fy=((2*k1+1)*cp*((cp/ct)^2-1)^-0.5)/(d*2);

if fx<=14 && fy<=14

ff=[ff;fx];

ff=[ff;fy];

else if fx<=14 && fy>14

ff=[ff;fx];

else if fx>14 && fy<=14

ff=[ff;fy];

else if fx>14 && fy >14

i=length(b);

end

end

end

end

end         %%%求出各个tan为(2k+1)pi的点

ff=sort(ff);

for i=1:length(ff)-1

if ff(i+1)-ff(i)>=0.1       %%%%为了防止在上面f1出现空区间;本身f1(i)与f(i+1)相差很小,导致出现空区间

f1=ff(i)+0.01:0.01:ff(i+1)-0.01;

f=f1(1);

y1=((cp/ct)^2-2)^2*tan((d*pi*f/cp)*sqrt((cp/cl)^2-1));

y2=-4*sqrt((cp/ct)^2-1)*sqrt((cp/cl)^2-1)*tan((d*pi*f/cp)*sqrt((cp/ct)^2-1));

b1=subs(y1-y2);                                 %%%b1=0,没有结果的原因之一!!!

if b1 == 0

xx=[xx;b1];

end

for j=2:length(f1)

f=f1(j);

y1=((cp/ct)^2-2)^2*tan((d*pi*f/cp)*sqrt((cp/cl)^2-1));

y2=-4*sqrt((cp/ct)^2-1)*sqrt((cp/cl)^2-1)*tan((d*pi*f/cp)*sqrt((cp/ct)^2-1));

b2=subs(y1-y2);

if  b2==0

xx=[xx;f];

else if b1*b2<0     %在b1*b2<0是可以改进,取(f1+f2)/2

% xx=[xx;(f1(j)+f1(j-1))/2];

a = f1(j-1);b = f1(j);

while ((b-a)>eps)

c = (b+a)/2;

fa = ((cp/ct)^2-2)^2*tanh((d*pi*a/cp)*sqrt(1-(cp/cl)^2))-4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*a/cp)*sqrt(1-(cp/ct)^2));

fb = ((cp/ct)^2-2)^2*tanh((d*pi*b/cp)*sqrt(1-(cp/cl)^2))-4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*b/cp)*sqrt(1-(cp/ct)^2));

fc = ((cp/ct)^2-2)^2*tanh((d*pi*c/cp)*sqrt(1-(cp/cl)^2))-4*sqrt(1-(cp/ct)^2)*sqrt(1-(cp/cl)^2)*tanh((d*pi*c/cp)*sqrt(1-(cp/ct)^2));

if fa*fc < 0

b=c;

else

a=c;

end

end

xx = [xx;c];

end

end

b1=b2;

end

% plot(f,y11,f,y22)

%hold on

end

end

n=length(xx);

%   if n>n1

%       n1=n;

%  end

%   yy=cp*ones(n,1);

%   plot(xx,yy,'*b')  %%%最后结合的时候只需要这一个图形即可

%   hold on

%end

if n>0

A(l,1:length(xx))=xx;    %%%A表示群速度的频率矩阵,其中的每一行都代表某一群速度下的各个频率的排列

yy =[yy;cp];

l = l + 1 ;

if n>n1

n1 = n;

end

end

end

%%%%%%%%%%%%对A矩阵进行重新排列,排列成每个模式的点都在每一列上

b=zeros(size(A,1),1);

B = [A b];

for j = 1:n1+1

i1 = [];                 %%%%%

i2 = [];                  %%%% 记录的是本应为0的横坐标

for i = 1:size(B,1)-1

if  B(i,j) ~= 0 && B(i+1,j) ~= 0       %%%其中有00的情况

if  abs(B(i,j)-B(i+1,j))>0.7

for j1 = n1+1:-1:j+1

B(i+1,j1) = B(i+1,j1-1);

end

B(i+1,j) = B(i,j);

i2 = [i2;i+1];

end

else if B(i,j) ~=0 && B(i+1,j) == 0

B(i+1,j) = B(i,j);

i1 = [i1;i+1];

end

end

end

for n = 1:length(i1)

B(i1(n),j) = 0;

end

for n = 1:length(i2)

B(i2(n),j) = 0;

end

end

for i=1:n1             %%%%%%for 循环中的初始值,步长,以及终止值是在第一次循环的时候确定的,不会在运行的过程在改变,成为变量一样的存在,所以这里用while代替

yy1 = yy;

xx1 = B(:,i);

n2 = size(xx1,1);

j=1;

while (j <= n2)     %%%是为了去掉列向量中 的0元素

if xx1(j) == 0

yy1(j) = [];

xx1(j) = [];

n2 = size(xx1,1);

j=0;

end

j=j+1;

end

plot(xx1,yy1)

hold on

end

matlab画频散曲线,关于lamb频散曲线的绘制问题相关推荐

  1. rayleigh波的频散曲线matlab,运用matlab画出瑞利波的频散曲线

    运用matlab画出瑞利波的频散曲线 所属分类:绘图程序 开发工具:matlab 文件大小:103KB 下载次数:42 上传日期:2018-11-16 21:37:41 上 传 者:OldDriver ...

  2. matlab 画qq图,科学网—[转载]R语言绘制QQ图 - 刘朋的博文

    R语言绘制QQ图 实例1: #############加载数据 data R R=apply(R,2,as.numeric) #R语言将字符串矩阵转化为数值型矩阵,apply()函数里面的第2个值,如 ...

  3. matlab画奥迪标志,绘画汽车,用PS绘制一个逼真的奥迪汽车

    本篇教程教你通过手稿做出一个奥迪汽车,整个教程很有意思,同学们可以试着学习一下,换个思路做其他造型也是可以的,整体来说做什么和想做什么都在于自己,快释放你的双手去做吧. 效果图: 步骤1 从素描你的设 ...

  4. 如何用matlab画出树,使用treeplot将嵌套单元格绘制为树:MATLAB

    我们可以创建一个递归函数,它可以探索你的单元格数组,并为每个节点的父节点创建一个树指针数组(如 docs所述). 此函数采用包含标量或嵌套单元格数组的单元格数组(如您的问题中的那个). treebui ...

  5. 根据坐标如何在matlab中l连成曲线,matlab中,如何将两条曲线画在一个坐标系里,plot(x1,x2,y1,y2)还是怎样...

    matlab中,如何将两条曲线画在一个坐标系里,plot(x1,x2,y1,y2)还是怎样以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快 ...

  6. 怎样用MATLAB画二次函数曲线,matlab画二次函数图像

    [8 70 118 100 9 0 5]; 以上是每一个 X 和 Y 对应的坐标,请问如何编程能够绘制平滑曲线,这个图形就像二次函数一样的 如果要在图中绘制一条直线加上 y=...... MATLAB ...

  7. 用matlab画散点图并用光滑曲线连接(样条插值)

    上接:http://blog.csdn.net/cantjie/article/details/70216642 用matlab画散点图并用光滑曲线连接 %exp10.m clc,clear form ...

  8. 利用MATLAB画传递函数的奈奎斯特曲线

    利用MATLAB画传递函数的奈奎斯特曲线 1.传递函数 tf函数 延迟环节 2.画奈奎斯特曲线 全频曲线 半频曲线 3.示例 1.传递函数 tf函数 对于函数: G(s)=∑j=0mbjsm−j∑i= ...

  9. matlab画平行x轴的图,【MATLAB】画平行于坐标轴的曲线

    用MATLAB画函数的曲线 用MATLAB画函数曲线 2013年8月11日 命令funtool 这是单变量函数分析的交互界面,比较方便,特别适用于y=f(x)型,即y与x分开的函数形式.见下图 mat ...

最新文章

  1. 什么是机房三维(3D)监控系统,什么是机房可视化动力环境监控系统?
  2. RHEL5.4 iptables 配置详解(图)
  3. poj 3616(简单dp)
  4. 恒生java开发复试_2019恒生电子面试经验(JAVA开发人员,实施工程师等)
  5. java 解析gson_使用Java和Google GSON解析ESPN API
  6. linux 安装mongodb 64,在CentOS 6.x 64bit上安装MongoDB 3.2社区版
  7. iOS中如何旋转UIView
  8. 中去掉外键_【Java笔记】035天,MySQL中的增删改查
  9. mysql隔离性与隔离级别
  10. DIV+CSS常见问题的14条原因分享
  11. Ansible 自动化运维工具
  12. Mediacoder基本教程
  13. SAP FICO面试题
  14. IP雷达4.0 测试版
  15. (待补充)【读书笔记】20190816《码农翻身》——刘欣
  16. python开发者是谁_Python 太蹩脚了?开发者总结了 8 大缘故
  17. 【信息安全案例】——网络信息面临的安全威胁(学习笔记)
  18. 如何才能成为顶级的数据分析师?
  19. KubeEdge环境搭建(支持网络插件flannel)
  20. 获取cookies(pyppeteer)

热门文章

  1. 分析URL中关键字(从阿江统计偷的)
  2. 大型SAR卫星星座设计——SAR原理简介及星上成像模式
  3. 跟着玄武大佬学NTLM relay攻防
  4. 为什么Java开发人员在简历上不敢轻易写精通Java
  5. 教你用PS修复老照片
  6. 【卫朋】产品管理:如何管理项目进度?
  7. 就业内推 | 国企专场,HCIE、CCIE认证优先,最高20k*15薪
  8. tensorrt:学习(2)
  9. 【ACO TSP】基于matlab GUI蚁群算法求解旅行商问题【含Matlab源码 1032期】
  10. 红黑树的实现与验证--C++