私は、複合フーリエ級数に展開してインパルス関数を拡張しようとしていました。以下のほとんどの作業例を参照してください:複合フーリエ級数展開エラー(Python)
import numpy as np
import matplotlib.pyplot as plt
Tp = 1
N = 1000
w = 0.05
t = np.linspace(-Tp/2, Tp/2, N)
dt = Tp/N
xp = np.zeros(N)
xp[abs(t) <= w*Tp] = 1
xp = xp + 0.0*(np.random.rand(N)-0.5)
def cn(x, t, dt, Tp, n):
return np.trapz(x*np.exp(-1j*2*np.pi*n*t/Tp),dx=dt)*1/Tp
def c(x, t, dt, Tp, N):
return [cn(x, t, dt, Tp, i) for i in range(-N,N)]
def rek_c(x, t, dt, Tp, N):
_c=c(x, t, dt, Tp, N)
out=np.zeros(len(x),dtype='complex')
for i in range(-N,N):
out += _c[N+i]*np.exp(1j*2*np.pi*(i)*t/Tp)
return out
plt.plot(t, xp)
plt.plot(t, rek_c(xp, t, dt, Tp,50), 'r')
plt.show()
を生成します。しかし、何かが本当に奇妙なことは、展開が1000要素に向かうときです。したがって、plt.plot(t, rek_c(xp, t, dt, Tp, 1000), 'r')
と入力すると、これは明らかに間違ったプロットになります。
なぜですか?それをどうやって修正するのですか?
ポイント数が増えると丸め誤差が悪化すると思います。多分方程式のいくつかの再編成はこれを避けることができますか? –