সুপারকন্ডাক্টর্টর (পাইথন) জন্য মডেলিং কার্ভের জন্য সংখ্যার একীকরণ


9

আমি একজন পদার্থবিজ্ঞানী যিনি একটি সুপারকন্ডাক্টর-সুপারকন্ডাক্টর জংশনের বর্তমান-ভোল্টেজ বৈশিষ্ট্যগুলি মডেল করার চেষ্টা করছেন।

সমীকরণ এই মডেল জন্য হল:

I(V)=1eRnn|E|[E2Δ12]1/2|E+eV|[(E+eV)2Δ22]1/2[f(E)f(E+eV)]dE

প্রদত্ত ভোল্টেজের ( , বা কোডে) জন্য এই অবিচ্ছেদ্য মূল্যায়ন করে বর্তমান ( বা কোডে) মানগুলি গণনা করা হয় ।IIVv

আমি পাইথনে এটি চেষ্টা করেছি। কোড নীচে প্রদর্শিত হয়।

from scipy import integrate
from numpy import *
import pylab as pl
import math

ec = 1.6021764*10**(-19)
r = 2500
gap = 200*10**(-6)*ec
g = (gap)**2
t = 0.04
k = 1.3806503*10**(-23)
kt = k*t

v_values = arange(0,0.001,0.00001)

I=[]
for v in v_values:
    result, error = integrate.quad (lambda E:(abs(E)/sqrt((E**2-g)))*(abs(E+ec*v)/(sqrt(((E+ec*v)**2-g))))*(math.exp(-E/kt)*(math.exp(-ec*v/kt)-1)),(-inf),(-gap*0.9-ec*v))
    I.append(result)
I = array(I)

I2=[]
for v in v_values:
    result2 = integrate.quad(lambda E:(abs(E)/sqrt((E**2-g)))*(abs(E+ec*v)/(sqrt(((E+ec*v)**2-g))))*(math.exp(-E/kt)*(math.exp(-ec*v/kt)-1)),(gap*0.9),(inf))
    I2.append(result2)
I2 = array(I2)

pl.plot(v_values,I,'-b',v_values,I2,'-r')
pl.xlabel(r'Voltage ($V$)')
pl.ylabel(r'Current ($A$)')
pl.title('Theoretical I(V) curve')
pl.grid(True)
pl.savefig('IVcurve.png')
pl.show()

তবে, আমি গ্রহণ OverflowError: math range error। এটি কীভাবে কাটিয়ে উঠতে পারে তার কারও কি ধারণা আছে? 10**nদীর্ঘতর ইন্টিগ্রালের জন্য ক্ষমা প্রার্থনা করছি । এক্সপেনশিয়ালগুলি মুছে ফেলা হলে কোডটি চালিত হয় (0 রিটার্ন করে) এবং এর মধ্যেই সমস্যাটি রয়েছে।

পাইথন বা অন্য কোনও ভাষায় এটিকে কীভাবে মডেল করা যায়?


দয়া করে, জেফডকে নীচে তার উত্তরে যেমন উল্লেখ করেছেন: আপনার মানগুলি পরীক্ষা করুন -> ই এর বর্গ থেকে কোনও মান g = বিয়োগ করার সময় আপনার মানগুলি পরীক্ষা করুন -> E -inf থেকে + inf পর্যন্ত যান ! এবং ডিবাগিংয়ের উদ্দেশ্যে, ফাংশনটি আপনার সংহতকরণ (ল্যাম্বডা ফর্মটি ব্যবহার করার পরিবর্তে) সংজ্ঞায়িত করা ভাল ধারণা হতে পারে যাতে আপনি অপরাধীকে সনাক্ত করার জন্য এটির উপাদান / পদ / অংশে বিভক্ত করতে পারেন (যদিও এই ক্ষেত্রে, আপনার সমস্ত কারণগুলি সমস্যায় রয়েছে)। O(1e45)
GertVdE

উত্তর:


3

প্রথমত, সমস্যাটি আরও ডিবাগ করা এবং ওভারফ্লোটি কোথা থেকে আসছে (কোন শব্দটি, কোন পরামিতিগুলির জন্য) তা দেখতে সর্বদা ভাল। এটি আমার কাছে প্রশ্ন থেকে পরিষ্কার ছিল না।

সমস্যাটি কী তা সুনির্দিষ্টভাবে জানলে আপনি সমস্যাটি আরও ভালভাবে নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, ওভারফ্লো সমস্যাটি নেওয়া যাক। যদি আমি সঠিকভাবে মনে করি তবে এটি 1e300 এরও বেশি।

  1. আপনি নিজেকে জিজ্ঞাসা করা উচিত 'আমি কি সত্যিই এমন একটি পরিসরের দিকে আঘাত করা উচিত যেখানে এই ভেরিয়েবলটি উচ্চতর হচ্ছে'?
  2. যদি উত্তরটি 'হ্যাঁ, তবে এটি অন্য শর্ত দ্বারা বিভক্ত বা বাতিল হয়ে যায়', আপনাকে সেই সমীকরণগুলি এমনভাবে মিশ্রিত করে আবার লিখতে হবে those এটি হ'ল আপনি যদি সাথে গণনা করছেন তবে এবং সংজ্ঞায়িত করার চেষ্টা করুন এবং সেই পরিবর্তনগুলি একীভূত করুন। আপনার সমীকরণগুলি লেখার জন্য এখানে লক্ষ্যগুলি হওয়া উচিত যাতে আপনি সর্বদা একই আকারের শর্তগুলির সাথে তুলনা করে চলেছেন। (x+y)/zx,y,zx=x/zy=y/z
  3. যদি আপনি নিশ্চিত হন যে সমস্যার জন্য আপনার খুব বড় সংখ্যক প্রয়োজন, আপনার সমীকরণগুলি এমন একটি রূপে রূপান্তর করার চেষ্টা করুন যেখানে মৌলিক ভেরিয়েবলগুলি লগস্পেসে রয়েছে।

নোট করুন যে আপনি কোডটি স্পষ্টভাবে একটি অনুচিত অবিচ্ছেদ্য (-inf, inf) করার জন্য জিজ্ঞাসা করছেন, সুতরাং আপনার এটি নিশ্চিত করতে হবে যে আপনি যে সংখণ্ডটিটি এটিতে রেখেছেন সেটি পুরো ডোমেনের সাথে সংখ্যার জন্য ভাল আচরণ করা হয়েছে! আপনি যে ক্ষুদ্রতম মানটি করতে পারেন তাতে অবিচ্ছেদ্য কাটাতে সাহায্য করতে পারে, এটিকে call বলা যাক , যেখানে আপনি শারীরিকভাবে জানেন যে আপনি থেকে জন্য ইন্টিগ্রালটিতে কোনও অবদানের আশা করেন না ।EmaxEmax

শুভকামনা!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.