|
1 / 1 / 0
Регистрация: 27.04.2015
Сообщений: 17
|
||||||
Метод стрельбы решения краевой задачи07.03.2017, 09:35. Показов 22956. Ответов 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
Решение краевой задачи методом стрельбы Решение краевой задачи методом стрельбы Решение краевой задачи методом стрельбы Метод прогонки в неявной схеме для решения краевой задачи уравнения теплопроводности Написать решение краевой задачи методом стрельбы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|