2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Численно найти все корни уравнения
Сообщение19.02.2018, 10:35 
Аватара пользователя


12/03/11
693
Речь идет про решение тригонометрического уравнения
$$
A \cos(kx) \sin(x) + \sin(kx) \cos(x) = 0.
$$
Нужно найти все (например, первые 1000) его корни (положительные) с нужной точностью.
Если нарисовать график, задача тривиальная.
Но меня интересует как на практике решают такие задачи (вплоть до имплеметированной функции в пакете) :roll:

 Профиль  
                  
 
 Re: Численно найти все корни уравнения
Сообщение19.02.2018, 11:48 
Заслуженный участник


09/05/12
25179
Ну, например, так:
1) зная $k$, выделяем один период (возможно, приближенный - при нецелых $k$ он может оказаться достаточно большим, правда, искать все корни в таком редко когда бывает надо);
2) на нем уединяем корни чем-нибудь вроде дихотомии;
3) затем находим корни чем-нибудь вроде метода Ньютона.

 Профиль  
                  
 
 Re: Численно найти все корни уравнения
Сообщение19.02.2018, 11:58 
Аватара пользователя


12/03/11
693
Цитата:
1) зная $k$, выделяем один период (возможно, приближенный - при нецелых $k$ он может оказаться достаточно большим, правда, искать все корни в таком редко когда бывает надо);

Да, k - нецелое число взятое из эксперимента скажем 4.291 плюс/минус эпсилон :-)

 Профиль  
                  
 
 Re: Численно найти все корни уравнения
Сообщение19.02.2018, 18:10 
Заслуженный участник
Аватара пользователя


11/03/08
10043
Москва
Задача распадается на две подзадачи:
- как найти тысячу корней;
- как найти корни с точностью до тысячной.
Вторая проще - задача прямо создана для Ньютона. А если кто больше любит дихотомию или regula falsi - тоже пойдёт! Найти приближение и уточнять.
Со первой - для данных условий, k несколько единиц, я бы разделил уравнение на $\cos kx\cos x$ и получил бы $\tg kx=a\tg x$. Затем в качестве начальных приближений брал бы точки, в которых $\tg kx=0$ (возможно, проверяя, не попали ли на точку разрыва правой части и слегка шевеля значение. В общем случае, когда k невелико, наверно, тупо бы шёл по x с малым шагом, ища перемены знака в $\tg kx-a\tg x$, можно немного сэкономить вычисления, не используя тригонометрические функции, а воспользовавшись рекуррентными соотношениями для синуса и косинуса.

 Профиль  
                  
 
 Re: Численно найти все корни уравнения
Сообщение19.02.2018, 18:46 


04/07/15
137
DLL в сообщении #1293199 писал(а):
Но меня интересует как на практике решают такие задачи (вплоть до имплеметированной функции в пакете) :roll:


Присвойте конкретные значения А,k и воспользуйтесь стандартными функциями солидного матпакета. Начиная от указанной точки на оси oX, Вам найдут все решения, на какие хватит ресурсов. Точно знаю, такая есть у Maple. Спросите у пользователей, а пока конкретно не скажу.
(Можно не задавать А и k, тогда решений будет ещё больше.)

 Профиль  
                  
 
 Re: Численно найти все корни уравнения
Сообщение19.02.2018, 19:07 
Заслуженный участник


09/05/12
25179
DLL в сообщении #1293220 писал(а):
Да, k - нецелое число взятое из эксперимента скажем 4.291 плюс/минус эпсилон
При такой точности думать вообще не надо. :-) Можно довольно легко показать, что погрешность корня в такой ситуации тоже будет где-то в районе третьего знака после запятой (при $A \sim 1$), а тогда можно просто тупо просчитать значения левой части на сетке с соответствующим шагом и все.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Someone


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group