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

Программная реализация приложения для вычисления заданных функций. Процедура поиска минимума функции. Применение методов Хука-Дживса и градиентного спуска для решения задачи. Исследование функции в окрестности базисной точки, определение ее координат.

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

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

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

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

19

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

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

ФАКУЛЬТЕТ ВЕЧЕРНЕГО И ЗАОЧНОГО ОБУЧЕНИЯ

КАФЕДРА Автоматизированные и вычислительные системы

КОНТРОЛЬНАЯ РАБОТА

по дисциплине “Нелинейное программирование”

Выполнил:

ст. гр. ВМ-101

Машинистов К.Ю.

Проверил:

Сергеева Т.И.

ВОРОНЕЖ 2013

КОНТРОЛЬНОЕ ЗАДАНИЕ №1

Таблица 1

Номер варианта

Функция

a

b

E

6

F(x) = -3·e-x·ln(2·x)

0.5

2.5

0.001

Решение:

unit Z_6;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Button2: TButton;

Memo1: TMemo;

Memo2: TMemo;

Label9: TLabel;

procedure Button2Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);

begin

Form1.Close;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

If Key=#13 then

begin

Key:=#0;

Edit2.SetFocus;

end;

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

If Key=#13 then

begin

Key:=#0;

Edit3.SetFocus;

end;

end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);

const fi=1.618;

var a,b,e,x1,x2,y1,y2,rez:real;

s:string;

begin

If Key=#13 then

begin

Memo1.Lines.Clear;

Memo2.Lines.Clear;

Key:=#0;

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

e:=StrToFloat(Edit3.Text);

x1:=b-(b-a)/fi;

x2:=a+(b-a)/fi;

y1:=-3*exp(-x1)*ln(2*x1);

y2:=-3*exp(-x2)*ln(2*x2);

repeat

begin

if y1<=y2 then

begin

b:=x2; x2:=x1; y2:=y1;

x1:=b-(b-a)/fi; y1:=-3*exp(-x1)*ln(2*x1);

end

else

begin

a:=x1; x1:=x2; y1:=y2;

x2:=a+(b-a)/fi; y2:=-3*exp(-x2)*ln(2*x2);

end;

rez:= (x1+x2)/2;

s:=FloatToStr(rez);

Label9.Caption:=s;

s:=FloatToStr(x1);

Memo1.Lines.Add(s);

s:=FloatToStr(x2);

Memo2.Lines.Add(s);

end;

until abs(b-a)<e;

end;

end;

end.

КОНТРОЛЬНОЕ ЗАДАНИЕ №2

программный градиентный спуск координата

Таблица 2

№ варианта

Функция

X

H

Xmin

6

F(x1, x2) = (x12 + x2 + 10)2 + (x1 + x22 - 122)2

(-10, -1)

1

(1, -11)

Решение:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

t=array[1..2] of double;

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

ListBox1: TListBox;

Button2: TButton;

Edit5: TEdit;

Label5: TLabel;

procedure Button2Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit5KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

{Процедура поиска минимума}

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);

var

x,b,y,p:t; {массивы для точек}

h, k, fi, fb:double; {h, k - шаг, fi - значение функции,

fb - значение функции в базовой точке}

e, a:boolean;

i,fe:integer;

{функция, минимум которой требуется найти}

function F(x1, x2:double):double;

begin

f:=sqr(sqr(x1)+x2+10)+sqr(x1+sqr(x2)-122);

fe:=fe+1;

end;

{процедура вывода на экран координат очередной

найденной точки}

procedure printrezult;

begin

listbox1.Items.Add('Точка');

listbox1.Items.Add(FloatToStrF(x[1], ffFixed, 3, 3)+

';'+FloatToStrF(x[2], ffFixed, 3, 3));

listbox1.Items.Add('f(x1,x2)='+FloatToStr(fi));

listbox1.Items.Add('');

end;

begin

If Key=#13 then

begin

Key:=#0;

{ Введённые данные переводим из строки в число}

x[1]:=strtofloat(edit1.Text);

x[2]:=strtofloat(edit2.Text);

h:=strtofloat(edit5.Text);

{Начальные значения}

fe:=0;

k:=h;

y:=x;

p:=x;

b:=x;

{Начальное значение функции}

fi:=F(x[1], x[2]);

listbox1.Items.Add('Начальное значение функции');

printrezult;

{Признак исследования функции вокруг базисной точки }

a:=true; fb:=fi; e:=false;

while not e do

begin

{Исследование функции в окрестности базисной точки}

for i:=1 to 2 do

begin

x[i]:=y[i]+k;

if F(x[1], x[2])>fi then

begin

x[i]:=y[i]-k;

if F(x[1], x[2])>fi then x[i]:=y[i] else y[i]:=x[i];

end

else

begin

y[i]:=x[i];

end;

fi:=F(x[1], x[2]);

listbox1.Items.Add('Исследующий поиск');

printrezult;

end;

{Если функция уменьшилась, то поиск по образцу }

if (fi<fb-0.00000001) then

begin

//поиск по образцу

for i:=1 to 2 do p[i]:=2*(y[i]-b[i])+b[i];

b:=y;

x:=p;

y:=p;

fb:=fi; a:=false;

fi:=F(x[1], x[2]);

listbox1.Items.Add('Поиск по образцу');

printrezult;

end

else

begin

if a then

begin

k:=k/10;

//listbox1.Items.Add('Уменьшить длину шага');

//Завершить вычисления, если шаг достаточно мал

e:=k<0.00000001;

end

else

begin

p:=b;

y:=b;

x:=b;

a:=true;

fi:=F(x[1], x[2]); fb:=fi;

listbox1.Items.Add('Замена базисной точки');

printrezult;

end;

end;

end;

// Результат

listbox1.Items.Add('Минимум найден');

printrezult;

listbox1.Items.Add('Кол-во вычислений:'+IntToStr(fe));

end;

end;

// Выход

procedure TForm1.Button2Click(Sender: TObject);

begin

close;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

If Key=#13 then

begin

Key:=#0;

Edit2.SetFocus;

end;

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

If Key=#13 then

begin

Key:=#0;

Edit5.SetFocus;

end;

end;

end.

КОНТРОЛЬНОЕ ЗАДАНИЕ №3

Таблица 3

№ вар.

Функция

X

H

Xmin

6

F(x1..x4) = (x1+7)2 + 2*(x2-7)2 + 3*(x3+7)2 + 4*(x4-7)2

(4,-1,4,-1)

4

(-7,7,-7,7)

Решение:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

const

// число переменных функции

n=4;

type

// тип для массивов с координатами

vector=array[1..n] of double;

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Button1: TButton;

ListBox1: TListBox;

Label4: TLabel;

Edit4: TEdit;

Edit5: TEdit;

Label5: TLabel;

procedure Button1Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Edit4KeyPress(Sender: TObject; var Key: Char);

procedure Edit5KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

procedure Rezultat(x:vector);

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//Функция

function F(x:vector):double;

begin

f:=sqr(x[1]+7)+2*sqr(x[2]-7)+3*sqr(x[3]+7)+4*sqr(x[4]-7);

end;

//Выход

procedure TForm1.Button1Click(Sender: TObject);

begin

close;

end;

// вывод координат точки и значения функции в этой точке

procedure TForm1.Rezultat(x:vector);

begin

listbox1.Items.Add('F('+floattostrf(x[1],fffixed,8,3)+','+

floattostrf(x[2],fffixed,8,3)+','+floattostrf(x[3],fffixed,8,3)+

','+floattostrf(x[4],fffixed,8,3)+')='+

floattostrf(f(x),fffixed,8,3));

end;

// Основные вычисления

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

If Key=#13 then

begin

Key:=#0;

Edit2.SetFocus;

end;

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

If Key=#13 then

begin

Key:=#0;

Edit3.SetFocus;

end;

end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);

begin

If Key=#13 then

begin

Key:=#0;

Edit4.SetFocus;

end;

end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);

begin

If Key=#13 then

begin

Key:=#0;

Edit5.SetFocus;

end;

end;

// Основные вычисления

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);

var

x, x1, xr, rx, g:vector;

k, m, i:integer;

t, e1, e2, mmm, mmm1, u, u1, u2:double;

prizn, prizn1:boolean;

begin

If Key=#13 then

begin

Key:=#0;

//считывание данных

x[1]:=strtoint(edit1.Text);

x[2]:=strtoint(edit2.Text);

x[3]:=strtoint(edit3.Text);

x[4]:=strtoint(edit4.Text);

t:=strtoint(edit5.Text);

//Точность и начальные значения

e1:=0.0001;

e2:=0.0015;

m:=100;

k:=0;

prizn:=false;

while not prizn do

begin

//вывод текущей точки и номера итерации

rezultat(x);

// расчёт градиента (массив g) в точке x.

for i:=1 to n do

x1[i]:=x[i];

for i:=1 to n do

begin

x1[i]:=x1[i]+e1;

g[i]:=(f(x1)-f(x))/e1;

x1[i]:=x[i];

end;

//mmm = модуль градиента

mmm:=0;

for i:=1 to n do

mmm:=mmm+sqr(g[i]);

mmm:=sqrt(mmm);

if mmm<e1 then

begin

//если модуль градиента меньше установленной точности,

// то установить флаг окончания поиска

prizn:=true;

// и подготовить массив xr с координатами точки результата

for i:=1 to n do

xr[i]:=x[i];

end

else

begin

if k>=m then

begin

//если число итераций превысило допустимое,

// то установить флаг окончания поиска

prizn:=true;

// массив xr с координатами точки результата

for i:=1 to n do

xr[i]:=x[i];

end

else

begin

//Установить точку x1 равную x

for i:=1 to n do

x1[i]:=x[i];

// признак, что функция в точке x1 < чем в x

prizn1:=false;

while not prizn1 do

begin

// сместить x1 в направлении градиента на текущий шаг t

for i:=1 to n do

x1[i]:=x1[i]-t*g[i];

u1:=f(x1); u2:=f(x); u:=u1-u2;

if u<0 then

begin

//если функция в точке x1 < чем в x, то установить соответствующий признак

prizn1:=true;

end

else

begin

//если функция в точке x1 < чем в x, то

//уменьшить шаг в 10 раз

t:=t/10;

// установить точку x1 равную x

for i:=1 to n do

x1[i]:=x[i];

end;

end;

//формирование вектора rx из точки x в точку x1

for i:=1 to n do

rx[i]:=x1[i]-x[i];

//mmm1 = модуль вектора rx

mmm1:=0;

for i:=1 to n do

mmm1:=mmm1+sqr(rx[i]);

mmm1:=sqrt(mmm1);

u1:=f(x1);

u2:=f(x);

u:=u1-u2;

if (mmm1<e2) and (abs(u)<e2) then

begin

//если модуль вектора rx меньше установленной точности

//и разность значений функции в точках x и x1 также меньше установленной точности

// то установить флаг окончания поиска

prizn:=true;

// и подготовить массив xr с координатами точки результата

for i:=1 to n do

xr[i]:=x1[i];

end

else

begin

// иначе

// увеличить счётчик итераций на 1

k:=k+1;

// установить точку x равную x1

for i:=1 to n do

x[i]:=x1[i];

end;

end;

end;

end;

//вывод результата - точки xr

rezultat(xr);

end;

end;

end.

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


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

  • Математические и алгоритмические основы решения задачи. Функциональные модели и блок-схемы решения задачи. Программная реализация решения задачи. ЛИСП-реализация вычисления неэлементарных функций. Вычисления гамма функции для положительных неизвестных х.

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

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

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

  • Разработка различных программ для вычисления X и Y по формуле, для вычисления интеграла, для вычисления таблицы значений функции и для вычисления элементов вектора. Составление блок-схемы программы. Ввод значений, описание переменных и условия расчета.

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

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

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

  • Численные методы в задачах без ограничений. Схема методов спуска. Среда редактора Visual Basic. Использование объектов ActiveX в формах. Блок-схема алгоритма моделирования. Задачи оптимизирования детерменированных функций с единственной точкой экстремума.

    курсовая работа [129,5 K], добавлен 26.04.2010

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

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

  • Методы и алгоритмы вычисления определенных интегралов: метод трапеций и метод Симпсона (метод парабол). Оформление функции вычисления заданного определённого интеграла на Visual Basic 6.0. Программный код функции. Создание приложения для вычисления.

    курсовая работа [483,6 K], добавлен 25.06.2014

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

    курсовая работа [595,4 K], добавлен 13.01.2014

  • Нахождение стационарной точки. Расчет безусловного экстремума функции методами прямого поиска. Графическое пояснение метода равномерного симплекса. Метод поиска Хука-Дживса. Метод сопряженных направлений Пауэлла. Разработка программного модуля расчетов.

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

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

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

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