| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Выделить прямолинейный участок на экспериментально |
| Автор: disputant 28.11.2011, 21:01 |
| День добрый! Имеется некая обработка экспериментальных данных, которые имеют вид кривой, примерно такого типа, как показанная на рисунке: ![]() При обработке надо найти прямолинейный участок и аппроксимировать его прямой - ну, как на рисунке. Сейчас крайние точки указываются вручную, после чего все считается, выводится etc etc... Но хочется автоматизировать этот процесс - чтоб программа хотя бы предлагала диапазон точек, в котором наилучшим образом строится прямая. Идей практически никаких. Если брать производные - скачет довольно сильно, так что что-то типа гауссовой кривой получается очень уж некрасивой. Подбирал точки, чтоб с максимальной точностью ложилось методом наименьших квадратов - так он старается найти три наиболее на прямой... Куда смотреть, в каком направлении - никаких идей? Заранее спасибо |
| Автор: Akina 28.11.2011, 22:26 |
| Аппроксимируй, а потом уже бери производную. Либо Строй прямую по МНК. Отбрасывай крайнюю точку, снова строй. Если изменение отрезка или тангенса больше заданной точности - правильно отбросил... |
| Автор: ksnk 28.11.2011, 22:35 |
| Нужно нарисовать прямоугольник, вневписанный в ломанную, которая получается,если соединить все соседние точки. Средняя линия этого прямоугольника и будет искомой, в случае если прямоугольник получился "толстым" - выкидываем несколько граничных точек как "брак". вообще непонятна цель построения |
| Автор: Akina 28.11.2011, 22:56 |
| disputant, вообще опишите физику эксперимента. Будет понятнее, что происходить и как обрабатывать. |
| Автор: mrgloom 29.11.2011, 08:15 |
| http://ru.wikipedia.org/wiki/RANSAC |
| Автор: disputant 29.11.2011, 08:17 | ||
Нет, просто вся физика Будем (грубо) считать это, ну... например, вольтамперной характеристикой |
| Автор: esperanto 29.11.2011, 11:28 |
| Подойдет Хаффа трансформ для поиска прямых линий |
| Автор: disputant 29.11.2011, 12:29 | ||||
Ага... почитал, попробую. Представляется проблематичной оценка погрешности этого самого угла наклона. Для МНК формулы, грубо говоря, имеются, а для Хаффа не нашел пока. Ведь, как я понимаю, тут наклон получается сразу, по максимуму в фазовом пространстве? Добавлено через 3 минуты и 22 секунды
Не совсем уверен, так как здесь горизонтальные куски - не выбросы... |
| Автор: _Y_ 29.11.2011, 15:02 |
| 1. Кривая ну очень уж напоминает кривые титрования знакомые каждому химику. На них и ищется точка перегиба, а потом, при надобности, угол наклона в этой точке. Может это и нужно? Тогда наверняка легко будет найти по ключевым словам "кривая титрования" и "компютерная обработка" или "titration curve" и "computer processing". 2. Если же нужно искать именно прямую, находящуюся где-то в центре S-образной кривой, то можно сделать примерно так:
|
| Автор: Pavia 29.11.2011, 20:21 |
| Я так понимаю есть точки которые задают ломанную. Тогда можно просто "упростить ломанную" по известному алгоритму и выбрать наибольшую по длине прямую. |
| Автор: disputant 3.12.2011, 16:45 |
| Всем большое спасибо! Пошел по наилегчайшему пути Если бы еще это как-то обосновать математически... |
| Автор: _Y_ 3.12.2011, 17:15 |
| disputant, примерно так делали с кривыми титрования до появления компьютеров. Правда, графически на миллиметровке))))) |
| Автор: disputant 4.12.2011, 11:10 | ||
Ну... скажу честно - я лет 20 назад даже сдавал кандминимум по неорганической химии, но увы - после защиты мне химия как-то ни разу не пригодилась, так что я основательно все это забыл :( Но я рад, что, оказывается, этот метод возник не на ровном месте |
| Автор: Фантом 4.12.2011, 15:15 |
| Построить аппроксимирующий сплайн, а затем найти участок с близкой к нулю второй производной и существенно отличной от нуля первой. |