椭圆余弦波数值计算
- 格式:docx
- 大小:29.09 KB
- 文档页数:4
椭圆余弦波数值计算
一、问题重述
某海域水深d=3m,有一周期T=15s 、波高H=1m 的波浪向前传播。
请计算椭圆余弦波的波长并同线性波的波长作比较。
二、模型建立
椭圆余弦波的一阶近似解波面方程为:
η=−η2+Hcn 2
[2K (k )(x L −t T ),k] 其中;η2为波谷
η2=H (1−1k 2+E (x )k 2K (x )
) cn (x )为雅可比椭圆余弦函数:cn (x )=cosθ(x ),θ(x )为椭圆函数,其由下式定义:
x =∫
dθ√1−k 2sinθ2θ(x )
k 为椭圆函数的模,且0≤k ≤1。
E (x )和K (x )分别为第一类和第二类完全椭圆积分:
K (x )=∫dθ√1−k 2sinθ22π0
E (x )=∫√1−k sinθdθ2π
椭圆余弦函数cn (x )是以4K (x )为周期的,所以式(1)中cn 2[2K (k )(x L −t
T ),k]是以以2K (x )为周期的,因而式(1)描述的是以L 为波长、以T 为周期的行进波。
从上面几个表达式可得,不同的模数k 决定着不同的波面曲线形状,而k 与波要素之间有如下关系(即椭圆余弦波的色散关系)。
L =√16ℎ33H
kK (x ) 即
163[k 2K (x )2]=
(L ℎ)2H h
式中:(L ℎ)2H
h =U r 为厄赛尔数。
椭圆余弦波的波速c 由下式计算
c =√gℎ[1+H
ℎ(1k 2−0.5−3E (x )2k 2K (x ))] 由式(7)(8)可得波周期的表达式:
T =4ℎ
√3gℎkK (x )√1+H ℎ(−1+
2k 2−3E (x )k 2K (x ))
三、模型求解
利用Matlab 编写程序求解得到椭圆余弦波和线性波的波长L 、周期T 、波数k 如下表所示,求解第一类和第二类完全椭圆积分采用MATLAB 里面的函数
[K,E ]=ellipke (m )。
注:式中参数m 与椭圆模数k 的关系为m =K 2。
图 1程序运行结果
波长L(m) 波速(m/s) 波数k 椭圆余弦波
11.1516 0.74344 0.56343 线性波 80.6039 5.3736 0.077951
附录
function tyyxb
%求解线性波
pi=3.1415926;
g=9.8;
T=input('输入周期(s)T:\n');
h=input('输入水深(m)h:\n');
H=input('输入波高(m)H:\n');
x0=1.0e-8;
x=(4*pi*pi*h)/(g*T*T*tanh(x0));
while abs(x-x0)>1.0e-8;
x0=x;
x=(4*pi*pi*h)/(g*T*T*tanh(x0));
end
L1=2*pi*h/x;
k1=2*pi/L1;
c1=L1/T;
str1=strcat('你输入的周期:',num2str(T), ' s ');
str2=strcat('你输入的水深:',num2str(h), ' m ');
str9=strcat('你输入的波高:',num2str(H), ' m ');
str3=strcat('计算所得的线性波长:',num2str(L1), ' m ');
str4=strcat('计算所得的线性波速:',num2str(c1), ' m /s');
str5=strcat('计算所得的线性波数:',num2str(k1), ' 1 /m');
disp(str1), disp(str2) ,disp(str3), disp(str4) ,disp(str5),disp(str9) %求解椭圆余弦波
t=0;
d=0.0001;
g=9.8;
[K,E]=ellipke(d);
T1=4*h/sqrt(3*pi*H)*d^0.5*K/sqrt((1+H/h*(-1+2/d-3*E/(d*K))));
a=abs(T-T1);
e=T1;
for m=0.0002:0.0001:0.9999;
[K,E]=ellipke(m);
T2=4*h/sqrt(3*pi*H)*m^0.5*K/sqrt((1+H/h*(-1+2/m-3*E/(m*K))));
b=abs(T-T2);
if b<a;
a=b;
d=m;
e=T2;
end
end
[K,E]=ellipke(d);
L=sqrt(16*h^3/(3*H))*d^0.5*K;
c=L/T;
k=2*pi/L;
str6=strcat('计算所得的椭圆余弦波波长:',num2str(L), ' m '); str7=strcat('计算所得的椭圆余弦波波速:',num2str(c), ' m /s'); str8=strcat('计算所得的椭圆余弦波波数:',num2str(k), ' 1 /m'); disp(str6), disp(str7) ,disp(str8)。