声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1088|回复: 0

[声学基础] 【分享】温度梯度场中的声线路径

[复制链接]
发表于 2014-5-23 09:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
相关理论基础见附件,下面是matlab的实现代码

  1. function ret=T1(x,y)
  2. ret=2000/(0.05*(x^2+y^2)+1);
复制代码
  1. clear all;clc;close all

  2. xmin=-5;xmax=5;ymin=-5;ymax=5;
  3. [X Y]=meshgrid(xmin:.1:xmax,ymin:.1:ymax);Z=2000./(0.05*(X.^2+Y.^2)+1);[C,h]=contour(X,Y,Z);text_handle = clabel(C,h);
  4. view(0,90)

  5. jj=0;
  6. for ii=1:5:89
  7. hold on
  8. sita=-ii/180*pi;
  9. jj=jj+1;

  10. x_in=0;y_in=5;

  11. xori=x_in;yori=y_in;
  12. a_x=cos(sita);a_y=sin(sita);h= 0.1;t=0.1;flag=1;

  13. D=0;MD=[];Time=0;MT=[];MP=[];

  14. while (flag)
  15. norm=sqrt(a_x^2+a_y^2);a_x=a_x/norm;a_y=a_y/norm;

  16. xh=h*a_x+x_in;yh=h*a_y+y_in;
  17. b1_x=a_y;b1_y=-a_x;b2_x=-a_y;b2_y=a_x;
  18. x2=xh+t/2*b1_x;y2=yh+t/2*b1_y;x3=xh+t/2*b2_x;y3=yh+t/2*b2_y;
  19. %%

  20. z=20.08;c1=z*sqrt(T1(x_in,y_in));c2=z*sqrt(T1(x2,y2));c3=z*sqrt(T1(x3,y3));
  21. % if(c2<c3)
  22. %     tmp=x2;
  23. %     x2=x3;
  24. %     x3=tmp;
  25. %     tmp=y2;
  26. %     y2=y3;
  27. %     y3=tmp;
  28. % end
  29. %     
  30. %     c1=z*sqrt(T(x_in,y_in));c2=z*sqrt(T(x2,y2));c3=z*sqrt(T(x3,y3));
  31. %     
  32. %%

  33. A=[x_in y_in 1;x2 y2 1; x3 y3 1];Co=A\[c1;c2;c3];
  34. cx=Co(1);cy=Co(2);c0=Co(3);

  35. R=(c1*t/(c2-c3));
  36.     d=(R-sqrt(R^2-h^2));
  37. % if(R<0)
  38. %     R=-R;
  39. %     d=(R-sqrt(R^2-h^2));
  40. % end

  41. l=-a_y;m=a_x;
  42. xout=xh+d*l/(sqrt(l^2+m^2));
  43. yout=yh+d*m/(sqrt(l^2+m^2));
  44. Rm=1/R;
  45. bx=h*Rm*l/(sqrt(l^2+m^2))+(l-d*Rm)*a_x;
  46. by=h*Rm*m/(sqrt(l^2+m^2))+(l-d*Rm)*a_y;
  47. a_x=bx;a_y=by;

  48. %%
  49. dleD=sqrt((x_in-xout)^2+(y_in-yout)^2);
  50. cs1=x_in/sqrt(x_in^2+y_in^2);
  51. cs2=xout/sqrt(xout^2+yout^2);
  52. delT=1/(2*sqrt(cx^2+cy^2))*abs(log((1+cs1)/(1-cs1)*(1-cs2)/(1+cs2)));

  53. D=D+dleD;
  54. MD=[MD; D];
  55. Time=Time+delT;
  56. %%
  57. MT=[MT;Time];

  58. hold on
  59. figure(1)
  60. x_in=xout;
  61. y_in=yout;


  62. if(x_in>xmax  || x_in<xmin  ||y_in>ymax  ||y_in<ymin)
  63.     flag=0;
  64. end

  65. if(flag)
  66.     MP=[MP;x_in y_in];
  67. plot(MP(:,1),MP(:,2),'linewidth',2.3);
  68. set(gca,'fontsize',14)
  69. drawnow;

  70. end

  71. end
  72. plot(-MP(:,1),MP(:,2),'linewidth',2.3);

  73. MDD(ii)=sqrt((MP(end,1)-xori)^2+ (MP(end,2)-yori)^2);
  74. MHD(ii)=MD(end);
  75. MMT(ii)=MT(end);
  76. disp(['第' num2str(jj) '次飞行的时间、弧线距离、直线距离分别为:'   num2str(MT(end))          '          '  num2str(MHD(end))        '       '  num2str(MDD(end))   ])
  77. end
复制代码



利用三角形前向展开法追踪温度梯度场中的声线路径.pdf

378.13 KB, 下载次数: 2

评分

1

查看全部评分

回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-13 18:11 , Processed in 0.073458 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表