সি ++ এ কীভাবে পুনরাবৃত্ত স্প্লাইন ফাংশন তৈরি করবেন


10

এই মুহুর্তে ভিত্তি-স্প্লাইন সংঘটন নামক একটি ডিফারেনশিয়াল সমীকরণ সমাধানের পদ্ধতিতে আমি কাজ করছি। অর্ডার স্প্লাইন তৈরির জন্য একটি পদ্ধতি তৈরি করা হচ্ছে সাথে প্রাথমিক শর্ত এবং আমার এই সমস্যাটি শুরু করেও সমস্যা হচ্ছে, কারণ এটি পুনরাবৃত্তি হওয়ায় এটি "শীর্ষ" বা "নীচ" থেকে শুরু হতে পারে, এবং আমি সাধারণ লেখকদের ব্লকের ধরণে চলেছি জিনিসটি, যেখানে আমি যা করতে চাই তার চারপাশে আমি আমার মন পেতে পারি না।বি 1 আই (এক্স)={ 1

বিআমি+ +1(এক্স)=এক্স-এক্সআমিএক্স+ +আমি-এক্সআমিবিআমি+ +এক্স+ +আমি+ +1-এক্সএক্স+ +আমি+ +1-এক্সআমি+ +1বিআমি+ +1(এক্স)
বিআমি1(এক্স)={1জন্য এক্সআমিএক্স<এক্সআমি+ +10অন্যভাবে

উত্তর:



6

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


4

আমি সত্যই জানি না যে এটি কতটা দক্ষ তবে এটি করার একটি উপায় সি ++ টেম্পলেটগুলি সহ:

ক্রমটি হল কে, টি নট কাঠামো এবং x হ'ল আপনার পছন্দসই মান।

template <int k> 
real BSpline(real x, real *t)
{
    if (*t <= x && x < *(t+k))
    {
        real a = (x - *t) / (*(t+k-1) - *t);
        real b = (*(t+k) - x) / (*(t+k) - *(t+1));

        return a * BSpline<k-1>(x, t) + b * BSpline<k-1>(x, (t+1));
    }
    else
        return 0;
};

template <>
real BSpline<1>(real x, real *t)
{
    if (*t <= x && x < *(t+1))
        return 1.;
    else
        return 0.;
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.