गलत यहाँ कई चीजें हैं। ; '- - (3x + 2) वाई' (6x-8) y = 0 सबसे पहले, अपने समीकरण जाहिरा तौर पर
(3x-1) वाई 'है वाई (0) = 2, वाई '(0) = 3
(वाई में शब्द का संकेत नोट करें)। इस समीकरण के लिए, आपके विश्लेषणात्मक समाधान और y2
की परिभाषा सही है।
दूसरे, के रूप में @Warren Weckesser कहते हैं, आप y
g
के रूप में 2 मानकों से गुजरना होगा: y[0]
(y), y[1]
(y ') और उनके डेरिवेटिव लौटने के लिए, वाई' और y ''।
तीसरा, अपने प्रारंभिक स्थितियों x = 0 के लिए दिया जाता है, लेकिन -2 में शुरू होता है पर एकीकृत करने के लिए अपने एक्स-ग्रिड।
odeint(func, y0, t, args=(),...)
: odeint
, इस पैरामीटर, उनके कॉल हस्ताक्षर विवरण में t
के लिये दस्तावेज से
टी: सरणी जिसके लिए y के लिए हल करने के लिए समय अंक की एक अनुक्रम। प्रारंभिक मूल्य बिंदु इस क्रम के पहले तत्व होना चाहिए।
तो तुम 0 पर शुरू एकीकृत या -2 पर शुरू प्रारंभिक स्थितियों प्रदान करनी चाहिए।
अंत में, एकीकरण की अपनी सीमा एक्स = 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