Лидеры рейтинга

ID: 401284

Михаил Александров

Советник

380

Россия, Санкт-Петербург


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

341

Россия, пос. Теплоозёрск, ЕАО


ID: 401888

puporev

Профессор

216

Россия, Пермский край


ID: 405338

vovaromanov.jr

1-й класс

114


ID: 400669

epimkin

Профессионал

112


ID: 242862

Hunter7007

Мастер-Эксперт

30

Россия, Омск


ID: 137394

Megaloman

Мастер-Эксперт

26

Беларусь, Гомель


8.10.2

13.10.2021

JS: 2.10.2
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-10-23 16:46:01-standard


Консультации и решение задач по информатике.

Администратор раздела: Коцюрбенко Алексей Владимирович (Старший модератор)

Консультация онлайн # 178272

Раздел: Информатика
Автор вопроса: Ushastik1985
Дата: 07.05.2010, 20:23 Консультация закрыта
Поступило ответов: 2

Здравствуйте, уважаемые эксперты!
Мне необходимо написать программу в qbasic, интегрирование ОДУ методом Рунге-Кутты, по данным алгоритмам.
http://rfpro.ru/upload/2294
http://rfpro.ru/upload/2295
Индивидуально задание: дифференциальное уравнение y’=y (y=y(x)), интервал [0,1], начальные условия x0 = 0, y0 = 1, шаг интегрирования h0 = 0,1.
Вот что у меня получилось:

Код
DECLARE FUNCTION r! (x() AS SINGLE, y() AS SINGLE, h AS SINGLE, m AS SINGLE)
DECLARE FUNCTION f! (x AS SINGLE, y AS SINGLE)
DIM n AS INTEGER
DIM x0 AS SINGLE, y0 AS SINGLE, h AS SINGLE, m AS SINGLE, b AS SINGLE
CLS
INPUT "Nachalnoe uslovie x0:"; x0
INPUT "Nachalnoe uslovie y0:"; y0
INPUT "Pogreshnost:"; E
INPUT "Shag pechati:"; h0
INPUT "Konec otrezka integrirovaniya [x0;b]:"; b
PRINT
n = FIX((b - x0) / h0) + 1
PRINT "Nachalnoe uslovie x0:"; x0
PRINT "Nachalnoe uslovie y0:"; y0
PRINT "Shag pechati:"; h0
FOR i = 1 TO n
h = h0
m = 1
y = r(x(), y(), h, m)
DO UNTIL ABS(y - y1) < E
y1 = y
h = h / 2
x = x0
y = y0
m = 2 * m
y = r(x, y, h, m)
LOOP
x0 = x0 + h0
y0 = y
PRINT "x0 ="; x0,"y0 ="; y0, "h0 ="; h0, "m ="; m
NEXT i
END

FUNCTION f (x AS SINGLE, y AS SINGLE)
f = y(x)
END FUNCTION

FUNCTION r! (x() AS SINGLE, y() AS SINGLE, h AS SINGLE, m AS SINGLE)
FOR j = 1 TO m
k1 = f(x(j), y(j))
k2 = f(x(j) + h / 2, y(j) + h * k1 / 2)
k3 = f(x(j) + h / 2, y(j) + h * k2 / 2)
k4 = f(x(j) + h, y(j) + h * k3)
y(j + 1) = y(j) + h / 6 * (k1 + 2 * k2 + 2 * k3 + k4)
x = x + h
NEXT j
r = y(j + 1)
END FUNCTION

Программа выдает ошибку, связанную с переменной X. Видимо я что-то не поняла с процедурами-функциями. Помогите, пожалуйста, исправить программу.
В результате должны получиться значения x и y(x) из приведенной таблицы.
http://rfpro.ru/upload/2296
Заранее спасибо!

Ответ # 261274 от lamed
Здравствуйте, Ushastik1985. Ответ в приложении. QBasic
Внесены некоторые исправления.
1. Исправлена передача параметров. Надо считать x[i+1] и x[i] итерациями, а не элементами массива.
2. Исправлена функция f=y.
3. Исправлен вызов функции y = r(x0, y0, h, m) в первом цикле.
Удачи!

Приложение:


lamed

Академик
07.05.2010, 23:01
5


Спасибо за полный и основательный ответ.

Ответ # 261275 от Лиджи-Гаряев Владимир
Здравствуйте, Ushastik1985.

В предыдущем ответе, x выбегает из отрезка [0;1]
Предлагаю свой вариант исправлений.
Код
DECLARE FUNCTION r! (x AS SINGLE, y AS SINGLE, h AS SINGLE, m AS SINGLE)
DECLARE FUNCTION f! (x AS SINGLE, y AS SINGLE)
CLS
INPUT "Nachalnoe uslovie x0:"; x0
INPUT "Nachalnoe uslovie y0:"; y0
INPUT "Pogreshnost:"; E
INPUT "Shag pechati:"; h0
INPUT "Konec otrezka integrirovaniya [x0;b]:"; b
PRINT
n = FIX((b - x0) / h0) + 1
PRINT "Nachalnoe uslovie x0:"; x0
PRINT "Nachalnoe uslovie y0:"; y0
PRINT "Shag pechati:"; h0
y1 = y0
FOR i = 1 TO n
h = h0
m = 1
y = r(x, y, h, m)
DO UNTIL ABS(y - y1) < E
y1 = y
h = h / 2
x = x0
y = y0
m = 2 * m
y = r(x, y, h, m)
LOOP
x0 = x0 + h0
y0 = y
PRINT "x ="; x0, "y ="; y0, "h ="; h0, "m ="; m
NEXT i
END

FUNCTION f (x, y)
f = y
END FUNCTION

FUNCTION r! (x, y, h, m)
FOR j = 1 TO m
k1 = f(x, y)
k2 = f(x + h / 2, y + h * k1 / 2)
k3 = f(x + h / 2, y + h * k2 / 2)
k4 = f(x + h, y + h * k3)
y = y + h * (k1 + 2 * k2 + 2 * k3 + k4) / 6
x = x + h
NEXT j
r = y
END FUNCTION

Лиджи-Гаряев Владимир

Посетитель
07.05.2010, 23:28
5
Мини-форум консультации # 178272

q_id

lamed

Академик

ID: 320937

1

= общий =    07.05.2010, 21:16

Ushastik1985:
Добрый вечер! Можете сказать, что это за книжка (или методичка?). Можно ли этим алгоритмам верить? Можно ли использовать алгоритмы из других источников?

неизвестный

2

= общий =    07.05.2010, 21:19

Это методичка по лабораторным по "Численным методам" Я думаю можно, уже не первый год сдают по ним. Но я что-то с процедурами вообще запуталась

q_id

lamed

Академик

ID: 320937

3

= общий =    07.05.2010, 22:05

Ushastik1985:
Так устроит?

Код
DECLARE FUNCTION r! (x AS SINGLE, y AS SINGLE, h AS SINGLE, m AS SINGLE)
DECLARE FUNCTION f! (x AS SINGLE, y AS SINGLE)
DIM n AS INTEGER
DIM x0 AS SINGLE, y0 AS SINGLE, h AS SINGLE, m AS SINGLE, b AS SINGLE
CLS
INPUT "Nachalnoe uslovie x0:"; x0
INPUT "Nachalnoe uslovie y0:"; y0
INPUT "Pogreshnost:"; E
INPUT "Shag pechati:"; h0
INPUT "Konec otrezka integrirovaniya [x0;b]:"; b
PRINT
n = FIX((b - x0) / h0) + 1
PRINT "Nachalnoe uslovie x0:"; x0
PRINT "Nachalnoe uslovie y0:"; y0
PRINT "Shag pechati:"; h0
FOR i = 1 TO n
h = h0
m = 1
y = r(x0, y0, h, m)
DO UNTIL ABS(y - y1) < E
y1 = y
h = h / 2
x = x0
y = y0
m = 2 * m
y = r(x, y, h, m)
LOOP
x0 = x0 + h0
y0 = y
PRINT "x0 ="; x0,"y0 ="; y0, "h0 ="; h0, "m ="; m
NEXT i
END

FUNCTION f (x AS SINGLE, y AS SINGLE)
f = y
END FUNCTION

FUNCTION r! (x AS SINGLE, y AS SINGLE, h AS SINGLE, m AS SINGLE)
FOR j = 1 TO m
k1 = f(x, y)
k2 = f(x + h / 2, y + h * k1 / 2)
k3 = f(x + h / 2, y + h * k2 / 2)
k4 = f(x + h, y + h * k3)
y = y + h / 6 * (k1 + 2 * k2 + 2 * k3 + k4)
x = x + h
NEXT j
r = y
END FUNCTION

неизвестный

4

= общий =    07.05.2010, 22:09

Спасибо огромное! Даже не знаю, чтоб я без вас делала!)))

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 155

Gluck

9-й класс

Рейтинг: 82

Коцюрбенко Алексей Владимирович

Старший модератор

Рейтинг: 70

Megaloman

Мастер-Эксперт

Рейтинг: 26

CradleA

Мастер-Эксперт

Рейтинг: 2

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0