Методы оптимизации

Определение минимума функции на заданном отрезке методами перебора, поразрядного поиска, дихотомии, золотого сечения и методом парабол. Нахождение и расчет нулей функции методом Ньютона. Построение графика данной функции, ее минимальное значение.

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

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

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

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

Министерство образования и науки Российской Федерации

САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИМЕНИ Н.Г. ЧЕРНЫШЕВСКОГО

Кафедра дискретной математики и информационных технологий

РЕФЕРАТ

На тему: «Методы оптимизации»

Студента 2 курса, 221гр.

дневного отделения факультета КНиИТ

Барышева Андрея Вячеславовича

Преподаватель: Тананко И. Е.

Саратов, 2013

Задание

Дана функция f(x) = x3 - 3*sin(x), необходимо определить минимум данной функции на отрезке [0, 1] методами перебора, поразрядного поиска, дихотомии, золотого сечения, парабол и найти нули функции методом Ньютона. Своё минимальное значение f(x) = -1.64213 функция принимает при x = 0.824132.

график функция парабола

1. Метод перебора

Реализация метода на C++

#include <iostream>

#include <math.h>

using namespace std;

double func(double x)

{

return pow(x, 3) - 3*sin(x);

}

int main()

{

double a=0, b=1;

double x, y;

int n;

cout << "n = ";

cin >> n;

y=func(a);

for (int i=1; i<=n; i++)

{

x=a+i*(b-a)/(n+1);

if(func(x)<y)

y=func(x);

}

cout << endl;

cout << "e = " << (b-a)/(n+1) << endl;

cout << "x = " << x << endl;

cout << "y = " << y << endl;

return 0;

}

При e=0.001 (n=1000) программа выводит x=0.999 y=-1.64213.

2. Метод поразрядного поиска

Реализация метода на C++

#include <iostream>

#include <math.h>

#include <stdlib.h>

using namespace std;

double func(double x)

{

return pow(x, 3) - 3*sin(x);

}

int main()

{

double a=0, b=1;

double x, y, sh, x0, x1, f0, f1, e;

cout << "e = ";

cin >> e;

sh=(b-a)/4;

x0=a;

f0=func(x0);

label:

x1=x0+sh;

f1=func(x1);

if(f0>=f1)

{

x0=x1;

f0=f1;

if(a<=x0 && x0<=b)

goto label;

}

if(fabs(sh)<=e)

{

x=x0;

y=func(x0);

}

else

{

x0=x1;

f0=f1;

sh=-sh/4;

goto label;

}

cout << endl;

cout << "x = " << x << endl;

cout << "y = " << y << endl;

return 0;

}

При e=0.001 программа выводит x=0.824219 y=-1.64213.

3. Метод дихотомии

Реализация метода на C++

#include <iostream>

#include <math.h>

using namespace std;

double func(double x)

{

return pow(x, 3) - 3*sin(x);

}

int main()

{

double a=0, b=1, s=0.0001;

double x1, x2, e, en, x, y;

cout << "e = ";

cin >> e;

do

{

x1=(b+a-s)/2;

x2=(b+a+s)/2;

if(func(x1)<=func(x2))

b=x2;

else

a=x1;

en=(b-a)/2;

}

while(en>e);

x=(a+b)/2;

y=func(x);

cout << endl;

cout << "x = " << x << endl;

cout << "y = " << y << endl;

return 0;

}

При e=0.001 программа выводит x=0.8236 y=-1.64213.

4. Метод золотого сечения

Реализация метода на C++

#include <iostream>

#include <math.h>

using namespace std;

double func(double x)

{

return pow(x, 3) - 3*sin(x);

}

int main()

{

double a=0, b=1;

double x1, x2, fx1, fx2, t, e, en, x, y;

cout << "e = ";

cin >> e;

x1=a+(3-sqrt(5))*(b-a)/2;

x2=a+(sqrt(5)-1)*(b-a)/2;

fx1=func(x1);

fx2=func(x2);

t=(sqrt(5)-1)/2;

en=(b-a)/2;

while(en>e)

{

if(fx1<=fx2)

{

b=x2;

x2=x1;

fx2=fx1;

x1=b-t*(b-a);

fx1=func(x1);

}

else

{

a=x1;

x1=x2;

fx1=fx2;

x2=b-t*(b-a);

fx2=func(x2);

}

en=t*en;

}

x=(a+b)/2;

y=func(x);

cout << endl;

cout << "x = " << x << endl;

cout << "y = " << y << endl;

return 0;

}

При e=0.001 программа выводит x=0.5 y=-1.31334.

5. Метод парабол

Реализация метода на C++

#include <iostream>

#include <math.h>

#include <stdlib.h>

using namespace std;

double func(double x)

{

return pow(x, 3) - 3*sin(x);

}

int main()

{

double a=0, b=1;

double x1, x2, x3, f1, f2, f3, a1, a2, x, fx, xp, e;

cout << "e = ";

cin >> e;

x1=a;

x2=(a+b)/2;

x3=b;

x=0;

f1=func(x1);

f2=func(x2);

f3=func(x3);

do

{

xp=x;

a1=(f2-f1)/(x2-x1);

a2=(1/(x3-x2))*( (f3-f1)/(x3-x1) - (f2-f1)/(x2-x1) );

x=0.5*(x1+x2-(a1/a2));

fx=func(x);

if(x1<x<x2<x3)

if(fx>=f2)

{

x1=x;

f1=func(x1);

}

else

{

x3=x2;

x2=x;

f2=func(x2);

f3=func(x3);

}

else if(x1<x2<x<x3)

if(fx>=f2)

{

x3=x;

f3=func(x3);

}

else

{

x1=x2;

x2=x;

f1=func(x1);

f2=func(x2);

}

}

while(abs(xp-x)>e);

cout << endl;

cout << "x = " << x << endl;

cout << "y = " << fx << endl;

return 0;

}

При e=0.001 программа выводит x=0.845785 y=-1.64044.

6. Метод Ньютона нахождения нулей функции

Реализация метода на C++

#include <iostream>

#include <math.h>

#include <stdlib.h>

using namespace std;

double func(double x)

{

return pow(x, 3) - 3*sin(x);

}

double dfunc(double x) //производная функции func()

{

return 3*pow(x, 2) - 3*cos(x);

}

int main()

{

double a=0, b=1;

double x, x0, e;

cout << "x0 = ";

cin >> x0; //начальное приближение

cout << "e = ";

cin >> e; //

x=x0;

while(abs(func(x))>e)

x=x-func(x)/dfunc(x);

cout << endl;

cout << "x = " << x << endl;

return 0;

}

При x=0.1 e=0.001 программа выводит x=0.1.

Размещено на www.allbest.


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

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

    контрольная работа [316,1 K], добавлен 13.11.2014

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

    курсовая работа [1,2 M], добавлен 23.02.2014

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

    реферат [112,0 K], добавлен 14.06.2010

  • Задачи оптимизации в математике и информатике. Классификация методов оптимизации. Методы с переменной метрикой. Значение функции на заданном интервале. Локальный минимум функции. Методы минимизации функции. Классификация методов многомерной оптимизации.

    курсовая работа [1,5 M], добавлен 19.06.2012

  • Расчет и построение таблицы значений функции (протабулирование функции) при различных значениях аргумента. Нахождение наибольшего и наименьшего значений функции на отрезке и построение графика. Рабочий лист Excel в режимах отображения значений и формул.

    контрольная работа [30,0 K], добавлен 27.05.2010

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

    отчет по практике [725,6 K], добавлен 01.10.2013

  • Основные методы и алгоритмы исследования. Нахождение минимума среднеквадратичного отклонения. Особенности решения нормальных уравнений. Параметры линейной аппроксимирующей функции. Расчет значений аппроксимирующей функции и среднеквадратичного уклонения.

    курсовая работа [749,3 K], добавлен 08.06.2019

  • Численные методы решения нелинейных уравнений, используемых в прикладных задачах. Составление логической схемы алгоритма, таблицы индентификаторов и программы нахождения корня уравнения методом дихотомии и методом Ньютона. Ввод программы в компьютер.

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

  • Постановка задачи. Математические и алгоритмические основы решения. Функциональные модели и блок-схемы решения. Программная реализация решения. Пример выполнения программы. Методы, использующие исключение отрезков. Учет информации о значениях функции.

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

  • Математическое описание, алгоритм и программа вычисления нелинейного уравнения методом дихотомии. Метод половинного деления. Метод поиска корней функции. Написание текста программы с комментариями. Проведение тестовых расчетов. Вывод ответа на экран.

    курсовая работа [67,2 K], добавлен 15.02.2016

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