.NET编程

首页 > 教程分享 > 网络编程 > .NET编程

非线性单摆椭圆积分解

发表于:2020-02-12 23:55:08 点击: 栏目:

.NET编程

收藏(0)

针对 谭述君, 高强, 钟万勰. Duhamel项的精细积分方法在非线性微分方程数值求解中的应用[J]. 计算力学学报, 2010(05):13-19.中的非线性单摆算例,查阅文献得到了其椭圆积分理论解的具体形式,具体推导过程详见Belendez A, Pascual C, Mendez D I, et al. Exact solution for the nonlinear pendulum[J]. Revista Brasileira De Ensino De Fisica, 2007, 29(4): 645-648.

非线性单摆控制方程

基本变量为幅角\(\theta\),设重力加速度为\(g\),单摆长度为\(l\),则无阻尼的非线性单摆控制方程为:
\[ \frac{\rm d^{2} \theta}{\rm d t^{2}}+\omega_{0}^{2} \sin \theta=0 \]
其中,\(\omega_0=\sqrt{\dfrac{g}{l}}\)。

椭圆积分解

设初始条件为:
\[ \theta(0)=\theta_{0} \quad\left(\frac{\rm d \theta}{\rm d t}\right)_{t=0}=0 \]

在此初始条件下,单摆的运动范围为\([-\theta_0,\theta_0]\)。

其解为:
\[ \theta(t)=2 \arcsin \left\{\sin \frac{\theta_{0}}{2} \rm {sn}\left[K\left(\sin ^{2} \frac{\theta_{0}}{2}\right)-\omega_0 t|\sin^2\theta\right]\right\} \]
其中,\(\rm{sn}(u|m)\) 为雅可比椭圆函数,\(K(m)=\int_{0}^{1} \frac{\rm d z}{\sqrt{\left(1-z^{2}\right)\left(1-m z^{2}\right)}}\)为第一类完全椭圆积分,

Python求解

Scipy.special中给出了\(\rm{sn}(u|m)\) 和\(K(m)\)的求解函数。

#单摆精确解,参考文献见上。Duhamel项的精细积分方法在非线性微分方程数值求解中的应用_谭述君 内算例
def myWrite(arr,filePath):
    import os
    with open(filePath,'w') as f:
        flag=False
        for temp in arr:
            if flag==True:
                f.write("\n"+str(temp))
            else:
                flag=True
                f.write(str(temp))
    print("写入完成")
    f.close()


from scipy import special as S
import numpy as np
from math import *
import matplotlib.pyplot as plt
t=np.linspace(0, 5, num=5/0.01+1) #Time interval
g=9.80665
l=1 
theta0=1.0472 #Initial condition
w0=sqrt(g/l)

k=np.sin(theta0/2)**2
#函数K为第一类完全椭圆积分函数 complete elliptical integral of the first kind$K(k)=\int_{0}^{\pi / 2} \frac{\mathrm{d} \theta}{\sqrt{1-k^{2} \sin ^{2} \theta}}$,用ellipk求解。
K=S.ellipk(k)
T=4/w0*K#非线性单摆的周期
sn=S.ellipj(K-w0*t,k)[0]
#雅可比椭圆函数(Jacobi elliptic function),ellipj:  u[0]:sn() u[1]:cn u[2]:dn u[3]:phi

theta=2*np.arcsin(sqrt(k)*sn)
plt.plot(t,theta)
plt.show()


myWrite(theta,"theta.txt")
myWrite(t,"t.txt")
print(theta[100:600:100])# Output results at t=1,2,3,4,5 s。

给出的结果theta[100:600:100]=[-1.0223301784 0.9484651763 -0.8279887606 0.6653140605 -0.4673292729],与 谭述君, 高强, 钟万勰. Duhamel项的精细积分方法在非线性微分方程数值求解中的应用[J]. 计算力学学报, 2010(05):13-19.中表1的Reference解有效数字均一致。

本文地址:https://www.vfjianzhan.com/show/49-108896.html
相关推荐