Код: Выделить всё
import math as m
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq
G=0.25
f0=3
lmd=1
mu=0.001
D=2
F=1
N=5000000
T=50
dt=T/N
t=np.linspace(0,T,N)
u=np.zeros((N,),dtype=np.float64)
v=np.zeros((N,),dtype=np.float64)
u[0]=0.0
v[0]=0.1
for i in range(N-1):
u[i+1] = u[i] + v[i]*dt
v[i+1] = v[i] - 2*G*v[i]*dt - (2*np.pi*f0)**2 *u[i]*dt - lmd*(2*np.pi*f0)**2*u[i]*np.sqrt(2*F*dt)*np.random.normal(0,1) - mu*u[i]**3 + np.sqrt(2*D*dt)*np.random.normal(0,1)
X_f = fft(u)
frequencies = fftfreq(len(u), dt)
psd = np.abs(X_f)
positive_freqs = frequencies[frequencies > 0]
plt.plot(positive_freqs, psd[frequencies > 0])
plt.xlim(0,30)
Код: Выделить всё
RuntimeWarning: overflow encountered in double_scalars
v[i+1] = v[i] - 2*G*v[i]*dt - (2*np.pi*f0)**2 *u[i]*dt - lmd*(2*np.pi*f0)**2*u[i]*np.sqrt(2*F*dt)*np.random.normal(0,1) - mu*u[i]**3 + np.sqrt(2*D*dt)*np.random.normal(0,1)
RuntimeWarning: invalid value encountered in double_scalars
v[i+1] = v[i] - 2*G*v[i]*dt - (2*np.pi*f0)**2 *u[i]*dt - lmd (2*np.pi*f0)**2*u[i]*np.sqrt(2*F*dt)*np.random.normal(0,1) - mu*u[i]**3 + np.sqrt(2*D*dt)*np.random.normal(0,1)
Подробнее здесь: https://stackoverflow.com/questions/793 ... py-float64