সংখ্যার গণিতে পরিচিতি
এটি হ্যালো, ওয়ার্ল্ড! PDEs এর (আংশিক ডিফারেনশিয়াল সমীকরণ)। ল্যাপ্লেস বা ডিফিউশন সমীকরণ প্রায়শই পদার্থবিজ্ঞানে প্রদর্শিত হয়, উদাহরণস্বরূপ হিট সমীকরণ, ডিফর্মিং, ফ্লুয়েড ডায়নামিকস ইত্যাদি ... বাস্তব জীবন যেমন 3 ডি কিন্তু আমরা বলতে চাই "হ্যালো, ওয়ার্ল্ড!" এবং "99 বোতল বিয়ার, ..." গাইবেন না এই কাজটি 1 ডি তে দেওয়া হয়েছে। আপনি এটিকে দু'প্রান্তে প্রাচীরের সাথে আবদ্ধ রাবারের পোশাকের সাথে কিছুটা চাপ প্রয়োগ করে ব্যাখ্যা করতে পারেন।
কোনও [0,1]
ডোমেনে u
প্রদত্ত উত্স ফাংশন f
এবং সীমানা মান u_L
এবং এর জন্য একটি ফাংশন সন্ধান করুন u_R
:
-u'' = f
u(0) = u_L
u(1) = u_R
u''
এর দ্বিতীয় ডেরাইভেটিভকে বোঝায় u
এটি নিখুঁত তাত্ত্বিকভাবে সমাধান করা যেতে পারে তবে আপনার কাজটি হ'ল সংখ্যাসূচকভাবে এটি একটি বিযুক্ত ডোমেন এক্সের জন্য 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
আউটপুট
- এরে, তালিকা, এর Seperated স্ট্রিং এর কিছু বাছাই
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
(কেউ মাধ্যাকর্ষণ কপর্দকশূন্য অথবা up- এবং downwind কেমন হয়)
আউটপুট: [ 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
সাথে সাথে আপনার অবশিষ্টাংশটি পুনরাবৃত্তি করা উচিতb
u_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)
।