Разработка программы для оптимизации функции одной переменной методом дихотомии

Описание и функциональное назначение программы по оптимизации функции, ее логическая структура и используемые технические средства. Практическое применение программы, вызов и загрузка, входные и выходные данные, выполнение контрольного примера и листинг.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 26.02.2012
Размер файла 337,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Оглавление

1. Описание программы

1.1 Общие сведения

1.2 Функциональное назначение

1.3 Описание логической структуры

1.4 Используемые технические средства

1.5 Вызов и загрузка

1.6 Входные и выходные данные

2. Описание применения

2.1 Назначение программы

2.2 Условия применения

2.3 Описание задачи

2.4 Входные и выходные данные

3. Руководство программиста

3.1 Назначение и условия применения программы

3.2 Характеристики программы

3.3 Обращение к программе

3.4 Входные и выходные данные

3.5 Сообщение

4. Описание контрольного примера

5. Листинг программы

Библиографический список

1. Описание программы

1.1 Общие сведения

Программа: «Оптимизация функции одной переменной методом дихотомии»

Программное обеспечение, необходимое для функционирования программы:

Операционная среда Windows 95/98/Me/2k/XP

Microsoft Visual Studio 2005

Среда разработки - Microsoft Visual Studio 2005

Программа написана на языке C++

1.2 Функциональное назначение

Программа предназначена для поиска минимума и максимума функции на заданном интервале. Используется для функций вида с максимальной степенью х, равной 5.

1.3 Описание логической структуры

Алгоритм:

Положим, что xn = . Длина отрезка L = (|B| - |A|). Вычислим f(xn).

x1 = A + ,x2 = B - . Вычисляем f(x1) и f(x2).

Если f(x1) < f(xn), то исключаем интервал [xn,B], для этого B = xn, xn = x1. Переход к шагу 5. Иначе к шагу 4.

Если f(x2) < f(xn), то исключаем интервал [A,xn] для этого A = xn, xn = x2. Переход к шагу 5. Иначе исключаем интервалы [A,x1] [x2,B], для этого A = x1, B = x2.

Вычисляем L = B - A. Если L ? е, то конец алгоритма. Иначе переход к шагу 2.

Окончание алгоритма включает в себя x* = xm, f (x*) = f(xm)

Логическая структура:

5 функций:

1. main() - главная функция

Основные задачи:

- Диалог с пользователем

- Ввод коэффициентов, интервала и точности

- Вывод результата

2. menu() - функция, типа void. Назначение - текст главного меню программы.

3. out() - функция, типа void. Назначение - вывод данных на экран.

4. dihotomy() - функция, типа double. Назначение - выполнение алгоритма.

5. func() - функция, типа double. Назначение - функция f(x).

Связь программы с другими программами:

Операционная система

Файловая система

1.4 Используемые технические средства

При написании программы использовался компьютер:

Процессор - Intel Core 2 Duo E8400, 4050 MHz (9 x 450)

ОЗУ - 4096Мб.

Видеоадаптер - ATI Radeon HD 4850 (512 Мб)

Минимальный набор периферийного оборудования.

Минимальные требования:

Процессор Intel Pentium II.

Наличие не менее 16Mб ОЗУ.

Наличие не менее 1Мб свободного дискового пространства.

SVGA - графический адаптер.

Минимальный набор периферийного оборудования.

1.5 Вызов и загрузка

Для начала работы программы необходимо запустить файл dichotomy.exe

1.6 Входные и выходные данные

Входные данные:

1. Коэффициенты функции (a0,а1,а2,a3,а4,а5) - действительные числа

2. Интервал поиска - действительные числа

3. Точность - пользователь может указать точность большую 0,000001

Выходные данные:

Значение максимума и минимума.

2. Описание применения

2.1 Назначение программы

Программа предназначена для поиска минимума и максимума функции на заданном интервале. Используется для функций вида с максимальной степенью х, равной 5.

2.2 Условия применения

Минимальные требования:

Процессор Intel Pentium II.

Наличие не менее 16Mб ОЗУ.

Наличие не менее 1Мб свободного дискового пространства.

SVGA - графический адаптер.

Минимальный набор периферийного оборудования.

Программное обеспечение, необходимое для функционирования программы:

Операционная среда Windows 95/98/Me/2k/XP

Microsoft Visual Studio 2005

2.3 Описание задачи

Задача:

Найти минимум и максимум функции на заданном интервале для функций вида с максимальной степенью х, равной 5.

Математическая постановка и решение задачи:

Одним из методов оптимизации является метод дихотомии.

Положим, что xn = . Длина отрезка L = (|B| - |A|). Вычислим f(xn).

x1 = A + ,x2 = B - . Вычисляем f(x1) и f(x2).

Если f(x1) < f(xn), то исключаем интервал [xn,B], для этого B = xn, xn = x1. Переход к шагу 5. Иначе к шагу 4.

Если f(x2) < f(xn), то исключаем интервал [A,xn] для этого A = xn, xn = x2. Переход к шагу 5. Иначе исключаем интервалы [A,x1] [x2,B], для этого A = x1, B = x2.

Вычисляем L = B - A. Если L ? е, то конец алгоритма. Иначе переход к шагу 2.

Окончание алгоритма включает в себя x* = xm, f (x*) = f(xm)

2.4 Входные и выходные данные

Входные данные:

1. Коэффициенты функции (a0,а1,а2,a3,а4,а5) - действительные числа

2. Интервал поиска - действительные числа

3. Точность - пользователь может указать точность большую 0,000001

Выходные данные:

Значение максимума и минимума.

3. Руководство программиста

3.1 Назначение и условия применения программы

Назначение программы:

Программа предназначена для поиска минимума и максимума функции на заданном интервале. Используется для функций вида с максимальной степенью х, равной 5.

Минимальные требования:

Процессор Intel Pentium II.

Наличие не менее 16Mб ОЗУ.

Наличие не менее 1Мб свободного дискового пространства.

SVGA - графический адаптер.

Минимальный набор периферийного оборудования.

Программное обеспечение, необходимое для функционирования программы:

Операционная среда Windows 95/98/Me/2k/XP

Microsoft Visual Studio 2005

3.2 Характеристики программы

Для выполнения программы требуется сравнительно небольшой промежуток времени.

В программе присутствует проверка введенных данных, что позволяет предопределить возможные ошибки и оповестить об этом пользователя

3.3 Обращение к программе

Для начала работы программы необходимо запустить файл dichotomy.exe

3.4 Входные и выходные данные

Входные данные:

1. Коэффициенты функции (a0,а1,а2,a3,а4,а5) - действительные числа

2. Интервал поиска - действительные числа

3. Точность - пользователь может указать точность большую 0,000001

Выходные данные:

Значение максимума и минимума.

3.5 Сообщения

Сообщения, выводимые пользователю:

(1) Введен неверный интервал!

Причины возникновения:

- левая граница больше правой

- левая граница равна правой

(2) Введена неверная точность!

Причины возникновения:

- Введена неверная точность

4. Описание контрольного примера

В качестве контрольного примера рассмотрим работу программы с функцией f (x) = 2 + 3 - 2 + 4+ 8

Интервал поиска: [-6; 7]

Точность: 0,01

Результат обработки контрольного примера (Рис.1)

Проверим правильность расчетов:

Минимум функции (Рис.2)

Таким образом, графически проверена правильность вычислений.

5. Листинг программы

#include "stdafx.h"

#include <locale.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#include <stdio.h>

//-------------------------------------------------------------------

void menu();

void out(const char*,double);

double func(double,double,double,double,double,double,double);

double dihotomy(double,double,int,double,double,double,double,double,double,double);

//-------------------------------------------------------------------

void main()

{

setlocale(LC_ALL, "rus");

system("color 71");

double A,B,t,a0,a1,a2,a3,a4,a5,mn,mx;

char NumberOfAction;

int resultCase=1;

while(resultCase!=0)

{

do

{

menu();

NumberOfAction=getch();

}

while (NumberOfAction!='1' && NumberOfAction!='2' && NumberOfAction!='3' && NumberOfAction!='4' && NumberOfAction!='e');

switch (NumberOfAction)

{

//case '1' (ввод интервала)

case '1':

system("cls");

system("echo ----------------------------------------------------------");

printf("Введите интервал поиска:");

printf("\nA:\t");scanf("%lf",&A);

printf("B:\t");scanf("%lf",&B);

if (A==B || A>=B)

{

printf("\nВведен неверный интервал!\n\n");

system("pause");

exit(1);

}

system("cls");

break;

//case '2' (ввод коэффициэнтов)

case '2':

system("cls");

system("echo ----------------------------------------------------------");

printf("Введите коэффициэнт при X^5:\t");scanf("%lf",&a0);

printf("\nВведите коэффициэнт при X^4:\t");scanf("%lf",&a1);

printf("\nВведите коэффициэнт при X^3:\t");scanf("%lf",&a2);

printf("\nВведите коэффициэнт при X^2:\t");scanf("%lf",&a3);

printf("\nВведите коэффициэнт при X:\t");scanf("%lf",&a4);

printf("\nВведите коэффициэнт C:\t\t");scanf("%lf",&a5);

system("cls");

break;

//case '3' (ввод точности)

case '3':

system("cls");

system("echo ----------------------------------------------------------");

printf("Введите точность:\t");scanf("%lf",&t);

if (t<0.000001)

{

printf("\nВведена неверная точность!\n\n");

system("pause");

exit(1);

}

mx=dihotomy(A,B,-1,a0,a1,a2,a3,a4,a5,t);

mn=dihotomy(A,B,1,a0,a1,a2,a3,a4,a5,t);

system("cls");

break;

//case '4' (вывод ответа на экран)

case '4':

system("cls");

system("echo ----------------------------------------------------------");

printf("Интервал:");

out("\t(%lg,",A);out("%lg)\n\n",B);

printf("Точность:\t");

out("%lf\n\n",t);

printf("Ответ:\n\n");

out("MAX(x)=\t%lg\n",func(mx,a0,a1,a2,a3,a4,a5));out("x=\t%lg\n\n",mx);

out("MIN(x)=\t%lg\n",func(mn,a0,a1,a2,a3,a4,a5));out("x2=\t%lg",mn);

getch();

system("cls");

break;

//case 'e' (exit - выход)

case 'e':

printf("\n\nДля выхода из программы нажмите любую клавишу...");

getch();

exit(1);

break;

}

}

}

//-------------------------------------------------------------------

void menu()

{

system("echo ----------------------------------------------------------");

system("echo Кнопка 1 - Ввод интервала");

system("echo Кнопка 2 - Ввод коэффициэнтов");

system("echo Кнопка 3 - Ввод точности");

system("echo Кнопка 4 - Вывод ответа на экран");

system("echo ----------------------------------------------------------");

system("echo Кнопка e - Выход");

system("echo ----------------------------------------------------------");

}

//-------------------------------------------------------------------

void out(const char *format,double value)

{

printf(format,value);

}

//-------------------------------------------------------------------

double func(double x,double a0,double a1,double a2,double a3,double a4,double a5)//F(x)

{

return (a0*x*x*x*x*x + a1*x*x*x*x + a2*x*x*x + a3*x*x + a4*x + a5);

}

//-------------------------------------------------------------------

double dihotomy(double A, double B, int m,double a0,double a1,double a2,double a3,double a4,double a5,double t)//дихотомия

{

double L=abs(B-A);

double xn=(A+B)/2;

while (L>t)

{

double fn=m*func(xn,a0,a1,a2,a3,a4,a5);

double x1=A+L/4;

double x2=B-L/4;

double f1=m*func(x1,a0,a1,a2,a3,a4,a5);

double f2=m*func(x2,a0,a1,a2,a3,a4,a5);

if(f1<fn)

{

B=xn;

xn=x1;

L=B-A;

}

else if(f2<fn)

{

A=xn;

xn=x2;

L=B-A;

}

else if((f1>=fn) && (f2>=fn))

{

A=x1;

B=x2;

L=B-A;

}

}

return xn;

}

Библиографический список

программа функция оптимизация листинг

Бахвалов Н.С., Жидков Н.П., Кобельков Г.Г. Численные методы. -- 8-е изд. -- М.: Лаборатория Базовых Знаний, 2000.

Ананий В. Левитин Глава 11. Преодоление ограничений: Метод деления пополам. -- М.: «Вильямс», 2006. -- С. 476-480.

Размещено на Allbest.ru


Подобные документы

  • Функциональное назначение и область применения программы "Локальный сетевой чат"; логическая структура, технические и программные средства. Требования к программе; характеристика, вызов и загрузка, входные и выходные данные, настройка, интерфейс.

    дипломная работа [1,3 M], добавлен 18.10.2013

  • Общие сведения о программном средстве по моделированию работы электродвигателя, его функциональное назначение. Описание логической структуры программного обеспечения. Вызов программы modelDPR52, ее загрузка, входные и выходные данные. Листинг программы.

    курсовая работа [420,0 K], добавлен 28.05.2012

  • Средства программирования, описание языка С++. Назначение программы, требования к документации. Стадии разработки, виды испытаний. Используемые технические, программные средства. Вызов и загрузка, входные и выходные данные. Программа и методика испытаний.

    контрольная работа [205,3 K], добавлен 23.07.2013

  • Разработка информационно-поисковой системы "Музыкальный магазин". Характеристика языка Delphi 7. Функциональное назначение, область применения, используемые технические средства. Описание логической структуры. Вызов, загрузка, входные и выходные данные.

    курсовая работа [6,4 M], добавлен 07.04.2014

  • Технико-математическое описание задачи. Требования к программе учета книг и читателей библиотеки. Описание языка программирования. Алгоритмы обработки информации. Текст программы. Инструкция на выполнение: вызов и загрузка, входные и выходные данные.

    дипломная работа [1,2 M], добавлен 29.06.2012

  • Особенности метода численного интегрирования функции одной переменной. Замена на каждом элементарном отрезке подынтегральной функции на многочлен первой степени (линейную функцию). Разработка алгоритма программы, ее листинг. Пример работы программы.

    контрольная работа [217,9 K], добавлен 14.07.2012

  • Общие сведения о языке ассемблера. Назначение команды прерывания INT число. Описание логической структуры программы: алгоритм работы, используемые методы, входные и выходные данные. Структура и тестирование программы. Руководство оператора программы.

    курсовая работа [90,0 K], добавлен 01.12.2009

  • Методологическая основа моделирования – диалектико-математический метод познания и научного исследования. Назначение и условия применения программы. Описание задачи и логической структуры программы. Используемые технические средства, вызов и загрузка.

    курсовая работа [311,8 K], добавлен 06.01.2009

  • Изучение категории типов данных, видов выражений и операций, работа на языке Си. Составление программы вычисления значения функции у(х) при произвольном значении х. Блок-схема алгоритма. Описание текста программы и рассмотрение контрольного примера.

    лабораторная работа [124,7 K], добавлен 09.01.2012

  • Математическое описание, алгоритм и программа вычисления определенного интеграла методом трапеций. Расчет n-значений исследуемой функции и вывод их в виде таблицы. Технические и программные средства. Входные и выходные данные, функциональное назначение.

    курсовая работа [21,0 K], добавлен 03.01.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.