因此,雅可比椭圆函数的绘制有点棘手,因为它们依赖于第一类的完全椭圆积分K(k)
,可以写成双阶乘的和,而雅可比椭圆函数的傅里叶级数则依赖于这些椭圆积分的指数,我可以轻松写出所有数学公式,但我不知道在 Tikz 或 PGF 上表示它们的简单方法,可能 gnuplot 是最简单的,但我想让它只依赖于 Tikz PGF,因为我在使用 gnuplot 时遇到了配置问题,我想以公式形式而不是表格形式来写它,因为我想轻松地将参数从一个编译更改为另一个编译。
基本上,有没有办法在 Tikz - PGF 中计算某些变量的总和和双阶乘,然后将它们用在依赖于这些变量的函数图中?
基本上我需要一种计算方法:
K(k) = pi/2 sum[n=0:10] ((( 2 * n - 1)!!)/((2 * n)!!)) * (k^(2*n))
对于给定的u
和v= sqrt(1-u^2)
q = exp(-pi * (K(v)/K(u)))
计算并绘制例如:
sn_u(x) = (2* pi/(K(u) * u)) * sum[n=0:5] (((q^(n+0.5)) * sin((2*n+1) * x * pi/(2 * K(u))))/(1-(q^(2n+1))))
如何将这些总和和双阶乘作为函数实现?还有没有办法按照我编写的方式将这些计算模块化?
答案1
由于我的数学能力有限,我无法透露更多。
以下不完整的代码渐近线,可以编译 http://asymptote.ualberta.ca/。
import graph;
import gsl; // https://github.com/vectorgraphics/asymptote/blob/master/gsl.cc
// 1086 addGSLDOUBLEFunc<gsl_sf_ellint_Kcomp>(SYM(K),SYM(k));
// in asy code, it is 'real K(real k)'
// for gsl_sf_ellint_Kcomp, see
// https://www.gnu.org/software/gsl/doc/html/specfunc.html?highlight=bessel#c.gsl_sf_ellint_Kcomp and
// https://www.gnu.org/software/gsl/doc/html/specfunc.html?highlight=gsl_prec_double#c.gsl_mode_t.GSL_PREC_DOUBLE
size(350,200,false);
real q(real k){ return exp(-pi*(K(sqrt(1-k^2))/K(k)));}
typedef real newreal(real);
// Define the function "sn_u(real k, int n)"
newreal sn_u(real k, int n){
return new real(real x)
{
real createfunction(int n)
{
return ((q(k)^(n+0.5)) * sin((2*n+1) * x * pi/(2 * K(k))))/(1-(q(k)^(2n+1)));
}
return (2*pi)/(K(k)*k)*sum(sequence(createfunction,n));
// See T[] sequence(T f(int), int n) and T sum(T[] a)
// in 6.12 Arrays of the documentation.
};
}
// the graph
guide g=graph(sn_u(0.95,6),-10,10,350);
draw(g);
label("$u=0.95$, n from 0 to 5",(5,0.5));
// for axes
xaxis(Label("$x$",position = EndPoint, align=NE),
xmin=-10,
Ticks(scale(.7)*Label(),
NoZero, end=false, Step=1, Size=.8mm, size=.4mm,
pTick=black),
Arrow);
yaxis(Label("$y$",position = EndPoint, align=NE),
ymin=-1,ymax=1,
Ticks(scale(.7)*Label(),
NoZero, begin=false, end=false, Step=1, Size=.8mm, size=.4mm,
pTick=black),
Arrow);
答案2
这是我的解决方案,有点晚了。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{tikzpicture}[
declare function={
K(\u) = pi/2*(1+(\u^2)/4+9*(\u^4)/64+25*(\u^6)/(16*16));
I(\x,\i)=((e^(-(\i+0.5)*pi*K(0.3)/K(0.95)))*sin(deg((2*\i+1)*\x*pi/(2*K(0.95)))))/(1-(e^(-(2*\i+1)*pi*K(0.3)/K(0.95))));
sn(\x)=2*pi/(0.95*K(0.95))*(I(\x,0)+I(\x,1)+I(\x,2)+I(\x,3)+I(\x,4)+I(\x,5));
}
]
\begin{axis}[
axis lines = middle,
axis equal image,
xlabel = $x$,
ylabel = {$y$},
domain=-5:5,
ymax=2,ymin=-2,
samples=100,
grid=major,
]
\addplot [color=blue] {sn(x)};
\end{axis}
\end{tikzpicture}
\end{document}