|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
||||||
Метод стрельбы решения краевой задачи07.03.2017, 09:35. Показов 22863. Ответов 19
Метки нет (Все метки)
Приветствую! Не могу разобраться в языке (пишу первую программу). Реализую метод стрельбы для решения краевой задачи. По какой-то причине метод расходится. Если у вас есть какие-то мысли, почему процесс расходится, пожалуйста, напишите.
функция y1(x) - это аналитическое решение. Само условие выглядит так:
0
|
||||||
| 07.03.2017, 09:35 | |
|
Ответы с готовыми решениями:
19
Решение краевой задачи Метод стрельбы для решения краевой задачи Конечно-разностный метод решения краевой задачи (дифференциального уравнения) |
|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
|
| 07.03.2017, 13:19 [ТС] | |
|
Понимаете, проблема в том, что метод расходится, но он может не работать и из-за ошибок в коде.
0
|
|
|
|
|
| 07.03.2017, 16:20 | |
|
Ну, тогда только проверять и отлаживать.
Вообще можно чуть сократить. while i < int(n-1) заменить на for i in range(...). numpy тут хорошо бы заюзать, но для этого желательно с самим питоном научиться работать.
0
|
|
|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
|
| 07.03.2017, 23:23 [ТС] | |
|
Спасибо за ответ! Отладка (spyder), к сожалению, ничего толкового мне не дала, и где-то стало возникать деление на ноль.. Я сюда, собственно и написал с целью узнать, в чем ошибка - в коде или в методе. Может быть есть другие алгоритмы применения метода?
0
|
|
|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
|
| 09.03.2017, 13:45 [ТС] | |
|
Хотя бы, пожалуйста, посмотрите на синтаксис: может я в нем ошибся, так как это мой первый опыт.
0
|
|
|
|
||
| 09.03.2017, 14:21 | ||
|
Замечания.
- про while и for уже сказал. - - Там же. Объявляете переменную ksi на уровне модуля - она будет видна в функции W. И такое же имя у параметра. Коллизия имён. Питон разрулит, но сами можете запутаться. numpy тут был бы в тему, конечно.
0
|
||
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
||
| 09.03.2017, 20:51 | ||
|
0
|
||
|
112 / 112 / 16
Регистрация: 19.08.2013
Сообщений: 298
|
|
| 10.03.2017, 01:01 | |
|
Jack Harckness, приведите хотя бы саму задачу. Где краевые условия?
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
||||||||||||||||
| 10.03.2017, 02:30 | ||||||||||||||||
|
Ошибка у Вас где-то в код вычисления нового ksi:
1
|
||||||||||||||||
|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
|
| 10.03.2017, 06:47 [ТС] | |
|
Ого! Спасибо! Я и не догадался бы, в чем проблема. Расчёт получается с точностью до 10 в -3 ?
Добавлено через 27 минут А, насчёт алгоритма: очень много информации в интернете, и везде описано слабо. Нашёл более-менее подходящий: в ДУ второго порядка вводится замена z=y'. Получается система ДУ. Решается каким-либо методом ( у меня функция W(ksi) реализует метод Адамса первого порядка, он же - "метод Эйлера"), затем проверяется краевое условие, если решение с недостаточной точностью, то кси ищется снова и снова, до лучшего результата. Самое интересное это то, что именно такой метод нахождения кси встречался чаще всего.
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|
| 10.03.2017, 13:08 | |
|
Предлагаю проверить решение на очень-очень простой задаче (с известным/простым ответом). Выберите какое-нибудь и давайте пробежимся по нему от начала до конца: ОДУ, краевые условия, правильный ответ, результат программы. Программу проверим, заодно и с теорией краевых задач разберемся. Я лично пока только частично понимаю и условие, и решение, и алгоритм.
Добавлено через 25 минут Интересные слайды http://www.dms.uaf.edu/~bueler/twopoint.pdf На английском
1
|
|
|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
|
| 10.03.2017, 14:41 [ТС] | |
|
vrm2, у меня по-вашему почему-то не сходится: считает все время одно и то же значение. С какой точностью вы считали, т.е. чему равно эпс?
А насчёт уравнения по-проще: можем взять "игрушечный" пример из слайдов, которые вы скинули
0
|
|
|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
|
| 12.03.2017, 07:44 [ТС] | |
|
vrm2, вы больше никаких изменений в коде программы не делали? Почему-то метод не сходится у меня. Пожалуйста, выложите весь код.
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|||||||
| 12.03.2017, 11:26 | |||||||
Сообщение было отмечено Jack Harckness как решение
РешениеБольше никаких изменений я не вносил. Ниже код. Только он так и остался неверный, т.е. не решает изначальную краевую задачу: Кликните здесь для просмотра всего текста
Мне не хватает теории и в области ОДУ и в области численных методов, поэтому Ваш код понимаю только частично. И не могу сказать есть ли еще ошибки в коде. А может вообще такой принцип решения краевой задачи неверен. Мне непонятны какие у Вас есть граничные условия в точках 0 и 1 (постановка задачи). Я не понимаю, правильно ли рассчитывается W(), зачем W(ksi) приближать к y1(b), почему в y1() в общем решении ОДУ приняты коэффициенты C1 и C2 равные 1. И т.д. Также мне казалось, что метод заложенный в W() применим только к ОДУ первого порядка. И вообще, для решения краевых задач второго порядка надо разбивать задачу на несколько задач первого. Но, как и говорил, могу ошибаться. Итого. Я предположил, что Вы возьмете некое уравнение второй степени (например,
1
|
|||||||
|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
|||||||
| 12.03.2017, 16:03 [ТС] | |||||||
|
где где В итоге получаем нашу формулу. Эта идея много где была описана, к тому же мне подсказывали использовать этот способ, но думаю мы с вами можем быть уверены, что метод сходится и по-вашему. Кстати, при увеличении числа n шагов (уменьшении eps) почему-то погрешность остается в третьем знаке после точки. Интересно, почему, ведь в цикле вычисления ksi, который вы предложили, явно указано условие окончание цикла - W(ksi) - y1(b) << eps. В целом, они все указаны в теле программы. Сейчас у меня закралось сомнение, может быть я их неправильно указал? Если у вас появятся еще какие-либо идеи/замечания, пожалуйста, сообщите. Добавлено через 1 час 1 минуту Итак, решить уравнение Его аналитическим решением будет: При Введем краевую задачу. Будем искать решение на промежутке 0..1 с краевыми условиями 1) Вернемся к нашему условию. Введем замену y'(x)=z(x), получаем систему дифференциальный уравнений: Обратите внимание, все уравнения первого порядка. 2) Решаем систему уравнений любым численным методом. Например, метод Адамса первого порядка (одношаговый, он же "метод Эйлера"): Сначала выбираем шаг. Затем берем (какое-то) начальное приближение Решаем систему вида: По рекуррентному соотношению наши z' (для y' аналогично, только там вместо функции предыдущее значение z, умноженное на шаг): 3) Проверяем, выполнено ли условие сходимости, если нет, выбираем другую кси (тут обычно применяется метод Ньютона), считаем снова и снова. Добавлено через 8 минут Забыл сказать, что это то, как я понял метод. Скорее всего что-то здесь не так, раз он не сходится.
1
|
|||||||
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|||||||||||
| 12.03.2017, 21:21 | |||||||||||
|
Далее куча кода:
Кликните здесь для просмотра всего текста
Как с этим работать: Кликните здесь для просмотра всего текста
Добавлено через 1 минуту Вернулся к Вашему методу Ньютона. Т.к. бисекция работает неверно (у меня), гнадо исправлять. К тому же метод Ньютона быстрее сходится
1
|
|||||||||||
|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
|
| 12.03.2017, 21:37 [ТС] | |
|
Возможно удивительно, но метод бисекции из вашего поста довольно быстро и точно сошелся для условий, приведенных в первом посте! Все сработало! Но по какой-то причине тот же программный код не работает для вашего примера y''=x^4. Может я где-то ошибся в своих выкладках?
А насчёт вашего кода: я немного запутался, не совсем понимаю что он делает. Что означает "Ищет решение f(x)=0 методом Ньютона"? Что такое f(x)?
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|||||||||||||||||||||||||||
| 12.03.2017, 22:57 | |||||||||||||||||||||||||||
А вот "правильный" метод деления пополам. Учитываются знаки функций:
Теперь подгонка ksi будет выглядеть так: Ищем W(ksi) = y1(b), т.е. ищем корень уравнения W(ksi) - y1(b) = 0. Определяем функцию и передаем ее в bisection (+диапазон)
Надеюсь не запутал еще больше ![]() Добавлено через 17 минут Похоже, все что Вам нужно, есть в scipy (что не удивительно). Ньютон https://docs.scipy.org/doc/sci... ewton.html Бисекция https://docs.scipy.org/doc/sci... isect.html Краевая задача https://docs.scipy.org/doc/sci... e_bvp.html Но это если Вам таких задач надо решать много, быстро и правильно. Но с передачей функций в качестве параметров Вам придется разобраться. Но я не против обсудить код и задачу. Благодаря Вашим выкладкам и коду, а также написанному мной коду, у меня что-то стало проясняться.
1
|
|||||||||||||||||||||||||||
| 12.03.2017, 22:57 | |
|
Помогаю со студенческими работами здесь
20
Решение краевой задачи методом стрельбы Решение краевой задачи методом стрельбы Решение краевой задачи методом стрельбы Метод прогонки в неявной схеме для решения краевой задачи уравнения теплопроводности Написать решение краевой задачи методом стрельбы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs
. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|