[an error occurred while processing this directive]
|
Единственное, что могу так сразу посоветовать - это "spline toolbox" в матлабе. По ссылке найдутся доки к нему - там должна быть довольно подробно изложена математика происходящего. Да и смоделировать это дело и поиграться в матлабе - самое оно.
От себя скажу так - по четырем точкам вычисляется такой интерполирующий полином 3-го (для кубического случая) порядка, который проходил бы через две средние точки и без изломов (равенство первых производных) и с одинаковой вогнутостью (равенство вторых производных) соединялся с предыдущим полиномом.Решение задачи сводится к решению системы линейных уравнений (это на бумаге :) ). А в программе - элементарные вычисления полиномиальных коэффициентов по выведенным формулам. Для каждого интервала между двух соседних точек вычисляется свой полином.
Примерно так (один из вариантов):
имеем точки a,b,c,d,e,f. Намерено начну с точки b (дальше объясню почему так) считаем приближенно первые производные для точек b и с. Как (c-a)/delta_x(c,a) и (d-b)/delta_x(d,b) соответственно. Считаем вторую производную в точке b равной нулю например. Далее рассчитываем такой полином Fbc(x) который: 1) проходит через точки b и c. 2) В точках b и c имеет соответствующие вычисенным 1-е производные. 3). В точке b имеет 2-ю производную, равную нулю. Далее. Берем следующие точки - b,c,d,e. Для них считаем первые производные (d-b)/delta_x(d,b) и (e-c)/delta_x(e,c). Вычисляем 2-ю производную Fbc в точке c. Рассчитываем такой полином Fcd(x) который: 1) проходит через точки c и d. 2) В точках c и d имеет соответствующие вычисенным 1-е производные. 3). В точке с имеет 2-ю производную, равную вычисленной для Fbc для этой точке. И так далее до конца данных.
Отдельный вопрос - это граничные условия. Для точки "a" посчитать первую производную не реально (ну, приблизительно, можно взять из рассчета (b-a)/delta_x(b,a)). Тем более 2-ю. По-этому их надо задать как-то изначально. Либо как константы какие-то, зная поведение интерполируемой функции в начале, либо как-то еще. Задав эти граничные условия появляется возможность вычислить полином для точек a и b (Fab). После этого при вычислении полинома Fbc можно уже взять правильную 2-ю производную.
Еще добавочка - производную для точки можно считать например не как (для точки b) (c-a)/delta_x(c,a) а как среднее между (b-a)/delta_x(b,a) и (c-b)/delta_x(c,b). В определенных случаях это дает хороший выигрыш. Думаю и в данном конкретном случае надо делать именно так.
E-mail: info@telesys.ru