Технический форум по робототехнике.
=DeaD= » 25 май 2011, 15:49
Michael_K писал(а):Как все-таки математики далеки от реальности
Это не математики далеки от реальности, это разговоры о неведомых желаниях далеки от конкретной задачи
Добавлено спустя 3 минуты 3 секунды:Просто если мы решаем математическую задачу, значит ставить её надо в математических терминах. Если же мы решаем прикладную задачу - ставить её надо в прикладных терминах.
А тут попытка спрятать прикладную задачу за математическими терминами без внятной формулировки математической задачи.
Michael_K » 25 май 2011, 15:51
Да, это тоже правда.
И все-таки большинство реальных задач фактически не имеют четкой математической постановки. Очень часто работают чисто эмпирические методы. Хотя, конечно, анализу (в какой-то степени) и они тоже поддаются.
=DeaD= » 25 май 2011, 15:57
Так ставить такие задачи нельзя в терминах другой области.
Ибо в такой постановке их вообще не решить
И тем более нельзя решить задачу ставя её в виде 1 примера графика и указывая в нём пальцем что нужно найти
потому что такая задача включает в себя решение - вот же оно на рисунке!
Я так понимаю тут надо ставить математически задачу так, что есть ограничение, типа если на графике есть более чем 1 крупный участок (более 10% оси абсцисс в пределах графика) с практически нулевой 2 производной, тогда все участки кроме одного прилегают к границам графика - к левой или правой, и их нужно игнорировать.
Michael_K » 25 май 2011, 16:00
Да, я отвечал на первую часть вашей реплики. С дописанным абсолютно согласен.
=DeaD= » 25 май 2011, 16:02
В указанной мной выше постановке задачи решение может выглядеть, например, так:
1. Фильтруем и усредняем полученные значения, чтобы не было точечных всплесков;
2. Ищем области почти нулевой (<заданного порога) второй производной большие по ширине чем 10% ширины графика;
3. В случае если таких областей отделенных от левой и правой границы графика более чем одна - выдаём ошибку;
4. Если такая отделенная от левой и правой границы одна - выдаём соотв. ей касательную.
Michael_K » 25 май 2011, 16:02
=DeaD= писал(а):такая задача включает в себя решение - вот же оно на рисунке!
CiSi » 25 май 2011, 16:59
=DeaD= писал(а):1. Фильтруем и усредняем полученные значения, чтобы не было точечных всплесков;
как это сделать?
dccharacter » 26 май 2011, 15:53
CiSi писал(а):как это сделать?
делается "движущее окно" значений
например avr - измеренное значение. avr_med - усредненное значение.
берем последние 16-ть значений (например):
int avr = 0, avr_med = 0;
while (1)
{
//measure avr;
.....
//
avr_med = avr_med * (15/16) + avr/16;
}
Michael_K » 26 май 2011, 16:58
Эмм...
dccharacter, то что вы написали - совсем не движущееся окно (которое по сути КИХ-фильтр), а вовсе даже наоборот - БИХ-фильтр. Для фильтрации экспериментальных данных (тем более, ограниченного набора, тем более, если нужно не терять "фазу" - координату по оси X) он не очень применим.
Чтобы посоветовать конкретный алгоритм фильтрации, нужно смотреть на данные и знать как они снимались (например, через равные промежутки по оси Х или Y или "строго в беспорядке"), как распределен шум/погрешности и т.п.
Практически же, если у вас есть критерий "правильности" (а у вас он, очевидно, есть - вы же сказали, что вас какая-то касательная "не устраивает"), то проще "поиграть" параметрами и способом фильтрации на нескольких наборах данных.
dccharacter » 26 май 2011, 17:10
просто я традиционно сильно затупил (не читал начало треда)
Добавлено спустя 7 минут 59 секунд:
Хм. А если нарисовать отрезок. НАчало отрезка - крайняя левая, конец - крайняя правая. Очевидно, что отрезок будет пересекать график. Берем, и начинаем движение влево - конец отрезка перемещаем на соседнюю точку влево. Пересекает отрезок график? да - двигаемся влево. Нет - начинаем двигать начало отрезка вправо. При этом контролируем ошибки (отклонения) в произвольных точках отрезка. Если они не превышают заданных - значит нашли прямой участок.
Это я предполагаю, что график выглядит так, как на рисунке.
=DeaD= » 27 май 2011, 00:10
CiSi писал(а):как это сделать?
Например так - строим усредненный график - вокруг каждой точки выбираем окрестность с центром в этой точке и общей шириной пусть в 5% ширины графика, если там одна наша точка - оставляем, иначе аппроксимируем точки отрезком и считаем, что наша точка в усредненном графике будет иметь координату Y соответствующую на полученном отрезке координате Х нашей точки.
Лучше конечно не тупо усреднять так по всем, а перед таким усреднением сделать предзаход, в котором вообще выкинуть точки которые при таком усреднении сильно перемещаются по оси Y, скажем больше чем на 5% высоты графика.