নিম্নলিখিতগুলি সম্পর্কে আমার কয়েকটি প্রশ্ন আছে:
আমি ক্র্যাঙ্ক নিকোলসন বিচক্ষণতা এবং ফলস্বরূপ ত্রিভুজাকৃতির ম্যাট্রিক্সকে উল্টিয়ে দিয়ে 1 ডি তে শ্রডিংগার সমীকরণটি সমাধান করার চেষ্টা করছি। আমার সমস্যা এখন পর্যায়ক্রমিক সীমানা শর্ত নিয়ে একটি সমস্যায় রূপান্তরিত হয়েছে এবং তাই আমি শেরম্যান মরিসন অ্যালগরিদমটি ব্যবহার করার জন্য আমার কোডটি পরিবর্তন করেছি।
ধরুন v
আমি যখন ত্রিদুটিভুজ ম্যাট্রিক্সটি উল্টাতে চাই তখন প্রতিটি ধাপে আমার আরএইচএস হয়। আকারটি v
হ'ল গ্রিড পয়েন্টগুলির সংখ্যার চেয়ে আমি বেশি স্থান পেয়েছি। যখন আমি সেট v[0]
এবং v[-1]
একে অপরের হিসাবে আমার পর্যাবৃত্ত অবস্থায় প্রয়োজন বোধ করা হয় পরিপ্রেক্ষিতে, আমার সমীকরণ আপ মারতে লাগল। কেন ঘটছে তা আমি বলতে পারছি না। সমীকরণটি সমাধান করতে আমি পাইথন 2.7 ব্যবহার করছি এবং স্কিপির ইনবিল্ট সলভ_ব্যাংড।
এটি আমার দ্বিতীয় প্রশ্নের দিকে নিয়ে যায়: আমি পাইথনটি ব্যবহার করলাম কারণ এটি আমার সবচেয়ে ভাল ভাষা জানা ভাষা, তবে আমি এটিকে বরং ধীর বলে মনে করি (এমনকি অদ্ভুত এবং ছদ্মবেশী দ্বারা উত্সাহিত অপ্টিমাইজেশন সহ)। আমি সি ++ ব্যবহার করার চেষ্টা করেছি কারণ আমি এর সাথে যুক্তিযুক্তভাবে পরিচিত। আমি ভেবেছিলাম যে আমি জিএসএল ব্যবহার করব যা বিএলএএস অনুকূলিত হবে, তবে জটিল ভেক্টর তৈরি করতে বা ত্রিভুজাকৃতির ম্যাট্রিক্সকে জটিল জটিল মূল্যবান ভেক্টরগুলির সাথে সমাধান করার জন্য কোনও নথিপত্র পাইনি।
আমি আমার প্রোগ্রামে অবজেক্টগুলিকে পছন্দ করব কারণ আমার কাছে মনে হয় পরে তরঙ্গ ফানকের মধ্যে সংযোগ স্থাপনের পক্ষে আমার পক্ষে সাধারণীকরণের সবচেয়ে সহজতম উপায় এটি এইভাবে আমি কোনও অবজেক্ট ওরিয়েন্টেড ভাষায় আঁকছি।
আমি হাতে হাতে ত্রিভুজাকৃতির ম্যাট্রিক্স সলভার লেখার চেষ্টা করতে পারি, তবে অজগরটি করার সময় আমি সমস্যার মধ্যে পড়েছিলাম। আমি সূক্ষ্ম ও সূক্ষ্ম সময়ের সাথে ধীরে ধীরে বিবর্তিত হওয়ার সাথে সাথে ত্রুটিটি জমে এবং আমাকে বাজে কথা বলেছিল। এটি মাথায় রেখে, আমি অন্তর্নির্মিত পদ্ধতিগুলি ব্যবহার করার সিদ্ধান্ত নিয়েছি।
কোন পরামর্শ অনেক প্রশংসা করা হয়।
সম্পাদনা: এখানে প্রাসঙ্গিক কোড স্নিপেট। ত্রিদিগোনাল ম্যাট্রিক্স (টিডিএম) সমীকরণের উইকিপিডিয়া পৃষ্ঠা থেকে স্বাক্ষর নেওয়া হয়েছে b v প্রতিটি সময় পদক্ষেপে ক্র্যাঙ্ক নিকোলসন অ্যালগরিদমের আরএইচএস। ভেক্টর a, b এবং c টিডিএম এর কর্ণস। পর্যায়ক্রমিক কেসের জন্য সংশোধিত অ্যালগরিদম সিএফডি উইকি থেকে প্রাপ্ত । আমি একটু নামকরণ করেছি। তারা যা আপনাকে ডেকেছে, v আমি ইউ, ভি (মূলধন) বলেছি। আমি q কে পরিপূরক বলেছি, y অস্থায়ী সমাধান এবং প্রকৃত সমাধানটি সেলফ্রন্ট স্টোর। ভি [0] এবং ভি [-1] এর অ্যাসাইনমেন্টটিই এখানে সমস্যা তৈরি করছে এবং তাই এখানে মন্তব্য করা হয়েছে। আপনি গামার কারণগুলি উপেক্ষা করতে পারেন। এগুলি বোস আইনস্টাইন কনডেনসেটের মডেল করার জন্য ব্যবহৃত লিনিয়ার ফ্যাক্টর।
for T in np.arange(self.timeArraySize):
for i in np.arange(0,self.spaceArraySize-1):
v[i] = Y*self.currentState[i+1] + (1-2*Y)*self.currentState[i] + Y*self.currentState[i-1] - 1j*0.5*self.timeStep*potential[i]*self.currentState[i] - self.gamma*1j*0.5*self.timeStep*(abs(self.currentState[i])**2)*self.currentState[i]
b[i] = 1+2*Y + 1j*0.5*self.timeStep*potential[i] + self.gamma*self.timeStep*1j*0.5*(abs(self.currentState[i])**2)
#v[0] = Y*self.currentState[1] + (1-2*Y)*self.currentState[0] + Y*self.currentState[-1] - 1j*0.5*self.timeStep*potential[0]*self.currentState[0]# - self.gamma*1j*0.5*self.timeStep*(abs(self.currentState[0])**2)*self.currentState[0]
#v[-1] = Y*self.currentState[0] + (1-2*Y)*self.currentState[-1] + Y*self.currentState[-2] - 1j*0.5*self.timeStep*potential[-1]*self.currentState[-1]# - self.gamma*1j*0.5*self.timeStep*(abs(self.currentState[-1])**2)*self.currentState[-1]
b[0] = 1+2*Y + 1j*0.5*self.timeStep*potential[0] + self.gamma*self.timeStep*1j*0.5*(abs(self.currentState[0])**2)
b[-1] = 1+2*Y + 1j*0.5*self.timeStep*potential[-1] + self.gamma*self.timeStep*1j*0.5*(abs(self.currentState[-1])**2)
diagCorrection[0], diagCorrection[-1] = - b[0], - c[-1]*a[0]/b[0]
tridiag = np.matrix([
c,
b - diagCorrection,
a,
])
temp = solve_banded((1,1), tridiag, v)
U = np.zeros(self.spaceArraySize, dtype=np.complex64)
U[0], U[-1] = -b[0], c[-1]
V = np.zeros(self.spaceArraySize, dtype=np.complex64)
V[0], V[-1] = 1, -a[0]/b[0]
complement = solve_banded((1,1), tridiag, U)
num = np.dot(V, temp)
den = 1 + np.dot(V, complement)
self.currentState = temp - (num/den)*complement