|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.08.2022, 22:14 | #1 |
Новичок
Джуниор
Регистрация: 23.08.2022
Сообщений: 3
|
Решение трансцендентного уравнения методом подвижных секущих
Всем доброго времени суток.
Дана функция Phi(alpha) = sinc(pi*a/l*sin(alpha)) = sin(pi*a/l*sin(alpha))/(pi*a/l*sin(alpha)), область определения [-pi/2;pi/2]. Необходимо решить уравнение Phi(alpha) = c методом подвижных секущих (он же метод хорд). Параметр c по умолчанию равен 0,7. Т.к. функция чётная, работа в основном идёт с неотрицательной областью, и корень ищется положительный. Метод предполагает вычисление синуса, а также выбор двух разгонных (т.е. начальных) точек. Также необходим арксинус, квадратный корень и некоторые другие вспомогательные функции. Реализации "фи", синуса, арксинуса и корня работают исправно и точно (проверялись по отдельности). Итерации метода хорд ограничены так называемым приёмом Гарвика – по сути, это проверка условия остановки | alpha_n+1 - alpha_n | > | alpha_n - alpha_n-1 |. Можно также его модифицировать, учитывая равенство (прекращая сразу при ">" и прекращая после 10 идущих подряд "="). Ярко выраженного эффекта такая модификация, правда, не даёт (и не влияет на нижеописанную проблему). Проблема заключается в том, что в одних случаях программа решающая функция (Solve_Sinc) даёт хороший результат (погрешность порядка 10^(-7) — 10^(-9)), а в других – совсем неправильный. Выбор разгонных точек на это не влияет (ошибки наблюдаются при разных вариантах). Вывод программы осуществляется в формате "погрешность : результат решения", а в комментариях к коду помечены ошибочные примеры. Итак, код: Код:
Заранее спасибо! |
24.08.2022, 07:25 | #2 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
для начала - исправить явные косяки:
0) добавить форматирование кода 1) 2) float -> double 3) вместо костылей использовать стандартные функции из std:: (#include <cmath>) |
24.08.2022, 13:00 | #3 |
Новичок
Джуниор
Регистрация: 23.08.2022
Сообщений: 3
|
Алексей1153, Насчёт форматирования: если Вы имеете в виду отступы, то это сам сайт так сделал, я копировал из IDE, и там всё было нормально.
1. Я не понимаю, к чему это? "cout « Solve_Sinc" – команда вывода, что с ней не так? 2. К сожалению, я должен реализовать решение задачи минимальными средствами, и использование double не рекомендуется. 3. Это не костыли, это просто самостоятельно реализованный математический аппарат, который хорошо работает. Последний раз редактировалось Newbie_cpp; 24.08.2022 в 13:44. |
25.08.2022, 07:21 | #4 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
Newbie_cpp,
сейчас там открывающая кавычка, а не оператор << . Если вдруг кто-то решит поразбираться с кодом, ему придётся исправлять все синтаксические ошибки float - это потеря точности (и скорости исполнения, кстати, тоже) стандартные функции лучше велосипедов (всё по той же причине) |
25.08.2022, 15:04 | #5 |
Новичок
Джуниор
Регистрация: 23.08.2022
Сообщений: 3
|
Алексей1153, открывающаяся кавычка, скорее всего, тоже из-за особенностей сайта. В таком случае, вот ссылка на исходник.
Насчёт float см. выше: реализация минимальными средствами; таковы условия задачи. Также я считаю, что математические функции реализованы мною достаточно хорошо, чтобы в условиях данной задачи заменить библиотечные. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Решение СНАУ методом секущих Бройдена | Утюжок | Помощь студентам | 0 | 07.12.2014 17:36 |
Написать программу решения уравнения методом дихотомии, комбинированным методом секущих хорд, методом простых итераций (на C++) | Bloody_Mary | Помощь студентам | 0 | 14.05.2014 21:05 |
решить нелинейное уравнение методом секущих (хорд). Нелинейные уравнения (Lazarus) | Loonas | Lazarus, Free Pascal, CodeTyphon | 2 | 24.04.2014 21:45 |
Решение нелинейных уравнений методом секущих. | Spyke | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 20.09.2011 19:37 |
Решение уравнения методом деления отрезка пополам. Методом секущей. | Panda196 | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 25.11.2008 09:06 |