Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Пример решения поставленной задачи




Функцию варианта задания оформляем как процедуру - функции, используя в меню оболочки QBasic.

· дифференциальное уравнение (Y¢(x))

FUNCTION f (x, y0)

f = < функция соответствующего варианта >

END FUNCTION

интервал (а, b), шаг (h), краевое значение функции (у0)
Блок-схема для задачи решения дифференциального уравнения имеет вид.


БЛОК-СХЕМА АЛГОРИТМА РЕШЕНИЯ

 

 

 

 

Запись всех подпрограмм можно осуществить через меню оболочки QBasic:

1. Alt - вход в меню

2. Edit®New SUB … - создание новой подпрограммы

3. Edit®New FUNCTION… - создание новой подпрограммы функции

4. Набираем в диалоговом окне новое имя подпрограммы (например: eiler)

На экране появляется заготовка для создания подпрограммы:

SUB <имя подпрограммы, параметры>

<текст подпрограммы>

END SUB

1. Приступаем к написанию подпрограммы между ключевыми словами SUB и END SUB

2. Все вспомогательные подпрограммы объединяются управляющей программой или головным модулем.

3. Переход от текста управляющей программы к текстам подпрограммам происходит при нажатии клавиш F2.

ВИД ПРОГРАММЫ НА ЯЗЫКЕ QBASIC

Головной модуль на языке QBasic

DECLARE SUB eiler (a!, b!, h!, y0!)

DECLARE SUB koshi (a!, b!, h!, y0!)

DECLARE SUB runge (a!, b!, h!, y0!)

DECLARE FUNCTION f! (x!, y0!)

CLS

DIM SHARED eilerM(1000), koshiM(1000), rungeM(1000)

INPUT "левый конец интервала a= "; a

INPUT "правый конец интервала b= "; b

INPUT "шаг "; h

INPUT "краевое значение функции Y0= "; y0

yy = y0 'сохранение краевого значения функции

REM Вызов Метода Эйлера

CALL eiler(a, b, h, yy)

yy = y0

 

REM Вызов Метода Эйлера-Коши

CALL koshi(a, b, h, yy)

yy = y0

REM Вызов Метода Рунге-Кутта

CALL runge(a, b, h, yy)

PRINT "--------------------------------------------------------------"

PRINT "│ x │ elier │ koshi │ runge │"

PRINT "--------------------------------------------------------------"

L$ = "│ #.# │ ##.##### │ ##.##### │ ##.##### │"

i = 1

FOR x = a TO b + h / 2 STEP h

PRINT USING L$; x; eilerM(i); koshiM(i); rungeM(i)

i = i + 1

NEXT x

PRINT "--------------------------------------------------------------"

END

Первые четыре строчки пишутся автоматически при присоединении подпрограмм к головному модулю в результате выполнения команды Save All.

Подпрограмма для решения дифференциального уравнения
методом Эйлера:

SUB eiler (a, b, h, y0)

i = 1

eilerM(i) = y0

FOR x = a TO b + h / 2 STEP h

y = y0 + h * f(x, y0)

y0 = y

i = i + 1

eilerM(i) = y0

NEXT x

END SUB

Подпрограмма для решения дифференциального уравнения
методом Эйлера-Коши:

SUB koshi (a, b, h, y0)

i = 1

koshiM(i) = y0

FOR x = a TO b + h / 2 STEP h

k1 = h * f(x, y0)

k2 = h * f(x + h, y0 + k1)

y = y0 + (k1 + k2) / 2

y0 = y

i = i + 1

koshiM(i) = y0

NEXT x

END SUB

Подпрограмма для решения дифференциального уравнения
методом Рунге-Кутта:

SUB runge (a, b, h, y0)

i = 1

rungeM(i) = y0

FOR x = a TO b + h / 2 STEP h

k1 = h * f(x, y0)

k2 = h * f(x + h / 2, y0 + k1 / 2)

k3 = h * f(x + h / 2, y0 + k2 / 2)

k4 = h * f(x + h, y0 + k3)

y = y0 + (k1 + 2 * k2 + 2 * k3 + k4) / 6

y0 = y

i = i + 1

rungeM(i) = y0

NEXT x

END SUB

Процедура функция:

FUNCTION f (x, y0)

f = < функция соответствующего варианта >

END FUNCTION





Поделиться с друзьями:


Дата добавления: 2016-12-06; Мы поможем в написании ваших работ!; просмотров: 421 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2320 - | 2074 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.