সীমাবদ্ধ পার্থক্য সহ একটি আনুমানিক জ্যাকবিয়ান কি নিউটন পদ্ধতিতে অস্থিতিশীলতার কারণ হতে পারে?


13

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

আসচের এবং পেটজোল্ড 1998-এ প্রদত্ত বিবরণগুলি ব্যবহার করে , আমি এই ফাংশনটি লিখেছি যা একটি নির্দিষ্ট বিন্দুতে গ্রেডিয়েন্ট নির্ধারণ করে:

def jacobian(f,x,d=4):
    '''computes the gradient (Jacobian) at a point for a multivariate function.

    f: function for which the gradient is to be computed
    x: position vector of the point for which the gradient is to be computed
    d: parameter to determine perturbation value eps, where eps = 10^(-d).
        See Ascher und Petzold 1998 p.54'''

    x = x.astype(np.float64,copy=False)
    n = np.size(x)
    t = 1 # Placeholder for the time step
    jac = np.zeros([n,n])
    eps = 10**(-d)
    for j in np.arange(0,n):
        yhat = x.copy()
        ytilde = x.copy()
        yhat[j] = yhat[j]+eps
        ytilde[j] = ytilde[j]-eps
        jac[:,j] = 1/(2*eps)*(f(t,yhat)-f(t,ytilde))
    return jac

আমি দুলটির জন্য বহুবিধ ফাংশন গ্রহণ করে এবং বিভিন্ন পয়েন্টের জন্য সংখ্যাগতভাবে নির্ধারিত গ্রেডিয়েন্টের সাথে প্রতীকী জ্যাকবিয়ানকে তুলনা করে এই ফাংশনটি পরীক্ষা করেছি। আমি পরীক্ষার ফলাফল নিয়ে সন্তুষ্ট ছিলাম, ত্রুটিটি 1e-10 এর কাছাকাছি ছিল। আমি যখন আনুমানিক জ্যাকবিয়ান ব্যবহার করে দুলের জন্য ওডিই সমাধান করেছি, এটিও খুব ভাল কাজ করেছে; আমি দুজনের মধ্যে কোনও পার্থক্য সনাক্ত করতে পারি না।

তারপরে আমি এটি নীচের পিডিই (1 ডি তে ফিশারের সমীকরণ) দিয়ে পরীক্ষা করার চেষ্টা করেছি:

tu=x(kxu)+λ(u(Cu))

একটি সীমাবদ্ধ পার্থক্য বিবেচনার ব্যবহার।

নিউটনের পদ্ধতিটি প্রথম টাইমস্টেপে ফুরিয়েছে:

/home/sfbosch/Fisher-Equation.py:40: RuntimeWarning: overflow encountered in multiply
  du = (k/(h**2))*np.dot(K,u) + lmbda*(u*(C-u))
./newton.py:31: RuntimeWarning: invalid value encountered in subtract
  jac[:,j] = 1/(2*eps)*(f(t,yhut)-f(t,yschlange))
Traceback (most recent call last):
  File "/home/sfbosch/Fisher-Equation.py", line 104, in <module>
    fisher1d(ts,dt,h,L,k,C,lmbda)
  File "/home/sfbosch/Fisher-Equation.py", line 64, in fisher1d
    t,xl = euler.implizit(fisherode,ts,u0,dt)
  File "./euler.py", line 47, in implizit
    yi = nt.newton(g,y,maxiter,tol,Jg)
  File "./newton.py", line 54, in newton
    dx = la.solve(A,b)
  File "/usr/lib64/python3.3/site-packages/scipy/linalg/basic.py", line 73, in solve
    a1, b1 = map(np.asarray_chkfinite,(a,b))
  File "/usr/lib64/python3.3/site-packages/numpy/lib/function_base.py", line 613, in asarray_chkfinite
    "array must not contain infs or NaNs")
ValueError: array must not contain infs or NaNs

এটি বিভিন্ন ইপিএস মানগুলির জন্য ঘটে তবে আশ্চর্যের বিষয় হল, কেবলমাত্র যখন PDE স্থানিক পদক্ষেপের আকার এবং সময় ধাপের আকার সেট করা থাকে যাতে কুরিয়ান্ট – ফ্রেডরিচস – লেউই শর্তটি পূরণ হয় না। অন্যথায় এটি কাজ করে। (ফরোয়ার্ড এলারের সাথে সমাধান করা যদি আপনি এই আচরণটি আশা করতেন!)

সম্পূর্ণতার জন্য, এখানে নিউটন পদ্ধতিটির ফাংশন রয়েছে:

def newton(f,x0,maxiter=160,tol=1e-4,jac=jacobian):
    '''Newton's Method.

    f: function to be evaluated
    x0: initial value for the iteration
    maxiter: maximum number of iterations (default 160)
    tol: error tolerance (default 1e-4)
    jac: the gradient function (Jacobian) where jac(fun,x)'''

    x = x0
    err = tol + 1
    k = 0
    t = 1 # Placeholder for the time step
    while err > tol and k < maxiter:
        A = jac(f,x)
        b = -f(t,x)
        dx = la.solve(A,b)
        x = x + dx
        k = k + 1
        err = np.linalg.norm(dx)
    if k >= maxiter:
        print("Maxiter reached. Result may be inaccurate.")
        print("k = %d" % k)
    return x

(La.solve ফাংশনটি scipy.linalg.solve হয়))

আমি আত্মবিশ্বাসী যে আমার পশ্চাৎ অয়লার বাস্তবায়ন যথাযথ, কারণ আমি এটি জ্যাকবীয়দের জন্য একটি ফাংশন ব্যবহার করে পরীক্ষা করেছি এবং স্থিতিশীল ফলাফল পাচ্ছি।

আমি ডিবাগারে দেখতে পাচ্ছি যে নিউটন () ত্রুটি হওয়ার আগে 35 টি পুনরাবৃত্তি পরিচালনা করে। আমি চেষ্টা করেছি এমন প্রতিটি প্রতিবেদনের জন্য এই সংখ্যাটি একই থাকবে।

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

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


1
"আমি আত্মবিশ্বাসী যে আমার পিছিয়ে পড়া অয়লার বাস্তবায়ন যথাযথ, কারণ আমি জ্যাকবীয়দের জন্য একটি ফাংশন ব্যবহার করে এটি পরীক্ষা করেছি এবং স্থিতিশীল ফলাফল পেয়েছি।" পরিষ্কার করে বলো. আপনি কি বলছেন যে আপনি ঠিক জ্যাকবিয়ান নিয়ে একই সমস্যাটি চালাচ্ছেন এবং সমাধানটি পিডিইর সঠিক সমাধানে রূপান্তরিত করে? এটি গুরুত্বপূর্ণ তথ্য।
ডেভিড কেচসন

@ ডেভিডকিচসন হ্যাঁ, আমি যা বলছি আমার পরিভাষাটি ভুল বা অসম্পূর্ণ হলে দুঃখিত ologies (আমি মনে করি আমারও বলা উচিত ছিল "আমি স্থিতিশীল এবং প্রত্যাশিত ফলাফল পেয়েছি।")
স্টিফেন বোশ

উত্তর:


3

অন্য যে কোনও কিছুর চেয়ে দীর্ঘ মন্তব্য:

আসচের এবং পেটজোল্ড 1998-এ প্রদত্ত বিবরণগুলি ব্যবহার করে, আমি এই ফাংশনটি লিখেছি যা একটি নির্দিষ্ট বিন্দুতে গ্রেডিয়েন্ট নির্ধারণ করে:

বাস্তবায়নে আপনার কী করা উচিত সে সম্পর্কে আরও ভাল ধারণা পেতে SUNDIALS এর পার্থক্য ভাগফলের আনুমানিকতার কোডটি দেখুন। আসচার এবং পেটজল্ড শুরু করার জন্য একটি ভাল বই, তবে প্রকৃতপক্ষে উত্পাদনের কাজে ব্যবহৃত হয় এবং এভাবে আরও ভালভাবে পরীক্ষা করা হয়েছে। (এছাড়াও, SUNDIALS DASPK এর সাথে সম্পর্কিত যা পেটজল্ড কাজ করেছিলেন))

আসকার এবং পেটজোল্ড উল্লেখ করেছেন যে জ্যাকবীয়দের জন্য পার্থক্য আনুমানিকতা সর্বদা ভাল কাজ করে না। সীমাবদ্ধ পার্থক্য সহ একটি আনুমানিক জ্যাকবিয়ান কি নিউটনের পদ্ধতিতে অস্থিতিশীলতার কারণ হতে পারে?

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

বা কারণ অন্য কোথাও? আর কীভাবে আমি এই সমস্যার কাছে যেতে পারি?

এটি নির্ভর করে যেখানে আপনি মনে করেন ত্রুটিটি হতে পারে। আপনি যদি পশ্চাৎপদ অ্যালার প্রয়োগের ক্ষেত্রে চূড়ান্ত আত্মবিশ্বাসী হন তবে আমি সেখানে শুরু করব না। অভিজ্ঞতা আমার সংখ্যার পদ্ধতিগুলি প্রয়োগের ক্ষেত্রে নির্লজ্জ করে তুলেছে, তাই যদি এটি আমার হয় তবে আমি কয়েকটা সত্যিকারের মৌলিক পরীক্ষার সমস্যাগুলি কোড করে শুরু করতাম (একটি দম্পতি ননসিফ এবং কঠোর রৈখিক সমস্যা, কেন্দ্রিক সীমাবদ্ধ পার্থক্য আনুমানিকতা সহ তাপের সমীকরণ, এই জাতীয় জিনিসগুলি) এবং আমি নিজেকে নিশ্চিত করার জন্য উত্পাদিত সমাধানগুলির পদ্ধতিটি ব্যবহার করব যে আমি জানি যে সমাধানটি কী হবে, এবং আমার সাথে কি তুলনা করা উচিত।

যাইহোক, আপনি ইতিমধ্যে এর কিছু সম্পন্ন করেছেন:

আমি আত্মবিশ্বাসী যে আমার পশ্চাৎ অয়লার বাস্তবায়ন যথাযথ, কারণ আমি এটি জ্যাকবীয়দের জন্য একটি ফাংশন ব্যবহার করে পরীক্ষা করেছি এবং স্থিতিশীল ফলাফল পাচ্ছি।

এটিই আমি পরের জিনিসটি পরীক্ষা করব: বিশ্লেষণযোগ্য জ্যাকবিয়ান ব্যবহার করুন। এরপরে, আপনি পশ্চাদপদ ইউলারের অস্থির অঞ্চলে থাকাকালীন আপনার সীমাবদ্ধ পার্থক্য জ্যাকবিয়ানের অসাধারণ এজনভ্যালুগুলিও দেখতে পাবেন। তুলনা করার জন্য ভিত্তি হিসাবে আপনার বিশ্লেষণাত্মক জ্যাকবিয়ানের এক্সট্রামল ইগ্যালভ্যালুগুলি অনুসন্ধান করা আপনাকে কিছুটা অন্তর্দৃষ্টি দিতে পারে। এই সমস্ত পরীক্ষা করে ধরে নেওয়া, সমস্যাটি সম্ভবত নিউটন সমাধানে রয়েছে।


বিবেচ্য বিশ্লেষণের জন্য ধন্যবাদ (প্লাস সূচি ইঙ্গিত এবং বিকল্প উত্স) আমার অধ্যাপক ল্যাম্বডা = 0 নির্ধারণের পরামর্শ দিয়েছিলেন, পিডিই এর এফডিএ লিনিয়ার হয়ে যায়, তাই আমরা আশা করব যে এফডিএ জ্যাকবীয়ান বিশ্লেষক জ্যাকবীয়ানের সমান হবে। আমি যখন এটি করি, এটি তিনবার টাইপস্টেপগুলি পরিচালনা করে, নিউটন () প্রতিবার ম্যাক্সিটারটি চাপায়, শেষ পর্যন্ত আগের মতোই ফুরিয়ে যাওয়ার আগে।
স্টিফেন বোশ 23'15

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

1
আপনার অধ্যাপকের বক্তব্যটি কিছুটা আশ্চর্যজনক, এই বিষয়টিতে সাহিত্যের পরিমাণ বিবেচনা করে, উদাহরণস্বরূপ নোল এবং কীসের এই বিখ্যাত পর্যালোচনা । আমার উত্তরটি সম্ভবত আমার এই কাগজটি উদ্ধৃত করা উচিত ছিল, কারণ গ্রন্থপথের সূত্রগুলিও আপনার সমস্যাগুলি নির্ণয়ের ক্ষেত্রে কিছুটা সহায়ক হতে পারে।
জেফ অক্সবেরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.