Кто-нибудь может объяснить общую идею, как происходит подбор коэффициентов при аппроксимации функции сплайнами?
Какую хорошую книгу по этой теме можно почитать?
Здравствуйте, Аноним, Вы писали:
А>Кто-нибудь может объяснить общую идею, как происходит подбор коэффициентов при аппроксимации функции сплайнами? А>Какую хорошую книгу по этой теме можно почитать?
Здравствуйте, Аноним, Вы писали:
А>Кто-нибудь может объяснить общую идею, как происходит подбор коэффициентов при аппроксимации функции сплайнами? А>Какую хорошую книгу по этой теме можно почитать?
Для интерполирующих кубических сплайнов требуется выбрать такие кубические полиномы на каждом интервале, чтобы они сшивались гладко,
переход между интервалами выглядел плавным.
Полиномы стыкуются концами без разрыва — гладкость нулевого порядка. F[i](1) = F[i+1](0) (значение i-го полинома при параметре t)
Направление не меняется — производная одинакова — гладкость первого порядка F[i]'(1) = F[i+1]'(0)
Вторая производная одинакова (как при изгибе стальной линейки) — гладкость второго порядка F[i]''(1) = F[i+1]''(0)
Производные от кубического полинома выглядят несложно, получается 3*N-2 линейных уравнения для 3*N коэффициентов.
Ещё пару уравнений добавляют из каких-либо практических соображений — например, нулевая вторая производная на крайних концах (ненапряженные концы линейки)
Итого получается ленточная система линейных уравнения, которая эффективно решается.
А>>Кто-нибудь может объяснить общую идею, как происходит подбор коэффициентов при аппроксимации функции сплайнами? А>>Какую хорошую книгу по этой теме можно почитать?
MBo>Для интерполирующих кубических сплайнов требуется выбрать такие кубические полиномы на каждом интервале, чтобы они сшивались гладко, MBo>переход между интервалами выглядел плавным.
....
ТС спрашивал про апроксимацию, а не про интерполяцию. Это разные вещи...
MBo>Numerical Recipes in C, 3 глава
Ну можно и эту книгу, только глава будет другая. Ключевые слова — апроксимация, наименьшие квадраты, линейная регрессия и т.п.
Здравствуйте, Аноним, Вы писали: А>Кто-нибудь может объяснить общую идею, как происходит подбор коэффициентов при аппроксимации функции сплайнами? А>Какую хорошую книгу по этой теме можно почитать?
Общая идея построить аппроксимацию на участках с помощью полиномов (например 3-го порядка).
На границах участков требуют непрерывность функции (слева и справа должно быть равно), и для производных (в зависимости от порядка сплайна)
На концах ставят условие свободного закреплениея (для 3-го порядка первая производная = 0)
Потом строят целевую функцию S = среднеквадратичному отклониею исходных данных от нашей аппроксимации и ищут её минимум.
В зависимости от того чего мы хотим получаются разные системы уравнений, после решения которых мы получаем все коэффиценты для сплайна.
CM>>Важное уточнение — алгоритм должен работать для z = f(x,y) CM>>Где-нибудь можно почитать про алгоритм, который работает в этом случае?
CM>Неужели никто не знает?
Уточни что именно тебе надо.
Если просто построить гладкую поверхность на нарегулярной сетке то B-spline.
Если аппроксимировать участок из облака точек просто полиномами Чебышева (или обычными если степень небольшая ~3) — самое простое в твоём случае.
А если надо именно 2d поверхность из набраную лоскутками из сплайнов то тебе предётся видимо самому решать эти уравнения
ибо не многие решаются на подобное (На каждой клетке у тебя будет для 3-ей степени не 4 коэф, а 17 и выражать их придётся через две переменные, а не через одну)
Более того сама постановка задачи может быль различна что приводит к разным упрощениям или усложнениям. (Например если взять шаг сетки постоянный будет значительно легче, если не вводить веса для точек если точки расположены узлах или как попало ..., требуется точная аппроксимация или достаточно просто гладкой поверхности, и потом сетка прямоугольная, треугольная или не регулярная, граничные условия свободные концы или циклические условия).
Соответственно и готовое решение по этим причинам трудно найти.
Так что опиши свою задачу со всеми условиями и требованиями.
Здравствуйте, kov_serg, Вы писали:
_>Так что опиши свою задачу со всеми условиями и требованиями.
Итак, дано: функция f(x, y), задана большим дискретным набором точек. Функция гладкая, более-менее. Нужна нерегулярная сетка (из-за того самого "более-менее"). Нужно найти разбиение для сетки и вычислить коэффициенты для набора сплайнов, которые аппроксимируют данный набор точек с заданной максимальной погрешностью.
Какие готовые алгоритмы можно для этого приспособить?
Здравствуйте, CoderMonkey, Вы писали:
CM>Здравствуйте, kov_serg, Вы писали:
_>>Так что опиши свою задачу со всеми условиями и требованиями.
CM>Итак, дано: функция f(x, y), задана большим дискретным набором точек. Функция гладкая, более-менее. Нужна нерегулярная сетка (из-за того самого "более-менее"). Нужно найти разбиение для сетки и вычислить коэффициенты для набора сплайнов, которые аппроксимируют данный набор точек с заданной максимальной погрешностью. CM>Какие готовые алгоритмы можно для этого приспособить?
А для чего будет использована аппроксимация вашей f(x,y)? Если вы хотите значения за областью ваших точек, то сплайны и другие полиминомиальные аппроксимации обычно не годятся, тут в идеале надо иметь модель функции и подбирать её параметры.
А вообще вы ставите очень своеобразную задачу. Надо найти разбиение для заданной максимальной погрешности. Скорее всего вы просто переусложняете задачу.
Думаю вам следует начать с аппроксимации полиномами (хотя всё зависит от вашей f(x,y) много-ли в ней перегибов сёдел и т.п.)
Здравствуйте, CoderMonkey, Вы писали:
CM>Здравствуйте, kov_serg, Вы писали:
_>>Так что опиши свою задачу со всеми условиями и требованиями.
CM>Итак, дано: функция f(x, y), задана большим дискретным набором точек. Функция гладкая, более-менее. Нужна нерегулярная сетка (из-за того самого "более-менее"). Нужно найти разбиение для сетки и вычислить коэффициенты для набора сплайнов, которые аппроксимируют данный набор точек с заданной максимальной погрешностью. CM>Какие готовые алгоритмы можно для этого приспособить?
Здравствуйте, kov_serg, Вы писали:
_>А для чего будет использована аппроксимация вашей f(x,y)? Если вы хотите значения за областью ваших точек, то сплайны и другие полиминомиальные аппроксимации обычно не годятся,
Должно сгодится.
_>тут в идеале надо иметь модель функции и подбирать её параметры.
Невозможно.
_>А вообще вы ставите очень своеобразную задачу. Надо найти разбиение для заданной максимальной погрешности. Скорее всего вы просто переусложняете задачу. _>Думаю вам следует начать с аппроксимации полиномами (хотя всё зависит от вашей f(x,y) много-ли в ней перегибов сёдел и т.п.)
Упрощаем задачу. Допустим, разбиение сетки я сделал. Нужно подобрать коэффициенты для полиномиальной поверхности, которая аппроксимирует заданный набор точек в прямоугольной области. Какой алгоритм использовать?
Здравствуйте, CoderMonkey, Вы писали:
CM>Здравствуйте, kov_serg, Вы писали:
_>>А для чего будет использована аппроксимация вашей f(x,y)? Если вы хотите значения за областью ваших точек, то сплайны и другие полиминомиальные аппроксимации обычно не годятся, CM>Должно сгодится.
_>>тут в идеале надо иметь модель функции и подбирать её параметры. CM>Невозможно.
_>>А вообще вы ставите очень своеобразную задачу. Надо найти разбиение для заданной максимальной погрешности. Скорее всего вы просто переусложняете задачу. _>>Думаю вам следует начать с аппроксимации полиномами (хотя всё зависит от вашей f(x,y) много-ли в ней перегибов сёдел и т.п.)
CM>Упрощаем задачу. Допустим, разбиение сетки я сделал. Нужно подобрать коэффициенты для полиномиальной поверхности, которая аппроксимирует заданный набор точек в прямоугольной области. Какой алгоритм использовать?
Можно для поднятия боевого духа почитать эту книжку