![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Veina |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Я написала программу на Паскале для формулы yn+1=yn+h*fn
Вот код: program eiler; А как написать переделать для формулы yn+1=yn+h*fn+1 и для формулы yn+1=yn+(h/2)*(3fn-fn-1) Подскажите, пожалуйста, кто-нибудь. Заранее спасибо |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Для f(x[n], y[n]) - да, было. А зачем помнить? Можно порассуждать )).А для f(x[n+1], y[n]) - не уверен. Я такого не помню. 1. Сначала представим себе, что f не зависит от y. Если мы аппроксимируем y прямой y'*x на участке от xn до xn+1, то неважно, где брать значение y' - слева или справа. То есть обе формулы имеют право на жизнь и примерно одинаковую точность. Было бы лучше, если бы мы брали значение f в центре. Логично также взять среднее ар. значений на концах (или другое взвешенное значение). Есть также методы, которые предполагают наличие двух различных сеток для x и y. Добавление зависимости от y дела не меняет (в определенных предположениях о функции, ессно). Так или иначе, сходимость должна быть. 2. Я вообще не вижу смысла вникать в выч.мат. в данном случае. Человек принес с собой формулы и просит помочь с программированием их. Если ты считаешь, что есть формулы лучше - ну, упомяни об этом... Но это, мне кажется, не секрет )). 3. С тем, что для реализации последней формулы нужно как-то (по-другому) рассчитывать первое значение, ты, пожалуй, прав.. Я как-то не сразу врубился, о чем речь, извини. Об этом я сейчас еще напишу (ниже). Тогда для формулы yn+1=yn+(h/2)*(3fn-fn-1) Нет, не правильно.будет вот так: <...> Правильно? проверьте, пожалуйста Во-первых, ты воплотила формулу: yn+1=yn+(h/2)*(3fn+1-fn) - а это СОВСЕМ не то.. Марин, тут есть две возможности. 1. Если нам разрешено использовать функцию f за пределами отрезка [a,b], то все просто: program eiler_2; - и все. 2. Если за пределы отрезка [a,b] по x вылезать нельзя, то для реализации этой формулы нужно сначала подсчитать y1 (отсчет от 0) каким-то другим методом, как уже говорил TarasBer. Каким именно - не сказано, так что ты можешь выбрать любой (первый, например). Точность решения от этого сильно зависеть не будет все равно. Примерно вот так: program eiler_3; Понятно? Спрашивай, что неясно. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
-Veina- |
![]()
Сообщение
#3
|
Гость ![]() |
program eiler_3; Вот ещё вопрос: Как в последней проге в строке y:= y+h/2*(3*f(x,y)-f(x-h,y)); сделать y как функцию от (x-h), то есть y:= y+h/2*(3*f(x,y)-f(x-h,y(x-h))); Подскажите, пожалуйста |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 3:57 |