\(求解过程如下:\)
\(化简得到:\)
\(y''=100*cos(y)-100*sin(y)\) ①
\(x''=g=9.81\) ②
\(对①式进行积分得到如下结果:\)
\(1/2*y'*y'=100*sin(y)+100*cos(y)+C\) ③
\(由于y(0)=y'(0)=0, 带入求解得到C=-100,\)
$ y'=dy/dt=10\sqrt2 \sqrt((cos(y)+sin(y)-1))$ ④
$ ④式无法进一步化简,若采用wolfram alpha求解得到复杂的Appell超几何函数,②式进行两次积分得到如下结果$
\(x=1/2*9.81*t*t\)
\(综上转化为求解一阶非线性方程问题,x, y都与给定时间t有关, 采用python语言编程,利用龙格库塔算法进行非线性方程数值求解与绘制(x,y)图\)
import math
from math import sin,cos
import numpy as np
import matplotlib.pyplot as plt
def runge_kutta(y, t, dt, f):
k1 = dt * f(y, t)
k2 = dt * f(y + 0.5 * k1, t + 0.5 * dt)
k3 = dt * f(y + 0.5 * k2, t + 0.5 * dt)
k4 = dt * f(y + k3, t + dt)
return y + (k1 + 2 * k2 + 2 * k3 + k4) / 6.
if name=='main':
t = 0.
y = 0.
x = 0
dt =0.1 #需要给定步长
ys, ts, xs = [], [], []
def func(y, t):
return 10math.sqrt(2)math.sqrt((sin(y)+cos(y)-1))
while t <= 10:
y = runge_kutta(y, t, dt, func)
x=0.59.81t*t
t += dt
ys.append(y)
ts.append(t)
xs.append(x)
plt.plot(xs, ys, label='Nonlinear_equations')
plt.legend()
plt.show()