Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1

Корни уравнения сложной функции. Метод Ньютона. (Нужен только совет)

10.06.2015, 18:24. Показов 1689. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех .

Ребята нужен совет.
В общем я пишу программу, один кусочек ее, это найти точки пересечения двух эллипсов, повернутых и сдвинутых отдносительно начала координат, с точки зрения программирования естественно нету вопросов, вопрос с точки зрения математики.

вот имеем такую функцию(надеюсь при переносе сюда, не ошибся нигде)

https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{((x-x0)cos(\alpha) +(y-y0)sin(\alpha))^2 }{R1^2} + \frac{(-(x-x0)sin(\alpha) +(y-y0)cos(\alpha))^2 }{R2^2}=1

https://www.cyberforum.ru/cgi-bin/latex.cgi?(x-x0)
сдвиги по х
https://www.cyberforum.ru/cgi-bin/latex.cgi?(y-y0)
и по у

https://www.cyberforum.ru/cgi-bin/latex.cgi?(R1^2)
https://www.cyberforum.ru/cgi-bin/latex.cgi?(R2^2)
радиусы
ну и синусы с косинусами угла осуществляют поворот..

Решаю я все это дело Методом Ньютона.. все хорошо все красиво и главное быстро решается, за 10-15 итераций находится с точностью до 10^-6

берем производные по 2 переменным(х, у), первой и второй функции эллипса, составление матрицы, решение системы уравнений, нахождение приближения х и у, и повторение алгоритма пока не будет достигнута определенная точность, ну вы в курсе, что я тут...

проблема вся в том заключается, для того, чтобы искать корни уравнения этим методом, необходимо некое стартовое значение

а так как корней может быть 1-4:
1(соприкосновение)
2(пересечение)
3(пересечение + соприкосновение)
4(двойное пересечение)

необходимо как-то задавать стартовые значения 4 раза, т.е. предугадывать желательно значение в окресности реальной точки пересечения, так как пользователь не должен принимать участия в решении задачи, я имею ввиду, не должен задавать некие приближения. Я не знаю как сделать, может есть какое-то математическое определение для данной проблемы, выбор некой точки...

я попробовал примерно таким алгоритмом искать, но не очень получилось хорошо:
берется центральная точка эллипса, того эллипса, который находится левее первого, к ней прибавляем максимальный радиус по х и по у, для верности берем масимально отдаленное расстояние. иными словами так ставим далекую точку в 1 квадранте, так же же для 2 квадранта, чтобы искать в другую сторону и так далее, для всех 4 квадрантов. Вот вроде бы логически верно. Но работает для случая, когда центральные точки эллипсов находтся недалеко друг от друга, в других случаях находятся те точки, которые уже были найдены, находятся по второму, а то и по третьему разу, вот собственно и возникает трудность с нахождением всех

Буду благодарен совету, или другому методу решения
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2015, 18:24
Ответы с готовыми решениями:

Mathcad. Локализировать корни уравнения f(x) = 0. Метод простой итерации и метод Ньютона.
Помогите пожалуста реализировать на маткаде следующий алгоритмы: 1) Локализировать корни уровнения f(x) = 0. Найти их з точностью 10^-8,...

Вычислить корни уравнения, используя метод простой итерации, метод Ньютона
2 1) Вычислить корни уравнения 2*(e^x)-5*x-2 с точностью 0.000001, используя метод простой итерации 2) Решить это же уравнение методом...

Найти корни уравнения на указанном промежутке с заданной точностью (метод Ньютона)
Добрый вечер! Помогите пожалуйста с лабой. Написать программу по нахождению корня уравнения x^{3}-5x^{2}-4x+19 на промежутке с точностью...

4
Эксперт по математике/физике
 Аватар для jogano
6358 / 4065 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
11.06.2015, 02:51
Лучший ответ Сообщение было отмечено Arcor как решение

Решение

Судя по вашей записи уравнения эллипса, вы поворачиваете оси эллипса на угол https://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha против часовой стрелки, а затем сдвигаете его центр в точку https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(x_0;y_0 \right).
Во-первых, обозначения. У вас два эллипса и у каждого два радиуса. Лучше бы пользоваться традиционными обозначениями для полуосей https://www.cyberforum.ru/cgi-bin/latex.cgi?a_1,b_1 и https://www.cyberforum.ru/cgi-bin/latex.cgi?a_2,b_2 вместо https://www.cyberforum.ru/cgi-bin/latex.cgi?R_{11},R_{12},R_{21},R_{22} - чёрт ногу сломит...
Метод решения:
Первый эллипс вы записываете в параметрической форме через угол https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi - угол отклонения радиус-вектора из нового центра https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(x_1,y_1\right) в точку эллипса от правого конца большой полуоси (которая наклонена): https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(x\left(\varphi  \right),y\left(\varphi  \right)\right)=\left(x_1+a_1\cos \varphi \cos \alpha _1-b_1 \sin \varphi \sin \alpha _1; \:  y_1+a_1\cos \varphi \sin \alpha _1+b_1 \sin \varphi \cos \alpha _1\right)
А второй эллипс в каноническом виде https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\left(\left(x-x_2 \right)\cos \alpha _2+\left(y-y_2 \right)\sin \alpha _2 \right)^2}{a_2^2}+\frac{\left(-\left(x-x_2 \right)\sin \alpha _2+\left(y-y_2 \right)\cos \alpha _2 \right)^2}{b_2^2}=1
Дальше перебираете значения угла https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi \in \left[0;2 \pi \right) с какой-то там дискретностью, скажем, 0,01 радиана. Полученную при каждом значении угла пару координат первого эллипса https://www.cyberforum.ru/cgi-bin/latex.cgi?\left( x\left( \varphi\right),y\left(\varphi  \right)\right) подставляете в каноническое уравнение второго эллипса. Если точка лежит внутри эллипса, левая часть будет <1,а если вне - то >1. Вам нужно запомнить пары значений угла https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi, при котором меняется знак сравнения с 1. Вот вам и концы интервала для метода Ньютона. Как нашли первую точку - продолжаете перебирать дальше, пока не обойдёте весь первый эллипс.
Т.о., метод Ньютона применяется для нахождения https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi. Подставляете найденное значение этого угла в параметрическое уравнение первого эллипса и получаете координаты (x,y) пересечения. Причём все возможные. Единственный нюанс - можно пропустить касание эллипсов. Лечится только повышением уровня дискретности перебора угла https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi.
2
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
11.06.2015, 09:24
Лучший ответ Сообщение было отмечено Arcor как решение

Решение

Цитата Сообщение от Arcor Посмотреть сообщение
как-то задавать стартовые значения
Цитата Сообщение от jogano Посмотреть сообщение
... перебираете значения угла...
Другой вариант.
1) Несколько точек одного из эллипсов используем в качестве начальных для метода.
2) Например, для точек phi=0o, 90o, 180o, 270o применяем метод Ньютона. Если нашли меньше 4 решений, для начальных
точек 45o, 135o, ... применяем метод. И т.д.
1
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3413 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
11.06.2015, 10:57
Цитата Сообщение от Arcor Посмотреть сообщение
так как корней может быть 1-4
Вариант 0 (отсутствие общих точек) - тоже надо рассматривать.
0
 Аватар для Arcor
5708 / 2299 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
11.06.2015, 11:32  [ТС]
Цитата Сообщение от Том Ардер Посмотреть сообщение
Вариант 0 (отсутствие общих точек) - тоже надо рассматривать.
ну это то само собой
я сделал это следующим образом если за 100 итераций ничего не найдено было и ошибка поиска растет - то прекратить поиск

Добавлено через 28 минут
Цитата Сообщение от jogano Посмотреть сообщение
Во-первых, обозначения. У вас два эллипса и у каждого два радиуса. Лучше бы пользоваться традиционными обозначениями
ну я сразу сказал, что я не математик, тут уж простите за несоответствие в написании обозначений
Цитата Сообщение от jogano Посмотреть сообщение
Дальше перебираете значения угла https://www.cyberforum.ru/cgi-bin/latex.cgi? \in \left[0;2 \pi \right ) с какой-то там дискретностью, скажем, 0,01 радиана. Полученную при каждом значении угла пару координат первого эллипса https://www.cyberforum.ru/cgi-bin/latex.cgi?  x\left( \varphi\right),y\left(\varphi \right) подставляете в каноническое уравнение второго эллипса.
не плохо, но будет очень долго
Цитата Сообщение от Alex5 Посмотреть сообщение
1) Несколько точек одного из эллипсов используем в качестве начальных для метода.
2) Например, для точек phi=0o, 90o, 180o, 270o применяем метод Ньютона. Если нашли меньше 4 решений, для начальных
точек 45o, 135o, ... применяем метод. И т.д.
вот приблизительно то, что я делал, но я точки брал которые не лежали на эллипсе, а просто произвольные в той округе

всем спасибо, будем биться дальше

Добавлено через 4 минуты

Не по теме:

что-то все куда-то уехало при цитировании, не могу больше изменить сообщение, поправьте пожалуйста

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2015, 11:32
Помогаю со студенческими работами здесь

Найти приближенно все (в том числе комплексные) корни уравнения f(x)=0 с заданной точностью (метод Ньютона)
Помогите решить задачу. Найти приближенно все (в том числе комплексные) корни уравнения f(x)={x}^{4}-2.7{x}^{3}+3 с точностью...

Найти корни уравнения методом Ньютона
Ребята помогите построить программу которая будет считать корни ниже переведенного уравнения за методом Ньютона с точностью 0,00001.

Найти корни уравнения методом Ньютона
Помогите пожалуйста составить структурированную программу для нахождения корня уравнения 3x-4ln(x)-5 = 0 на отрезке с абсолютной...

Найти корни уравнения методом Ньютона
есть задача: найти корни уравнения методом Ньютона с точностью 0,0001 x^3 – 2 x^2 + х – 3 = 0 на интервале ! в самом паскале задача...

Найти корни уравнения методом Ньютона
Мeтодом Ньютонов. 0.25(Х*Х*Х)+Х-1.2502=0 Промeжуток нa котором лeжит корeнь . А точное значение=1.0001


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru