संख्यात्मक गणित का परिचय
यह "हैलो, वर्ल्ड!" पीडीई के (आंशिक अंतर समीकरण)। द लैप्लस या डिफ्यूजन इक्वेशन भौतिकी में अक्सर दिखाई देता है, उदाहरण के लिए हीट इक्वेशन, डीफॉर्मिंग, फ्लूड डायनामिक्स आदि ... जैसा कि वास्तविक जीवन 3 डी है, लेकिन हम "हैलो, वर्ल्ड!" कहना चाहते हैं। और "99 बोतल बीयर, ..." नहीं गाएं, यह कार्य 1 डी में दिया गया है। आप इसकी व्याख्या कर सकते हैं कि रबर के बागे को दीवार पर बांधकर दोनों छोरों पर लगाया जाता है।
किसी [0,1]डोमेन पर uदिए गए स्रोत फ़ंक्शन fऔर सीमा मानों u_Lऔर u_Rइस तरह के लिए एक फ़ंक्शन खोजें :
-u'' = fu(0) = u_Lu(1) = u_R
u'' के दूसरे व्युत्पन्न को दर्शाता है u
इसे विशुद्ध रूप से सैद्धांतिक रूप से हल किया जा सकता है, लेकिन आपका काम यह है कि इसे अंकों के लिए एक विवेकपूर्ण डोमेन x पर संख्यात्मक रूप से हल करें N:
- x =
{i/(N-1) | i=0..N-1}या 1-आधारित:{(i-1)/(N-1) | i=1..N} h = 1/(N-1)रिक्ति है
इनपुट
fफ़ंक्शन या अभिव्यक्ति या स्ट्रिंग के रूप मेंu_L,u_Rअस्थायी बिंदु मानों के रूप मेंNपूर्णांक के रूप में> = 2
उत्पादन
- सरणी, सूची, कुछ अलग प्रकार की स्ट्रिंग है
uकिu_i == u(x_i)
उदाहरण
उदाहरण 1
इनपुट: f = -2, u_L = u_R = 0, N = 10(क्या नहीं ले f=-2गलत है, है न एक मूल्य लेकिन एक निरंतर समारोह है कि रिटर्न है -2सभी के लिए x। यह हमारी रस्सी पर एक निरंतर गुरुत्वाकर्षण बल की तरह है।)
आउटपुट: [-0.0, -0.09876543209876543, -0.1728395061728395, -0.22222222222222224, -0.24691358024691357, -0.24691358024691357, -0.22222222222222224, -0.1728395061728395, -0.09876543209876547, -0.0]
एक आसान सटीक समाधान मौजूद है: u = -x*(1-x)

उदाहरण 2
इनपुट: f = 10*x, u_L = 0 u_R = 1, N = 15(यहाँ वहाँ सही पक्ष पर हवा आने की दिशा का एक बहुत है)
आउटपुट: [ 0., 0.1898688, 0.37609329, 0.55502915, 0.72303207, 0.87645773, 1.01166181, 1.125, 1.21282799, 1.27150146, 1.29737609, 1.28680758, 1.2361516, 1.14176385, 1.]
इस स्थिति का सटीक समाधान: u = 1/3*(8*x-5*x^3)

उदाहरण 3
इनपुट: f = sin(2*pi*x), u_L = u_R = 1, N = 20(किसी व्यक्ति ने गुरुत्वाकर्षण तोड़ दिया या वहाँ उर्ध्वप्रवाह और हवा के साथ एक तरह से है)
आउटपुट: [ 1., 1.0083001, 1.01570075, 1.02139999, 1.0247802, 1.0254751, 1.02340937, 1.01880687, 1.01216636, 1.00420743, 0.99579257, 0.98783364, 0.98119313, 0.97659063, 0.9745249, 0.9752198, 0.97860001, 0.98429925, 0.9916999, 1.]
यहाँ सटीक समाधान है u = (sin(2*π*x))/(4*π^2)+1

उदाहरण 4
इनपुट: f = exp(x^2), u_L = u_R = 0,N=30
आउटपुट:
[ 0. 0.02021032 0.03923016 0.05705528 0.07367854 0.0890899
0.10327633 0.11622169 0.12790665 0.13830853 0.14740113 0.15515453
0.16153488 0.1665041 0.17001962 0.172034 0.17249459 0.17134303
0.16851482 0.1639387 0.15753606 0.1492202 0.13889553 0.12645668
0.11178744 0.09475961 0.07523169 0.05304738 0.02803389 0. ]

मामूली विषमता पर ध्यान दें
FDM
इसे हल करने की एक संभावित विधि परिमित अंतर विधि है :
- के
-u_i'' = f_iरूप में फिर से लिखना (-u_{i-1} + 2u_i - u{i+1})/h² = f_iजो बराबर है-u_{i-1} + 2u_i - u{i+1} = h²f_i- समीकरण सेट करें:

- जो मैट्रिक्स-वेक्टर समीकरण के बराबर हैं:

- इस समीकरण को हल करें और आउटपुट करें
u_i
पायथन में प्रदर्शन के लिए इसका एक कार्यान्वयन:
import matplotlib.pyplot as plt
import numpy as np
def laplace(f, uL, uR, N):
h = 1./(N-1)
x = [i*h for i in range(N)]
A = np.zeros((N,N))
b = np.zeros((N,))
A[0,0] = 1
b[0] = uL
for i in range(1,N-1):
A[i,i-1] = -1
A[i,i] = 2
A[i,i+1] = -1
b[i] = h**2*f(x[i])
A[N-1,N-1] = 1
b[N-1] = uR
u = np.linalg.solve(A,b)
plt.plot(x,u,'*-')
plt.show()
return u
print laplace(lambda x:-2, 0, 0, 10)
print laplace(lambda x:10*x, 0, 1, 15)
print laplace(lambda x:np.sin(2*np.pi*x), 1, 1, 20)
मैट्रिक्स बीजगणित के बिना वैकल्पिक कार्यान्वयन ( जैकोबी विधि का उपयोग करके )
def laplace(f, uL, uR, N):
h=1./(N-1)
b=[f(i*h)*h*h for i in range(N)]
b[0],b[-1]=uL,uR
u = [0]*N
def residual():
return np.sqrt(sum(r*r for r in[b[i] + u[i-1] - 2*u[i] + u[i+1] for i in range(1,N-1)]))
def jacobi():
return [uL] + [0.5*(b[i] + u[i-1] + u[i+1]) for i in range(1,N-1)] + [uR]
while residual() > 1e-6:
u = jacobi()
return u
हालाँकि आप लाप्लास समीकरण को हल करने के लिए किसी अन्य विधि का उपयोग कर सकते हैं। यदि आप एक पुनरावृत्त विधि का उपयोग करते हैं, तो आपको दाहिने हाथ की ओर वेक्टर होने के |b-Au|<1e-6साथ, अवशिष्ट तक पुनरावृति करना चाहिएbu_L,f_1h²,f_2h²,...
टिप्पणियाँ
आपकी समाधान पद्धति के आधार पर आप दिए गए समाधानों के लिए उदाहरणों का समाधान नहीं कर सकते हैं। कम से कम N->infinityत्रुटि के लिए शून्य से संपर्क करना चाहिए।
मानक खामियों को अस्वीकार कर दिया जाता है , पीडीई के लिए बिल्ट-इन की अनुमति है।
बक्शीश
समाधान को प्रदर्शित करने के लिए -30% का बोनस, या तो ग्राफिकल या एएससीआईआई-कला।
जीतना
यह कोडगुल्फ़ है, इसलिए बाइट्स जीत में सबसे छोटा कोड है!
log(log(x))या sqrt(1-x^4)जिसमें एक अभिन्न है, जो कि प्राथमिक कार्यों में व्यक्त नहीं है।
u(x) = 1/2 (-sqrt(π) x erfi(x)+sqrt(π) erfi(1) x+e^(x^2)-e x+x-1)यह बिल्कुल गणना योग्य नहीं है।






f(x) = exp(x^2)।