LINUX.ORG.RU

[python] усреднить последовательности точек

 


0

2

Как проще всего усреднить несколько последовательностей, заданных точками (x,y), на Python (исходных функций нет, только числовые значения в списках)? Не хочу изобретать велосипед.

Пример.

График с двумя последовательностями: http://i034.radikal.ru/1105/f9/bbc2690fccf7.jpg. Нужны значения последовательности (отсутствующей на графике), линия которой проходила бы посредине между ними.

Если бы координаты x у них совпадали, можно было бы усреднять по точкам:

x1 = [0.0, 0.01, 0.02, 0.03]
x2 = [0.0, 0.01, 0.02, 0.03]
y1 = [0.0, 0.002, 0.04, 0.07] 
y2 = [0.0, 0.004, 0.07, 0.09] 

средние значения:
x3 = x1 #или x3 = x2
y3 = (y1 + y2) / 2 = [0.0, 0.003, 0.055, 0.08]
Поскольку x'ы все-таки разные это не подходит.



Последнее исправление: ipc (всего исправлений: 3)

У Ньютона встал интерполяционный многочлен :) А следом и у Лагранжа. И у Эрмита немножко.

Shtucer
()

Может подойдёт расставлять их в геометрические центры соответствующих прямоугольников?

quasimoto ★★★★
()

Поскольку x'ы все-таки разные это не подходит.

Что мешает одну из функций сделать кусочно-линейной? Дешево и сердито.

baverman ★★★
()
Ответ на: комментарий от math-beginer

Только не интерполяцию, а аппроксимацию (т.к. данные там идут с погрешностями). Если известен общий вид функции, можно всегда хотя бы при помощи МНК получить аппроксимирующую кривую. Ну, а потом уже усреднить - как надо в задаче («тупым» средним, взвешенным или еще как).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Интерполяция годится лишь для точек с нулевой погрешностью.

И какие же у меня проблемы возникнут при попытке проинтерполировать данные с погрешностью? То есть как тогда эта операция будет называться?

baverman ★★★
()
Ответ на: комментарий от Eddy_Em

Да никаких, кроме бешеных ошибок.

Есть две точки, заданы с 5-процентной погрешностью. Вопрос: какая погрешность будет у точек, линейно проинтерполированных? Ответ — 5%.

Так как называется интерполяция с бешеными ошибками? Ы?

baverman ★★★
()
Ответ на: комментарий от anonymous

> man Апроксимация, школоло

На функцию-то посмотри, да? Чем это тебе не y = sqr(x)*K, где K = 1,2 к примеру. И, если вычислить / угадать К, то получим результаты _более_ точные, чем при аппроксимации (man погрешность вычисленных значений).

В общем случае - да, аппроксимация. Но здесь прокатит и интерполяция.

alienclaster ★★★
()
Ответ на: комментарий от baverman

При чем здесь 2 точки? Для двух точек, ясен пень, аппроксимации никакой не сделаешь. А вот если их сотня-другая, то можно аппроксимировать. В результате, если у нас измерительная погрешность 5%, то погрешность аппроксимирующей кривой будет уже ~0.5 для 100 точек и ~0.05% для 10000 точек. Понятно?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Хорошо, так не получилось, ты слишком упёрся, видимо, в какие то свои чисто инженерные/физические задачи.

Где сказано, что точки ТС даны с погрешностью, что интерполировать их не имеет смысла?

baverman ★★★
()
Ответ на: комментарий от Eddy_Em

Это с графика видно.

Оке, а теперь скажи, думаешь ТСу важно, чтоб его результат был именно средним аппроксимаций? Ему надо как можно проще и в лоб.

baverman ★★★
()
Ответ на: комментарий от baverman

как можно проще и в лоб.

Апроксимировать полиномами, коэффициенты искать методом наименьших квадратов. Что может быть проще?

ugoday ★★★★★
()

попробуй scipy.leastsq, примеров полно в сети.

вообще эта функция многое умеет, я даже панорамы по контрольным точкам ею сшиваю :)

olegsov
()
Ответ на: комментарий от baverman

Для ряда задач, это та самая простота, которая хуже воровства.

ugoday ★★★★★
()

Объединить оба массива данных в один, затем выполнить интерполяцию по методу наименьших квадратов.

iVS ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.