Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
integraly_uravnenia_optim_fayly.doc
Скачиваний:
15
Добавлен:
09.04.2015
Размер:
552.45 Кб
Скачать

Лабораторная работа №4 Численные методы поиска безусловного экстремума.

  1. Цель работы

Ознакомление с принципом модульного программирования на примере задачи поиска безусловного экстремума. Использование оболочки Q-basic для построения подпрограмм и головного модуля.

  1. Основные теоретические положения.

  1. Порядок выполнения работы

    1. Задание, включает в себя функцию F(X)=ax^2+bx+c, где a<0, точность вычисления (eps=0,001) и отрезок для поиска экстремума ([a,b]) , значение которого уточняется с помощью пакета Eureka.

    2. Исследовать функцию на непрерывность и существование на заданном отрезке с помощью пакета Eureka. И найти точное значение экстремума.

    3. Написать подпрограмму для каждого метода (дихотомии, золотого сечения)

    4. Написать головной модуль

    5. Отладить программу и получить результаты

    6. Сравнить полученные результаты, с полученными в пакете Eureka и сделать вывод о том, какой метод наиболее точный.

  1. Содержание отчета

4.1. Содержательная постановка задачи

4.2. Исходные данные

4.3. Краткое описание методов.

4.4. Блок схема подпрограмм и блок схема головного ( или управляющего) модуля.

4.5. Листинг подпрограмм и управляющего модуля.

4.6. Распечатка полученных результатов

4.7. Распечатка результатов в Eureka

4.8. Сравнительный анализ результатов, полученных разными методами и в Eureka.

  1. Литература

    1. Лекции по курсу «Информатика»

    2. Г.Зельднер «Quick-basic для носорогов».Из-во «Март», Москва, 1996

    3. Бахвалов С.А. «Численные методы математического анализа», т. 1, «Высшая школа», Москва, 1976

    4. Демидович «Математический анализ для ВТУЗов»

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

1. Подынтегральную функцию варианта задания оформляем как процедуру-функцию, используя в меню оболочки Quick-basic режим:

FUNCTION F(X)

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

END FUNCTION

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

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

  2. EDIT - всплывающее меню редактирования

  3. NEW SUB - создание новой подпрограммы ( NEW FUNCTION - создание новой подпрограммы функции)

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

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

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

END SUB

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

Все вспомогательные подпрограммы объединяются управляющей программой или головным модулем. Переход от текста управляющей программы к текстам подпрограммам происходит при нажатии клавиш ALT + F1, наоборот - ALT + F2.

Преступаем к написанию головного модуля.

Управляющая программа выглядит так:

DECLARE SUB dihot (a!, b!, e!, xmax!)

DECLARE SUB zolot (a!, b!, e!, xmax!)

DECLARE FUNCTION f! (x!)

CLS

INPUT "Начальное значение отрезка a="; a0

INPUT "Конечное значение отрезка b="; b0

e = .001 ' точность

a = a0: b = b0 'задание начальных значений для метода дихотомии

CALL dihot(a, b, e, xmax) ' вызов метода дихотомии

PRINT "Метод дихотомии"

PRINT "xmax="; xmax

PRINT "ymax="; f(xmax) 'значение функции по методу дихотомии

PRINT

PRINT "Метод золотого сечения"

a = a0: b = b0 'задание начальных значений для метода золотого сечения

CALL zolot(a, b, e, xmax) ' вызов метода золотого сечения

PRINT "xmax="; xmax

PRINT "ymax="; f(xmax) ) 'значение функции по методу золотого сечения

END

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

Вычисление значения xmax, при котором достигается экстремум функции, методом дихотомии оформляем подпрограммой

SUB dihot (a, b, e, xmax)

DO UNTIL ABS(b - a) < 2 * e

x1 = (a + b - e) / 2

x2 = (a + b + e) / 2

IF f(x1) > f(x2) THEN b = x2 ELSE a = x1

LOOP

xmax = (a + b) / 2

END SUB

Вычисление значения xmax, при котором достигается экстремум функции, методом золотого сечения оформляем подпрограммой

SUB zolot (a, b, e, xmax)

k = (SQR(5) - 1) / 2

x1 = a + (1 - k) * (b - a)

x2 = a + k * (b - a)

DO UNTIL ABS(x2 - x1) < e

IF f(x1) < f(x2) THEN

a = x1: x1 = x2: x2 = a + k * (b - a)

ELSE

b = x1: x2 = x1:x1 = a + (1 - k) * (b - a)

END IF

LOOP

xmax = (x1 + x2) / 2

END SUB

Функцию варианта задания оформляем как процедуру-функцию:

FUNCTION F(X)

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

END FUNCTION

Программу осталось только набрать и отладить. Полученные результаты подклеить в отчет.

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

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

  2. EDIT - окно редактирования для записи функций. В нем необходимо записать следующее:

$max(Y)

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

Y=F(x)

  1. Solve – окно решения, где выводятся результаты вычислений. Их необходимо записать (x – значение аргумента, при котором достигается экстремум, Y – значение экстремума).

  2. Graph-Plot-левая граница отрезка – правая граница отрезка (задается произвольно, например -10 и 10). Окно, где выводится график функции, чтобы просмотреть график на весь экран нажмите F5.

В пакете Eureka необходимо получить точное значение экстремума функции и соответствующего ему аргумента (значение Y и X в окне Solve) и зарисовать график функции (Graph-Plot).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]