Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Система нелинейных уравнений |
Автор: лцф 30.5.2013, 13:35 |
Добрый день. Подскажите, каким методом сподручнее решать системы вида: (x1-x0)^2 + (y1-y0)^2 = (R1 + R)^2 (x2-x0)^2 + (y2-y0)^2 = (R2 + R)^2 (x3-x0)^2 + (y3-y0)^2 = (R3 + R)^2 найти надо x0, y0, R, остальное известно. И можно ли где-то найти программную реализацию конкретно приведенной системы, хоть частичную. |
Автор: Akina 30.5.2013, 13:42 |
Покоординатный спуск, например. |
Автор: Mirkes 30.5.2013, 15:09 |
Чуть более подробно ![]() Как правило такие системы приводят к задаче минимизации функции. В вашем случае будет функция ((R1-R)^2-(X1-X0)^2-(Y1-Y)^2)^2+ ((R2-R)^2-(X2-X0)^2-(Y2-Y)^2)^2+ ((R3-R)^2-(X3-X0)^2-(Y3-Y)^2)^2=F Далее используете любые методы минимизации, например покоординатный спуск, и ищете минимум F Если минимум 0 - нашли решение. Если не ноль - решения нет. |
Автор: лцф 30.5.2013, 15:29 |
ну положим что не ноль, а какой-нибудь эпсилон. а любые - это какие? если ли для подобной системы какие-то предпочтения? по производительности, по точности? |
Автор: mrgloom 30.5.2013, 16:04 |
вот вроде неплохой солвер http://ab-initio.mit.edu/wiki/index.php/NLopt |
Автор: maxim1000 30.5.2013, 17:01 |
кстати, а решить нужно именно, как произвольную систему уравнений или нужно просто получить ответ? а то она аналитически вполне себе нормально решается |
Автор: лцф 31.5.2013, 09:38 |
![]() у меня не получилось. а какой-нибудь маткад такие системы не решает? вообще надо две системы решить, вторую из 4 уравнений - ось z еще будет. |
Автор: maxim1000 31.5.2013, 14:42 |
разность первых двух уравнений даст линейное уравнение относительно x0, y0 и R разность вторых двух уравнений даст второе линейное уравнение относительно x0, y0, R в геометрическом смысле это - пересечение двух плоскостей, т.е. прямая раз это прямая, на ней можно выбрать условный параметр t и сказать, что x0=a+b*t, y0=c+d*t, R=e+f*t, где все коэффициенты известны подставляем это в одно их уравнений и получаем квадратное уравнение относительно t, находим два значения, вычисляем два набора x0,y0,R для трёхмерного пространства и 4-х уравнений можно так же, только мороки больше Добавлено через 38 секунд понятно, что будут всякие вырожденные случаи, но их можно отдельно обрабатывать |
Автор: maxim1000 31.5.2013, 16:53 |
можно по-другому у нас есть первое линейное уравнение относительно x0,y0,R берём x0 и выражаем через y0 и R подставляем во второе линейное уравнение получаем линейное уравнение относительно y0 и R выражаем y0 через R получим что-то вида y0=a*R+b подставляем этот y0 в выражение для x0 получим что-то вида x0=c*R+d теперь берём любое из исходных уравнений и подставляем туда x0 и y0 после раскрытия скобок получим квадратное уравнение относительно R находим два корня для каждого корня находим соответствующие x0 и y0 |
Автор: лцф 3.6.2013, 13:15 |
http://www.walkinspace.ru/blog/2010-12-19-358 я так понимаю, что приведенный алгоритм на рисунке 9.1 - это оно и есть? |
Автор: maxim1000 3.6.2013, 13:21 |
в принципе, про вычитание что-то похоже, да и вид уравнения такой же хотя всякие операции над уравнениями в системах много где встречаются |
Автор: лцф 4.6.2013, 14:00 |
всё-таки это немного не то, более подробно расписано в ССРНС: |
Автор: Pavia 4.6.2013, 15:46 |
Если это практическая задача. То в исходных данных будут ошибки поэтому такую задачу решают при помощи минимизации ошибки. Что касается метода выбираемого для минимизации. В виду того что функция ошибки не является монотонной, то градиентный спуск и прочие методы сразу отпадают. Можно выделить метода которые тут будут работать. Перебор всех или наиболее разумных точек. Что очень долго. Второе это метод наименьших квадратов. Третье это методы нелинейной оптимизации. Ещё надо учесть ошибки в вычислениях и проблемы методов, как то устойчивость, но данная задача довольно таки простая. Правда в интернете толкового решения я не видел. |
Автор: лцф 4.6.2013, 16:15 |
тяжело искать то, что не очень хорошо понимаешь. Почти готовый http://www.srns.ru:802/wiki/images/2/2a/20111128_%D0%90%D0%9F_%D0%A1%D0%A0%D0%9D%D0%A1_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_14_%D0%BF%D1%80%D0%B5%D0%B7%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F.pdf, не сразу сообразил, что надо у гугля спрашивать. |