Консультация № 178251
06.05.2010, 23:16
0.00 руб.
0 0 0
Здравствуйте, уважаемые эксперты!
Мне необходимо написать программу в qbasic, интегрирование ОДУ методом Рунге-Кутты, по данным алгоритмам.
алгоритм 1
алгоритм 2
Индивидуально задание: дифференциальное уравнение 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) из приведенной таблицы.
таблица
Заранее спасибо!

Обсуждение

Форма ответа