C ++ में एक पुनरावर्ती तख़्ता फ़ंक्शन का निर्माण कैसे करें


10

फिलहाल मैं एक अंतर समीकरण हल करने की विधि पर काम कर रहा हूं, जिसे आधार-स्पलाइन कोलोलेशन कहा जाता है। मुझे जो परेशानी हो रही है, वह साथ, एक मनमाना क्रम बनाने के लिए एक विधि का निर्माण कर रहा है। के साथ प्रारंभिक स्थिति और मुझे इस समस्या से शुरू होने में भी परेशानी हो रही है, क्योंकि यह पुनरावर्ती है या तो "शीर्ष" या "नीचे" से शुरू हो सकता है, और मैं एक सामान्य लेखक ब्लॉक प्रकार में चल रहा हूं बात की, जहाँ मुझे अपना मन नहीं मिल रहा है कि मुझे क्या करना है।B 1 i (x)={ 1

बीमैं+1(एक्स)=एक्स-एक्समैंएक्स+मैं-एक्समैंबीमैं+एक्स+मैं+1-एक्सएक्स+मैं+1-एक्समैं+1बीमैं+1(एक्स)
बीमैं1(एक्स)={1के लिये एक्समैंएक्स<एक्समैं+10अन्यथा

जवाबों:


7

मैं NURBS पुस्तक से परामर्श करने की सिफारिश कर सकता हूं , जो इस विषय पर एक क्लासिक पाठ लगता है। एल्गोरिथ्म स्वयं पृष्ठ 72 पर दिया गया है , यह ऑनलाइन देखने के लिए उपलब्ध है।



4

मैं ईमानदारी से नहीं जानता कि यह कितना कुशल है, लेकिन इसे करने का एक तरीका c ++ टेम्पलेट्स के साथ है:

आदेश k है, t गाँठ संरचना है, और 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.;
};
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.