Cách xây dựng hàm spline đệ quy trong C ++


10

Hiện tại tôi đang làm việc trên một phương pháp giải phương trình vi phân gọi là collocation cơ sở-spline. Điều tôi gặp khó khăn là xây dựng một phương pháp để xây dựng một spline thứ tự tùy ý, với mối quan hệ với điều kiện ban đầu và tôi gặp sự cố ngay cả khi bắt đầu với vấn đề này, vì nó được đệ quy có thể bắt đầu từ "đỉnh" hoặc "dưới" và tôi đang chạy vào loại khối nhà văn nói chung về điều này, nơi tôi không thể tập trung suy nghĩ về những gì tôi cần làm.B 1 i (x)={ 1

BTôik+1(x)= =x-xTôixk+Tôi-xTôiBTôik+xk+Tôi+1-xxk+Tôi+1-xTôi+1BTôi+1k(x)
BTôi1(x)= ={1cho xTôix<xTôi+10nếu không thì

Câu trả lời:


7

Tôi có thể khuyên bạn nên tham khảo Cuốn sách NURBS , dường như là một văn bản cổ điển về chủ đề này. Thuật toán được đưa ra trên trang 72 , nó có sẵn để xem trực tuyến.



4

Tôi thực sự không biết làm thế nào hiệu quả này, nhưng một cách để làm điều đó là với các mẫu c ++:

Thứ tự là k, t là cấu trúc nút và x là giá trị bạn muốn.

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.;
};
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.