Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аппроксимация 2D ф-ции с весовыми коэффициентами 
V
    Опции темы
borisbn
Дата 19.3.2011, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Здравствуйте !
Долго думал где разместить вопрос здесь или в "Алгоритмах", но, т.к. гуглил не меньше пол-дня и ничего конкретного не нашёл, то решил, всё-таки, задать здесь.
Итак.

Мне нужно апроксимировать функцию двух переменных, заданную таблично
Цитата

x0 y0
x1 y1
...
xn yn

для каждой точки у меня есть "вес" (СКО данного измерения). Хотелось бы получить функцию вида:
Код

typedef std::vector< double > DVector;
void approximate2D(
      const DVector & x
    , const DVector & y
    , const DVector & weights
    , double newMeasuredX
    , double newMeasuredY
    , double newMeasuredWeight
    , double & outApproximatedX
    , double & outApproximatedY
    );

чтобы получать одно значение (outApproximatedX;outApproximatedY) в зависимости от предыдущих значений и вновь поступившего измерения.
"Вес" (вернее всё-таки СКО) должен работать следующим образом: при минимальном СКО искомая ф-ция должна проходить в непосредственной близости от соответствующей точки, при максимальном СКО данная точка пратически не должна учитываться.
Аппроксимация должна быть линейной ( наверное ??? ), т.к. я знаю, что искомая функция - прямая линия.

P.S. Большая просьба - не отсылать в гугл для поиска МНК, т.к. я там уже был и не нашёл готового решения.
P.P.S. Если кто-нибудь ещё и исходниками такой ф-ции поделится - буду ваще благодарен.
Спасибо.

Это сообщение отредактировал(а) borisbn - 19.3.2011, 17:18


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 19.3.2011, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(borisbn @  19.3.2011,  17:11 Найти цитируемый пост)
deleted
В смысле вопрос уже решен? 

Если нет, то пара вопросов.
Цитата(borisbn @  19.3.2011,  16:31 Найти цитируемый пост)
Хотелось бы получить функцию вида:

По той сигнатуре что вы привели, это похоже не на функцию 2-ух переменных.
А больше похоже на (образно выражаясь) мишень. В которую бьют выстрелами (newMeasuredX, newMeasuredY), и вы хотите получить апроксимированный центр этой мишени, учитывающий все прошлые "выстрелы".

Если же это функция, то это подразумевает зависимость y=f(x).
То есть задаете х, получаете апроксимированный игрек. Или наоборот x=f(y)
Как вы хотите получить сразу два значения?

В зависимости от этого будут разные решения.

PM MAIL   Вверх
alexvs11
Дата 19.3.2011, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



Цитата(volatile @  19.3.2011,  23:29 Найти цитируемый пост)
Если же это функция, то это подразумевает зависимость y=f(x).То есть задаете х, получаете апроксимированный игрек. Или наоборот x=f(y)Как вы хотите получить сразу два значения?

согласен, противоречущие параграфы
PM MAIL   Вверх
borisbn
Дата 20.3.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(volatile @  19.3.2011,  23:29 Найти цитируемый пост)
В смысле вопрос уже решен? 

нет. напортачил в первом посте, написал во втором "не отвечайте, пока не исправлю", затем второй удалил... smile

Цитата(volatile @  19.3.2011,  23:29 Найти цитируемый пост)
 вы хотите получить апроксимированный центр этой мишени, учитывающий все прошлые "выстрелы".

не центр, а скорее "куда дальше стрелять". ок, распишу исходную задачу.
Есть траектория движения объекта. Известно, что это - прямая, но мне она заранее не известна. Я могу с неким периодом измерять местоположение этого объекта, причём каждое измерение (newMeasuredX, newMeasuredY) сопровождается СКО этого измерения в метрах (newMeasuredWeight). Так вот мне требуется скорректировать это измерение, учитывая несколько предыдущих, при этом необходимо учитывать также СКО предыдущих измерений.
user posted image
на рисунке:
  • черные точки - предыдущие измерения
  • красная точка - текущее измерение
  • синяя точка - то, что я хочу получить.



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Ln78
Дата 20.3.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Цитата(borisbn @  19.3.2011,  16:31 Найти цитируемый пост)
апроксимировать функцию двух переменных

Цитата(borisbn @  20.3.2011,  10:49 Найти цитируемый пост)
напортачил в первом посте

Так двух или одной? И гипотеза о прямолинейности абсолютно несомненна, никаких корректировок в движении быть не может? Если так, то самый простой способ решения – именно через МНК. Для равноточных измерений система 
Ax=b. 
Если измерения имеют разную точность, и известно их СКО, то каждое из уравнений нужно поделить на дисперсию (квадрат СКО) соответствующего измерения. 
А решается обычным образом, умножением на транспонированную матрицу. Фактически нужно определить два числа, решить систему уравнений размера 2 на 2. Для такого случая элементарно находится обратная матрица, можно выписывать рекуррентные соотношения. По мне, их проще на бумажке вывести, чем здесь написать (соответствующим образом отформатировав).


Это сообщение отредактировал(а) Ln78 - 20.3.2011, 13:45
PM MAIL   Вверх
borisbn
Дата 21.3.2011, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Спасибо всем, кто хотел помочь. Вопрос решён.
Правда на стекОверфлоу, но какая разница smile
Я там, кстати, в последнем посте (ответе) выложил ссылку на исходники...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1167 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.