ここにはいくつかの問題があります。まず、あなたの方程式は明らかに明らかです。
(3x-1)y '' - (3x + 2)y ' - (6x-8)y = 0; y(0)= 2、y '(0)= 3
(yの項の記号に注意)。この式では、解析解とy2
の定義が正しいです。 '' 'Y、及びそれらの誘導体を返すとy y[0]
(Y)、y[1]
(Y)':@Warren Weckesserが言うよう
第二に、あなたはg
からy
として2つのパラメータを渡す必要があります。
第3に、初期条件はx = 0ですが、積分するxグリッドは-2で始まります。 odeint
ためのドキュメントから、このパラメータを、それらのコールサインの説明でt
:
odeint(func, y0, t, args=(),...)
:
T:yについて解くための時間ポイントの配列 配列。最初の 値ポイントは、このシーケンスの最初の要素である必要があります。
したがって、0から開始して統合するか、-2から始まる初期条件を提供する必要があります。
最後に、統合の範囲はx = 1/3で特異点をカバーします。 odeint
はここでは時間がかかるかもしれませんが(明らかにそうではありません)
ここで働くようで一つのアプローチです:二階微分方程式については
import numpy as np
import scipy as sp
from scipy.integrate import odeint
import matplotlib.pyplot as plt
def g(y, x):
y0 = y[0]
y1 = y[1]
y2 = ((3*x+2)*y1 + (6*x-8)*y0)/(3*x-1)
return y1, y2
# Initial conditions on y, y' at x=0
init = 2.0, 3.0
# First integrate from 0 to 2
x = np.linspace(0,2,100)
sol=odeint(g, init, x)
# Then integrate from 0 to -2
plt.plot(x, sol[:,0], color='b')
x = np.linspace(0,-2,100)
sol=odeint(g, init, x)
plt.plot(x, sol[:,0], color='b')
# The analytical answer in red dots
exact_x = np.linspace(-2,2,10)
exact_y = 2*np.exp(2*exact_x)-exact_x*np.exp(-exact_x)
plt.plot(exact_x,exact_y, 'o', color='r', label='exact')
plt.legend()
plt.show()
は、 'init'は、長さ2を持っていない3はずです(と' G'は長さ2を返す必要がありますアレイ)。 –
あなたはそうです:私は混乱しています。私はそれを修正するために編集しました。 – xnx