Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Аппроксимация 2D ф-ции с весовыми коэффициентами |
Автор: borisbn 19.3.2011, 16:31 | ||||
Здравствуйте ! Долго думал где разместить вопрос здесь или в "Алгоритмах", но, т.к. гуглил не меньше пол-дня и ничего конкретного не нашёл, то решил, всё-таки, задать здесь. Итак. Мне нужно апроксимировать функцию двух переменных, заданную таблично
для каждой точки у меня есть "вес" (СКО данного измерения). Хотелось бы получить функцию вида:
чтобы получать одно значение (outApproximatedX;outApproximatedY) в зависимости от предыдущих значений и вновь поступившего измерения. "Вес" (вернее всё-таки СКО) должен работать следующим образом: при минимальном СКО искомая ф-ция должна проходить в непосредственной близости от соответствующей точки, при максимальном СКО данная точка пратически не должна учитываться. Аппроксимация должна быть линейной ( наверное ??? ), т.к. я знаю, что искомая функция - прямая линия. P.S. Большая просьба - не отсылать в гугл для поиска МНК, т.к. я там уже был и не нашёл готового решения. P.P.S. Если кто-нибудь ещё и исходниками такой ф-ции поделится - буду ваще благодарен. Спасибо. |
Автор: volatile 19.3.2011, 23:29 |
В смысле вопрос уже решен? Если нет, то пара вопросов. По той сигнатуре что вы привели, это похоже не на функцию 2-ух переменных. А больше похоже на (образно выражаясь) мишень. В которую бьют выстрелами (newMeasuredX, newMeasuredY), и вы хотите получить апроксимированный центр этой мишени, учитывающий все прошлые "выстрелы". Если же это функция, то это подразумевает зависимость y=f(x). То есть задаете х, получаете апроксимированный игрек. Или наоборот x=f(y) Как вы хотите получить сразу два значения? В зависимости от этого будут разные решения. |
Автор: borisbn 20.3.2011, 10:49 | ||
нет. напортачил в первом посте, написал во втором "не отвечайте, пока не исправлю", затем второй удалил... ![]()
не центр, а скорее "куда дальше стрелять". ок, распишу исходную задачу. Есть траектория движения объекта. Известно, что это - прямая, но мне она заранее не известна. Я могу с неким периодом измерять местоположение этого объекта, причём каждое измерение (newMeasuredX, newMeasuredY) сопровождается СКО этого измерения в метрах (newMeasuredWeight). Так вот мне требуется скорректировать это измерение, учитывая несколько предыдущих, при этом необходимо учитывать также СКО предыдущих измерений. ![]() на рисунке:
|
Автор: Ln78 20.3.2011, 13:45 |
Так двух или одной? И гипотеза о прямолинейности абсолютно несомненна, никаких корректировок в движении быть не может? Если так, то самый простой способ решения – именно через МНК. Для равноточных измерений система Ax=b. Если измерения имеют разную точность, и известно их СКО, то каждое из уравнений нужно поделить на дисперсию (квадрат СКО) соответствующего измерения. А решается обычным образом, умножением на транспонированную матрицу. Фактически нужно определить два числа, решить систему уравнений размера 2 на 2. Для такого случая элементарно находится обратная матрица, можно выписывать рекуррентные соотношения. По мне, их проще на бумажке вывести, чем здесь написать (соответствующим образом отформатировав). |
Автор: borisbn 21.3.2011, 19:19 |
Спасибо всем, кто хотел помочь. Вопрос решён. Правда на http://stackoverflow.com/questions/5362154/approximation-of-2d-function-with-weight-coefficients, но какая разница ![]() Я там, кстати, в последнем посте (ответе) выложил ссылку на исходники... |