Разработка программы для оптимизации функции одной переменной методом дихотомии
Описание и функциональное назначение программы по оптимизации функции, ее логическая структура и используемые технические средства. Практическое применение программы, вызов и загрузка, входные и выходные данные, выполнение контрольного примера и листинг.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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