বৈজ্ঞানিক পাইথনে সীমাবদ্ধ পার্থক্য পদ্ধতির জন্য সুপারিশ


20

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

আপনি কীভাবে কার্যকরভাবে বৈজ্ঞানিক পাইথনের সীমাবদ্ধ পার্থক্যের স্কিম কোড করতে চান তা শেখার জন্য কিছু সংস্থার সুপারিশ করতে পারেন (ছোট শিক্ষার বাঁকযুক্ত অন্যান্য ভাষাও স্বাগত জানায়)?

এই সুপারিশের জন্য আপনাকে শ্রোতাদের (আমি) একটি ধারণা দেওয়ার জন্য:

  • আমি প্রশিক্ষণের মাধ্যমে খাঁটি গণিতজ্ঞ এবং সীমাবদ্ধ পার্থক্য প্রকল্পের তাত্ত্বিক দিকগুলির সাথে কিছুটা পরিচিত
  • আমার যেটি সাহায্যের দরকার তা হ'ল কম্পিউটারটি আমি কীভাবে এটি গণনা করতে চাই তা গণনা করা যায়, বিশেষত এমনভাবে যে অন্যদের দ্বারা ইতিমধ্যে করা প্রচেষ্টার আমি খুব বেশি নকল করতে পারি না (যাতে চাকাটি পুনরায় উদ্ভাবন না করার সময় একটি প্যাকেজ ইতিমধ্যে উপলব্ধ। (আর একটি বিষয় যা আমি এড়াতে চাই তা হ'ল মূর্খতার সাথে কোনও কোড কোড করা যখন উদ্দেশ্যটির সাথে উপযোগী কোনও ডেটা স্ট্রাকচার থাকে))
  • আমার কিছু কোডিংয়ের অভিজ্ঞতা হয়েছে; তবে পাইথনে আমার কিছুই ছিল না (অতএব কোনও ভিন্ন ভাষা শেখার জন্য যদি ভাল সংস্থান থাকে তবে আমি কিছু মনে করি না [উদাহরণস্বরূপ, অক্টাভা উদাহরণস্বরূপ])।
  • বই, ডকুমেন্টেশন উভয়ই কার্যকর হবে, উদাহরণ কোডের সংগ্রহ হিসাবে।

মূল সমস্যাটি হ'ল আমি জানি না কোথায় সন্ধান করা শুরু করবে: সুতরাং এমনকি প্রাথমিক পরামর্শগুলি সহায়ক হবে।
উইলি ওয়াং

সীমাবদ্ধতা কেবলমাত্র আমি সীমাবদ্ধ ভলিউম পদ্ধতিগুলির সাথে পরিচিত নই (এখনও); সুতরাং আমি একযোগে পদ্ধতি শিখতে হবে। অবশ্যই আমি এ জাতীয় কোনও উত্তর দিতে আপত্তি করব না।
উইলি ওয়াং

পাইক্লা ননলাইন উত্সের শর্তাদি পরিচালনা করতে পারে তবে আপনার নিজের রিমন সলভার লেখা জটিল হবে, বিশেষত ২ য় বা উচ্চতর মাত্রায়। যদি আপনি স্ট্রাকচার্ড গ্রিডগুলির সাথে একটি সাধারণ সীমাবদ্ধ- বিচ্ছিন্নকরণের স্কিমটি চেষ্টা করতে চান তবে আপনার পরবর্তী বিকল্পটি হ'ল পেটস্কেপি 4-তে কিছু চেষ্টা করা হবে , (প্রকাশ: আমিও এই প্রকল্পের সাথে যুক্ত আছি), যা আরও সাধারণ উদ্দেশ্য এবং না-যেমন নথিভুক্ত।
অরন আহমদিয়া


হাই উইলি (এবং পাঠকদের জন্য যাঁরা চ্যাটের দিকে নজর দেননি), আমি মনে করি আপনি এটি ইতিমধ্যে জানেন, তবে যেহেতু আপনি হাইপারবোলিক পিডিই উল্লেখ করেছেন আপনি সম্ভবত একটি সীমাবদ্ধ ভলিউম পদ্ধতিতে আরও ভাল থাকবেন।
ম্যাথু এমমেট

উত্তর:


10

আমি রক্ষিত পাই 4 এসসি রিপোজিটরি থেকে প্রফেসর ডেভিড কেচসনের অবদান রেখে সীমাবদ্ধ পার্থক্য পদ্ধতি ব্যবহার করে একটি সাধারণ মাল্টিভারিয়েট পিডিই সমাধানের 97-লাইনের উদাহরণ এখানে রয়েছে । আরও জটিল সমস্যার জন্য যেখানে আপনাকে সীমাবদ্ধ-ভলিউম বিচক্ষণতার জন্য শক বা সংরক্ষণ পরিচালনা করতে হবে, আমি পাইক্লাউ নামক একটি সফ্টওয়্যার প্যাকেজ যা আমি বিকাশে সহায়তা করি তা দেখার পরামর্শ দিই।

"""Pattern formation code

    Solves the pair of PDEs:
       u_t = D_1 \nabla^2 u + f(u,v)
       v_t = D_2 \nabla^2 v + g(u,v)
"""

import matplotlib
matplotlib.use('TkAgg')
import numpy as np
import matplotlib.pyplot as plt
from scipy.sparse import spdiags,linalg,eye
from time import sleep

#Parameter values
Du=0.500; Dv=1;
delta=0.0045; tau1=0.02; tau2=0.2; alpha=0.899; beta=-0.91; gamma=-alpha;
#delta=0.0045; tau1=0.02; tau2=0.2; alpha=1.9; beta=-0.91; gamma=-alpha;
#delta=0.0045; tau1=2.02; tau2=0.; alpha=2.0; beta=-0.91; gamma=-alpha;
#delta=0.0021; tau1=3.5; tau2=0; alpha=0.899; beta=-0.91; gamma=-alpha;
#delta=0.0045; tau1=0.02; tau2=0.2; alpha=1.9; beta=-0.85; gamma=-alpha;
#delta=0.0001; tau1=0.02; tau2=0.2; alpha=0.899; beta=-0.91; gamma=-alpha;
#delta=0.0005; tau1=2.02; tau2=0.; alpha=2.0; beta=-0.91; gamma=-alpha; nx=150;

#Define the reaction functions
def f(u,v):
    return alpha*u*(1-tau1*v**2) + v*(1-tau2*u);

def g(u,v):
    return beta*v*(1+alpha*tau1/beta*u*v) + u*(gamma+tau2*v);


def five_pt_laplacian(m,a,b):
    """Construct a matrix that applies the 5-point laplacian discretization"""
    e=np.ones(m**2)
    e2=([0]+[1]*(m-1))*m
    h=(b-a)/(m+1)
    A=np.diag(-4*e,0)+np.diag(e2[1:],-1)+np.diag(e2[1:],1)+np.diag(e[m:],m)+np.diag(e[m:],-m)
    A/=h**2
    return A

def five_pt_laplacian_sparse(m,a,b):
    """Construct a sparse matrix that applies the 5-point laplacian discretization"""
    e=np.ones(m**2)
    e2=([1]*(m-1)+[0])*m
    e3=([0]+[1]*(m-1))*m
    h=(b-a)/(m+1)
    A=spdiags([-4*e,e2,e3,e,e],[0,-1,1,-m,m],m**2,m**2)
    A/=h**2
    return A

# Set up the grid
a=-1.; b=1.
m=100; h=(b-a)/m; 
x = np.linspace(-1,1,m)
y = np.linspace(-1,1,m)
Y,X = np.meshgrid(y,x)

# Initial data
u=np.random.randn(m,m)/2.;
v=np.random.randn(m,m)/2.;
plt.hold(False)
plt.pcolormesh(x,y,u)
plt.colorbar; plt.axis('image'); 
plt.draw()
u=u.reshape(-1)
v=v.reshape(-1)

A=five_pt_laplacian_sparse(m,-1.,1.);
II=eye(m*m,m*m)

t=0.
dt=h/delta/5.;
plt.ion()

#Now step forward in time
for k in range(120):
    #Simple (1st-order) operator splitting:
    u = linalg.spsolve(II-dt*delta*Du*A,u)
    v = linalg.spsolve(II-dt*delta*Dv*A,v)

    unew=u+dt*f(u,v);
    v   =v+dt*g(u,v);
    u=unew;
    t=t+dt;

    #Plot every 3rd frame
    if k/3==float(k)/3:
        U=u.reshape((m,m))
        plt.pcolormesh(x,y,U)
        plt.colorbar
        plt.axis('image')
        plt.title(str(t))
        plt.draw()

plt.ioff()

8

আপনি ফেনিক্সের দিকে নজর রাখতে পারেন , এটি একটি অজগর / সি ফ্রেমওয়ার্ক যা একটি বিশেষ মার্কআপ ল্যাঙ্গুয়েজ ব্যবহার করে বেশ সাধারণ সমীকরণকে সমাধান করার অনুমতি দেয়। এটি বেশিরভাগ ক্ষেত্রে সীমাবদ্ধ উপাদান ব্যবহার করে তবে এক নজর দেখার মতো worth টিউটোরিয়াল আপনি কত সহজ সমস্যার সমাধানের হতে পারে একটি ছাপ দিতে হবে।


3

এই রেফারেন্স আপনার জন্য খুব দরকারী হতে পারে। এটি ইন্টারনেটে একটি উন্মুক্ত বই। এই বইটি থেকে আমি (এখনও শিখছি), অজগর শিখেছি। আমি সত্যিই এটি খুব ভাল সংস্থান পেয়েছি।

http://www.openbookproject.net/thinkcs/python/english2e/

সংখ্যার গণনার জন্য অবশ্যই একজনকে অবশ্যই 'নিম্পি' করা উচিত। (কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি 'অ্যারে' এবং 'ম্যাট্রিক্স' এবং 'তালিকা' সঠিকভাবে বুঝতে পেরেছেন) (এর জন্য অদ্ভুত ডকুমেন্টেশন উল্লেখ করুন)

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