ファイル:Symplectic-method-for-harmonic-oscillator.svg
ページのコンテンツが他言語でサポートされていません。
この SVG ファイルのこの PNG プレビューのサイズ: 576 × 432 ピクセル. その他の解像度: 320 × 240 ピクセル | 640 × 480 ピクセル | 1,024 × 768 ピクセル | 1,280 × 960 ピクセル | 2,560 × 1,920 ピクセル。
元のファイル (SVG ファイル、576 × 432 ピクセル、ファイルサイズ: 84キロバイト)
ウィキメディア・コモンズのファイルページにある説明を、以下に表示します。
|
概要
解説Symplectic-method-for-harmonic-oscillator.svg |
日本語: 調和振動子をEuler法, 4次のRunge-Kutta法, 1次, 2次, 4次のシンプレクティック法で数値的に解いた際に生じる誤差の大きさのプロット. 時間ステップは 1/16. |
日付 | |
原典 | 投稿者自身による著作物 |
作者 | Osanshouo |
Source code
'''Solve the harmonic oscillator $H = p^2/2 + q^2/2$'''
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["text.usetex"] = True
plt.rcParams["font.family"] = "DejaVu Sans"
plt.rcParams["font.size"] = 14
fig = plt.figure()
plt.subplots_adjust(left=0.15, right=0.75)
ax = fig.add_subplot(111)
dt = 1./16.
t_end = 8
def force(x, v):
return -x
def solve(method, param):
ts, xs, vs = [0.], [1.], [0.]
while ts[-1] < 2.*np.pi*t_end:
x, v = method(xs[-1], vs[-1])
ts.append(ts[-1] + dt)
xs.append(x)
vs.append(v)
ts, xs, vs = np.array(ts), np.array(xs), np.array(vs)
ax.plot(ts/2./np.pi, np.fabs(xs**2 + vs**2 - 1.), **param)
return 0
# Euler
def euler(x, v):
return x + v*dt, v + force(x, v)*dt
solve(euler, {"label":"Euler"})
# RK4
def rk4(x, v):
dx1, dv1 = v, -x
dx2, dv2 = v+dv1*dt/2., force(x+dx1*dt/2., v+dv1*dt/2.)
dx3, dv3 = v+dv2*dt/2., force(x+dx2*dt/2., v+dv2*dt/2.)
dx4, dv4 = v+dv3*dt, force(x+dx3*dt, v+dv3*dt )
return x + (dx1 + 2.*(dx2 + dx3) + dx4)*dt/6., v + (dv1 + 2.*(dv2 + dv3) + dv4)*dt/6.,
solve(rk4, {"label": "RK4"})
# symp1
def symp1(x, v):
x_tmp = x + v*dt
return x + v*dt, v + force(x_tmp, v)*dt
solve(symp1, {"label":"Symp1", "ls":"-."})
# symp2
def symp2(x, v, dt=dt):
x_tmp = x + v*dt/2.
v_tmp = v + force(x_tmp, v)*dt
return x_tmp + v_tmp*dt/2., v_tmp
solve(symp2, {"label":"Symp2", "ls":":"})
# symp4
def symp4(x, v):
d1 = 1./(2. - np.cbrt(2.))
d2 = 1. - 2.*d1
x, v = symp2(x, v, dt=dt*d1)
x, v = symp2(x, v, dt=dt*d2)
return symp2(x, v, dt=dt*d1)
solve(symp4, {"label":"Symp4", "ls":"-."})
ax.set_xlabel("time $t/2\pi$")
ax.set_ylabel(r"energy error $\left| \Delta E \right| / E_0$")
ax.set_yscale("log")
ax.set_xlim([0, t_end])
ax.set_ylim(bottom=1e-11)
ax.grid()
ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0, fontsize=14)
plt.savefig("symplectic-method-for-harmonic-oscillator.svg")
plt.show()
plt.close()
ライセンス
この作品の著作権者である私は、この作品を以下のライセンスで提供します。
このファイルはクリエイティブ・コモンズ 表示 4.0 国際ライセンスのもとに利用を許諾されています。
- あなたは以下の条件に従う場合に限り、自由に
- 共有 – 本作品を複製、頒布、展示、実演できます。
- 再構成 – 二次的著作物を作成できます。
- あなたの従うべき条件は以下の通りです。
- 表示 – あなたは適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示さなければなりません。これらは合理的であればどのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。
このファイルに描写されている項目
題材
ウィキデータ項目がない値
1 6 2020
image/svg+xml
ファイルの履歴
過去の版のファイルを表示するには、その版の日時をクリックしてください。
日付と時刻 | サムネイル | 寸法 | 利用者 | コメント | |
---|---|---|---|---|---|
現在の版 | 2020年6月1日 (月) 09:22 | 576 × 432 (84キロバイト) | Osanshouo | Uploaded own work with UploadWizard |
ファイルの使用状況
以下のページがこのファイルを使用しています:
メタデータ
このファイルには、追加情報があります (おそらく、作成やデジタル化する際に使用したデジタルカメラやスキャナーが追加したものです)。
このファイルが元の状態から変更されている場合、修正されたファイルを完全に反映していない項目がある場合があります。
画像の幅 | 460.8pt |
---|---|
画像の高さ | 345.6pt |