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

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    607,01 Кб
  • Опубликовано:
    2013-11-22
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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

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

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

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








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

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



Выполнил:

ст. гр. ВМ-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;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;= class(TForm): TLabel;: TLabel;: TLabel;: TEdit;: TEdit;: TEdit;: TLabel;: TLabel;: TLabel;: TLabel;: TButton;: TMemo;: TMemo;: TLabel;Button2Click(Sender: TObject);Edit1KeyPress(Sender: TObject; var Key: Char);Edit2KeyPress(Sender: TObject; var Key: Char);Edit3KeyPress(Sender: TObject; var Key: Char);

{ Private declarations }

{ Public declarations };: TForm1;

{$R *.dfm}TForm1.Button2Click(Sender: TObject);.Close;;TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);Key=#13 then:=#0;.SetFocus;;;TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);Key=#13 then:=#0;.SetFocus;;;TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);

const fi=1.618;a,b,e,x1,x2,y1,y2,rez:real;

s:string;Key=#13 then.Lines.Clear;.Lines.Clear;:=#0;:=StrToFloat(Edit1.Text);:=StrToFloat(Edit2.Text);:=StrToFloat(Edit3.Text);:=b-(b-a)/fi;:=a+(b-a)/fi;

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

repeaty1<=y2 then

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

end:=x1; x1:=x2; y1:=y2;:=a+(b-a)/fi; y2:=-3*exp(-x2)*ln(2*x2);;:= (x1+x2)/2;:=FloatToStr(rez);.Caption:=s;:=FloatToStr(x1);.Lines.Add(s);:=FloatToStr(x2);.Lines.Add(s);;abs(b-a)<e;;;.

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

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

Таблица 2

№ варианта

Функция

X

H

Xmin

6

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

(-10, -1)

1

(1, -11)


Решение:Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;=array[1..2] of double;= class(TForm): TLabel;: TLabel;: TEdit;: TEdit;: TListBox;: TButton;: TEdit;: TLabel;Button2Click(Sender: TObject);Edit1KeyPress(Sender: TObject; var Key: Char);Edit2KeyPress(Sender: TObject; var Key: Char);Edit5KeyPress(Sender: TObject; var Key: Char);

{ Private declarations }

{ Public declarations };: TForm1;

{$R *.dfm}

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

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

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

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

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

e, a:boolean;,fe:integer;

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

function F(x1, x2:double):double;:=sqr(sqr(x1)+x2+10)+sqr(x1+sqr(x2)-122);:=fe+1;

end;

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

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

procedure printrezult;

begin

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

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

';'+FloatToStrF(x[2], ffFixed, 3, 3));.Items.Add('f(x1,x2)='+FloatToStr(fi));.Items.Add('');;Key=#13 then:=#0;

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

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

fe:=0;:=h;:=x;:=x;:=x;

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

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

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

printrezult;

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

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

begin

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

for i:=1 to 2 do[i]:=y[i]+k;F(x[1], x[2])>fi then[i]:=y[i]-k;F(x[1], x[2])>fi then x[i]:=y[i] else y[i]:=x[i];[i]:=x[i];;:=F(x[1], x[2]);.Items.Add('Исследующий поиск');;

end;

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

if (fi<fb-0.00000001) then

//поиск по образцуi:=1 to 2 do p[i]:=2*(y[i]-b[i])+b[i];

b:=y;:=p;:=p;:=fi; a:=false;:=F(x[1], x[2]);.Items.Add('Поиск по образцу');

printrezult;a then:=k/10;

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

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

e:=k<0.00000001;:=b;:=b;:=b;:=true;:=F(x[1], x[2]); fb:=fi;.Items.Add('Замена базисной точки');;;;;

// Результат.Items.Add('Минимум найден');;.Items.Add('Кол-во вычислений:'+IntToStr(fe));;;

// ВыходTForm1.Button2Click(Sender: TObject);;;TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);Key=#13 then:=#0;.SetFocus;;;TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);Key=#13 then:=#0;.SetFocus;;;.


КОНТРОЛЬНОЕ ЗАДАНИЕ №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)


Решение:Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;

const

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

n=4;

type

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

vector=array[1..n] of double;= class(TForm): TLabel;: TLabel;: TLabel;: TEdit;: TEdit;: TEdit;: TButton;: TListBox;: TLabel;: TEdit;: TEdit;: TLabel;Button1Click(Sender: TObject);Edit1KeyPress(Sender: TObject; var Key: Char);Edit2KeyPress(Sender: TObject; var Key: Char);Edit3KeyPress(Sender: TObject; var Key: Char);Edit4KeyPress(Sender: TObject; var Key: Char);Edit5KeyPress(Sender: TObject; var Key: Char);

{ Private declarations }Rezultat(x:vector);

{ Public declarations };: TForm1;

{$R *.dfm}

//ФункцияF(x:vector):double;:=sqr(x[1]+7)+2*sqr(x[2]-7)+3*sqr(x[3]+7)+4*sqr(x[4]-7);;

//ВыходTForm1.Button1Click(Sender: TObject);

close;

end;

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

procedure TForm1.Rezultat(x:vector);.Items.Add('F('+floattostrf(x[1],fffixed,8,3)+','+(x[2],fffixed,8,3)+','+floattostrf(x[3],fffixed,8,3)+

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

// Основные вычисленияTForm1.Edit1KeyPress(Sender: TObject; var Key: Char);Key=#13 then:=#0;.SetFocus;;;TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);Key=#13 then:=#0;.SetFocus;;;TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);Key=#13 then:=#0;.SetFocus;;;TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);Key=#13 then:=#0;.SetFocus;;;

// Основные вычисленияTForm1.Edit5KeyPress(Sender: TObject; var Key: Char);

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

k, m, i:integer;, e1, e2, mmm, mmm1, u, u1, u2:double;

prizn, prizn1:boolean;Key=#13 then:=#0;

//считывание данных[1]:=strtoint(edit1.Text);[2]:=strtoint(edit2.Text);[3]:=strtoint(edit3.Text);[4]:=strtoint(edit4.Text);:=strtoint(edit5.Text);

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

e1:=0.0001;:=0.0015;:=100;:=0;:=false;

while not prizn do

begin

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

rezultat(x);

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

for i:=1 to n do[i]:=x[i];i:=1 to n do[i]:=x1[i]+e1;[i]:=(f(x1)-f(x))/e1;[i]:=x[i];;

//mmm = модуль градиента:=0;i:=1 to n do:=mmm+sqr(g[i]);:=sqrt(mmm);mmm<e1 then

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

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

prizn:=true;

for i:=1 to n do[i]:=x[i];k>=m then

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

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

prizn:=true;

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

for i:=1 to n do[i]:=x[i];

else

begin

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

for i:=1 to n do[i]:=x[i];

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

prizn1:=false;not prizn1 do

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

for i:=1 to n do[i]:=x1[i]-t*g[i];:=f(x1); u2:=f(x); u:=u1-u2;u<0 then

//если функция в точке 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];;;

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

for i:=1 to n do[i]:=x1[i]-x[i];

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

mmm1:=0;

for i:=1 to n do:=mmm1+sqr(rx[i]);

mmm1:=sqrt(mmm1);:=f(x1);

u2:=f(x);:=u1-u2;(mmm1<e2) and (abs(u)<e2) then

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

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

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

prizn:=true;

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

for i:=1 to n do[i]:=x1[i];

else

begin

// иначе

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

k:=k+1;

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

for i:=1 to n do[i]:=x1[i];;;;;

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

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!