欢迎光临散文网 会员登陆 & 注册

使用S_TIDE绘制潮流椭圆并计算椭圆参数

2020-09-30 21:56 作者:ocean_tide  | 我要投稿

目前网上似乎没有公开的代码计算潮流椭圆参数,给潮汐潮流分析带来了不便。这里,我介绍一下我本人开发的新型潮汐潮流调和分析MATLAB工具包S_TIDE( https://www.researchgate.net/project/A-non-stationary-tidal-analysis-toolbox-S-TIDE)里的潮流椭圆的有关函数,希望能帮助到大家。

s_plot_tidal_ellipse.m是绘制潮流椭圆的函数,有5个输入参数uam,uph,vam,vph,tides,分别代表u方向分潮流流速振幅,u方向分潮流流速迟角,v方向分潮流流速振幅,v方向分潮流流速迟角,以及对应的分潮名字。s_estimate_tidal_ellipse.m是计算潮流椭圆参数的函数,输入参数同上,有6个输出参数maxc,minc,maxt,mint,maxp,minp,分别代表最大分潮流流速(即椭圆长轴),最小分潮流流速(即潮流椭圆短轴),最大分潮流流速时刻(从0开始计时),最小分潮流流速时刻(从0开始计时),最大分潮流流速方向(即椭圆长轴与x轴正方向的夹角),最小分潮流流速方向(即椭圆短轴与x轴正方向的夹角)

例子:

uam=38.6;uph=247;

vam=25.0;vph=222;

s_plot_tidal_ellipse(uam,uph,vam,vph,{'M2'})

[maxc,minc,maxt,mint,maxp,minp]=s_estimate_tidal_ellipse(uam,uph,vam,vph,'M2') ;


%下面是我提供的一个动态实例(可以直接运行程序,然后你会看到潮流椭圆的生成过程)来帮助大家理解潮流椭圆要素的具体含义

uam=38.6;uph=247;

vam=25.0;vph=222;

tides={'M2'};

load t_constituents

ju=strmatch(upper(tides),const.name);

fu=const.freq(ju);

t=[0:1/12:36]; %from 0 hour to 36 hours 从0时刻到36小时

u=uam*cos(fu*t*2*pi-uph/180*pi);

v=vam*cos(fu*t*2*pi-vph/180*pi);

L=sqrt(u.^2+v.^2);

for i=1:160

subplot(2,1,1);plot(u(i),v(i),'k.');

title([ 'time=',num2str(t(i)),'hours'])

hold on;xlim([-40 40]);ylim([-30 30]);

xlabel('u(cm/s)','fontsize',12);ylabel('v(cm/s)','fontsize',12);

pause(0.04)

subplot(2,1,2);plot(t(i),L(i),'k.');hold on

xlim([t(1) t(160)]);ylim([-10 60])

xlabel('time(hours)','fontsize',12);ylabel('the speed of tidal current vector(cm/s)','fontsize',12)

pause(0.04)

end

[a1,a2]=findpeaks(L);maxt=t(a2);

[a3,a4]=findpeaks(-1*L);mint=t(a4);

maxc=max(L);minc=min(L);

line([t(a2(1)) t(a2(1))],[-10 maxc],'color','r');

%line([0 t(a2(1))],[maxc maxc],'color','r');

text(0.5,20,'maxt = 2.083 hour');

text(0.5,25,'maxc = 45.09')


line([t(a2(2)) t(a2(2))],[-10 maxc],'color','r');

%line([0 t(a2(2))],[maxc maxc],'color','r');

text(8.4,22,'maxt = 8.29 hour');

text(8.4,27,'maxc = 45.09')


line([t(a4(1)) t(a4(1))],[-10 minc],'color','r');

%line([0 t(a4(1))],[minc minc],'color','r');

text(4.5,22,'mint = 5.17 hour');

text(4.5,27,'minc = 9.05')


line([t(a4(2)) t(a4(2))],[-10 minc],'color','r');

%line([0 t(a4(2))],[minc minc],'color','r');

text(11,21,'mint = 11.38 hour');

text(11,26,'minc = 9.05')


subplot(2,1,1);line([-40 40],[0 0],'color','r');

line([0 0],[-30 30],'color','r');

line([u(a2(1)) u(a2(2))],[v(a2(1)) v(a2(2))]);

text(10,3,'31.76°')

text(5,-13,'There are two angles for maximum tidal currents','Fontsize',12)

text(7,-18,'One is 31.76°, the other is 31.76°+ 180°','Fontsize',12)


使用S_TIDE绘制潮流椭圆并计算椭圆参数的评论 (共 条)

分享到微博请遵守国家法律