Здравствуйте, Renny, Вы писали:
R>Есть ли теоретическая возможность реализовать сабж? Типа на вход массив точек (2d) а на выход — функция, график которой проходит через все точки и интервал на котором она это делает.
Конечно, через любые N точек можно провести график полинома (n-1)-й степени.
Например, интерполяцией по Лагранжу: P = \sum_{i=0}^n \prod_{j=0}^n (x-x_i)/(x_i-x_j)
Или можно методом наименьших квадратов.
Вообще, проще взять любой учебник по численным методам. Там всего много на эту тему.
Есть ли теоретическая возможность реализовать сабж? Типа на вход массив точек (2d) а на выход — функция, график которой проходит через все точки и интервал на котором она это делает.
Здравствуйте, Renny, Вы писали:
R>Есть ли теоретическая возможность реализовать сабж? Типа на вход массив точек (2d) а на выход — функция, график которой проходит через все точки и интервал на котором она это делает.
Можно, вопрос только зачем это надо. Если найти приближённые значения — одно (интерполяция), если угадать приближённую зависимость — это другое (аппроксимация, но тогда функция будет проходить рядом с точками)
Здравствуйте, vvotan, Вы писали:
V>Здравствуйте, Renny, Вы писали:
R>>Есть ли теоретическая возможность реализовать сабж? Типа на вход массив точек (2d) а на выход — функция, график которой проходит через все точки и интервал на котором она это делает.
V>Конечно, через любые N точек можно провести график полинома (n-1)-й степени.
V>Например, интерполяцией по Лагранжу: P = \sum_{i=0}^n \prod_{j=0}^n (x-x_i)/(x_i-x_j)
V>Или можно методом наименьших квадратов.
V>Вообще, проще взять любой учебник по численным методам. Там всего много на эту тему
Может тут кто-нибудь без особой заумности (типа мануалов по матану) по шагам и на конкретном примере объяснить: как реализовывается сабж? У меня есть пара миллионов значений функции и нужно узнать что это за функция....
Здравствуйте, Renny, Вы писали:
R>>>Есть ли теоретическая возможность реализовать сабж? Типа на вход массив точек (2d) а на выход — функция, график которой проходит через все точки и интервал на котором она это делает. V>>Конечно, через любые N точек можно провести график полинома (n-1)-й степени. V>>Например, интерполяцией по Лагранжу: P = \sum_{i=0}^n \prod_{j=0}^n (x-x_i)/(x_i-x_j) V>>Или можно методом наименьших квадратов. V>>Вообще, проще взять любой учебник по численным методам. Там всего много на эту тему
R>Может тут кто-нибудь без особой заумности (типа мануалов по матану) по шагам и на конкретном примере объяснить: как реализовывается сабж?
Я вообще-то конкретную формулу написал, в которую нужно только подставить значения.
R>У меня есть пара миллионов значений функции и нужно узнать что это за функция....
А ты точно уверен, что тебе нужно, чтобы функция проходила через все точки? Тогда наверное легче спросить у того, кто тебе эти точки дал, потому что хотя формально и возможно получить полином, но толку от полинома парамилионной степени будет немного. И вообще, надо плясать от конкретной задачи. Ты спрашивал теоретическую возможность. Так вот — их хоть отбавляй.
Здравствуйте, Renny, Вы писали:
R>Здравствуйте, vvotan, Вы писали:
V>>Здравствуйте, Renny, Вы писали:
R>>>Есть ли теоретическая возможность реализовать сабж? Типа на вход массив точек (2d) а на выход — функция, график которой проходит через все точки и интервал на котором она это делает.
На вход массив точек, наверное, всё-таки линейный (с двумя строчками: x и y). Или тебе нужна поверхность?
R>Может тут кто-нибудь без особой заумности (типа мануалов по матану) по шагам и на конкретном примере объяснить: как реализовывается сабж? У меня есть пара миллионов значений функции и нужно узнать что это за функция....
Ты скажи, что тебе надо, тебе объяснят может быть. А то когда непонятно что тебе нужно, нечего и объяснять подробно.
Например. У тебя функция, похожая на экспоненту. y=a*e^(b*x)
ln(y/a) = ln(e^(b*x))
ln(y/a) =b*x
ln(y/a) = ln(y) — ln(a); Y = ln(y); A = ln(A)
Получаем
Y = A + b*x
Находим таблицу Y из таблицы y
Применяем Метод Наименьших Квадратов (МНК) для нахождения A и b. Если не знаешь, что такое МНК — скажи, объясним.
Из A находим a,
получаем функцию y=a*e^(b*x) с известными коэффициентами.
Существуют аналогичные формулы для других типов функций. Перебором типов функций можно найти функцию, которая лучше всего удовлетворяет заданной таблице.
Однако при этом, если найденная функция близка, но не в точности совпадает с искомой, найденная функция будет проходить р я д о м с заданными точками, а не по ним.
R>Есть ли теоретическая возможность реализовать сабж?
Конечно есть.
Это называется "задача минимизации функции".
R>Типа на вход массив точек (2d)
пар аргумент — значение функции
R>а на выход — функция, график которой проходит через все точки и интервал на котором она это делает.
А хоть какие-то знания о функции наличествуют? Она линейная/нелинейная?
Произвольным полиномом можно приближенно задать какую угодно функцию. Важно только понимать, какая степень приближения необходима.
На практике лучше всего у меня работал алгоритм Levenberg-Marquardt
(Левенберга-Маркварта, он же "марквардта", "маркара", итд..)
— он по стабу функции и парам аргумент-значение подбирает коэффициенты функции.
R>>Есть ли теоретическая возможность реализовать сабж?
Г>Конечно есть. Г>Это называется "задача минимизации функции".
Эммм... боюсь что задача минимизации функции на выходе дала бы лишь примерный минимум (максимум) серди всего полумилионного множества значений функции, которые у мсье и так имеются..
Здравствуйте, anvaka, Вы писали:
R>>>Есть ли теоретическая возможность реализовать сабж?
Г>>Конечно есть. Г>>Это называется "задача минимизации функции".
A>Эммм... боюсь что задача минимизации функции на выходе дала бы лишь примерный минимум (максимум) серди всего полумилионного множества значений функции, которые у мсье и так имеются..
Это смотря что минимизировать. Если минимизировать СКО, то как раз получим то, что надо.