# ellipj
Jacobi 椭圆积分
函数库: TyMath
# 语法
SN,CN,DN = ellipj(U,M)
SN,CN,DN = ellipj(U,M,tol)
# 说明
SN,CN,DN = ellipj(U,M) 返回 Jacobi 椭圆函数 SN、CN 和 DN,针对实参 U 和形参 M 的相应元素对这些函数求解。输入 U 和 M 的大小必须相同,或者 U 或 M 必须为标量。示例
SN,CN,DN = ellipj(U,M,tol) 以 tol 精度计算 Jacobi 椭圆函数。tol 的默认值是 eps()。增加 tol 会降低精度,但计算答案的速度会更快。示例
# 示例
求 Jacobi 椭圆函数
求 U = 0.5 和 M = 0.25 的 Jacobi 椭圆函数。
using TyMath
s,c,d = ellipj(0.5,0.25)
s = 0.47508293602853646
c = 0.8799410229637583
d = 0.9713773988381789
绘制 Jacobi 椭圆函数
绘制 -5≤U≤5 和 M = 0.7 的 Jacobi 椭圆函数。
using TyMath
using TyPlot
M = 0.7
U = -5:0.01:5
SCD = ellipj.(U,M)
S = map(x->x[1],SCD)
C = map(x->x[2],SCD)
D = map(x->x[3],SCD)
plot(U,S,U,C,U,D)
legend(["SN","CN","DN"])
grid("on")
title("Jacobi Elliptic Functions sn,cn,dn")
生成 Jacobi 椭圆函数 sn 的曲面图
在 M 的允许范围内和 -5≤U≤5 内生成 Jacobi 椭圆函数 sn 的曲面图。
using TyMath
using TyBase
using TyPlot
M,U = meshgrid2(0:0.1:1,-5:0.1:5)
S = ellipj.(U,M)
S = map(x->x[1],S)
surf(U,M,S)
xlabel("U")
ylabel("M")
zlabel("sn")
title("Surface plot of Jacobi Elliptic Function sn")
通过更改容差更快地计算 Jacobi 椭圆积分
tol 的默认值是 eps()。使用 tic 和 toc 求任意 M 为默认值时的运行时间。按因子 1000 增加 tol 并计算运行时间。比较运行时间。
using TyMath
@time ellipj(0.253,0.937)
0.000016 seconds
(0.24789831515346017, 0.9687860575710593, 0.9707821591620847)
@time ellipj(0.253,0.937,eps()*1000)
0.000002 seconds
(0.24789831515346017, 0.9687860575710593, 0.9707821591620847)
容差明显增加时,ellipj 的运行速度明显加快。
# 输入参数
U - 输入数组标量 | 向量 | 矩阵 | 多维数组
输入数组,指定为标量、向量、矩阵或多维数组。U 仅限于实数值。如果 U 是非标量,M 必须是大小与 U 相同的标量或非标量。
数据类型: Int64 | Int32 | Int16 | Int128 | Float64 | Float32 | Float16 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128
M - 输入数组标量 | 向量 | 矩阵 | 多维数组
输入数组,指定为标量、向量、矩阵或多维数组。M 可取值 0≤ m ≤1。如果 M 是非标量,U 必须是大小与 M 相同的标量或非标量。使用 [1] 中方程 16.10 和 16.11 所述的转换将 M 的其他值映射到该范围。
数据类型: Int64 | Int32 | Int16 | Int128 | Float64 | Float32 | Float16 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128
tol - 结果的精度eps()(默认) | 非负实数
结果的精度,指定为非负实数。默认值为 eps()。
数据类型: Int64 | Int32 | Int16 | Int128 | Float64 | Float32 | Float16 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128
# 输出参数
SN,CN,DN - Jacobi 椭圆函数 sn,cn,dn
Jacobi 椭圆函数 sn,cn,dn 以元组形式返回。
# 详细信息
Jacobi 椭圆函数
Jacobi 椭圆函数是从积分角度定义的
然后,
有些椭圆函数的定义使用椭圆模数 k 或模角 α,而不使用参数 m。它们的关系如下:
Jacobi 椭圆函数遵守许多数学恒等式。要查看恰当的示例,请参见 [1]。
# 算法
ellipj 使用 [1] 中介绍的算术几何平均数方法计算 Jacobi 椭圆函数。首先定义三元组:
ellipj 使用以下公式计算连续迭代:
然后,它使用以下公式计算振幅(以弧度为单位):
请注意正确展开相位。然后,Jacobian 椭圆函数则可表示为:
# 参考文献
[1] Abramowitz, M. and I. A. Stegun, Handbook of Mathematical Functions, Dover Publications, 1965, 17.6.