Реферат по предмету "Информатика, программирование"


Метод наискорейшего спуска

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИКУРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙУНИВЕРСИТЕТКафедра ПО ВТ

Курсовая работа
по дисциплине «Методы и алгоритмы обработки изображений»
тема: Метод наискорейшего спуска 2004

/>/>/>/>/>/>/>/>1. Техническое задание
/>/>/>/> 
Быстроеразвитие вычислительных средств, расширение их возможностей, а также (какследствие) постоянное снижение цен на них являются главным фактором всё болееширокого их внедрения в различные сферы научной и практической деятельности.
Однимиз видов практической деятельности, где используется компьютер, являетсярешение задач оптимизации. Использование вычислительной техники для решениятаких задач обусловлено так же и тем, что в ходе вычислений возникаетповторяемость одних и тех же операций над различными данными и трудностьюпредставления решения в графическом виде.
Общуюпостановку задачи оптимизации можно описать следующим образом:
Задачеймногомерной оптимизации является минимизация функции U=f(x1,x2,..xm)от m переменных x1,x2,…xm.Если нет ограничений на параметры x1,x2,…xm,то говорят о глобальной минимизации, если ограничения есть, то говорят обусловной минимизации. Вектор g(x) называется градиентом функции f(x)и обозначается g(x)=grad f(x)=(df/dx1)*e1+…+(df/dxm)*em.
Векторg(x)указывает направление наискорейшего возрастания функции, а вектор –g(x)называется антиградиентом и указывает направление наискорейшего убыванияфункции.
Методнаискорейшего спуска.
Изначальной точки x0 перпендикулярно линииуровня то есть в направлении градиента (антиградиента), двигаются до тех пор,пока функция возрастает (убывает), то есть решают одномерную задачу минимизациидля функции F(a)=f(x0-a*grad f(x0)),где a выступает в качествепараметра.
Врезультате находится значение x1=x0-a*grad f(x0)соответствующее максимальному (минимальному) значению функции на выбраннойпрямой. Затем вычислительный процесс повторяется для точки x1 и так далее. Критерием окончания являетсяусловие f’(xm)=|df/dxi|
Данноепрограммное изделие (далее по тексту именуемое «программа») носит название «Методнаискорейшего спуска» – это одна из задач оптимизации.
/>/>/>/>/>Основания для разработки
Разработкаведется на основании задания по курсовой работе.
/>/>/>/>/>Назначение разработки
Программное изделие разрабатывается сцелью реализации задачи оптимизации методом наискорейшего спуска.
/>/>/>/>/>Функциональное и эксплуатационное назначение изделия
/>/>/>/>/>Перечень требований пользователя к программномуизделию
Программноеизделие должно реализовыватьзадачу оптимизации методом наискорейшего спуска.
/>/>/>/>/>Рассмотренные альтернативы
Припостановке задачи на разработку данного программного изделия рассматривались следующиеальтернативы:
1.Программная платформа. Язык Delphi доступен в операционных системах Windows 95/98/Me, Windows NT/2000/XP.Выбрана была система Windows2000/NT в связи с высоким качествомпрограммного кода, надёжностью и наличием расширенных возможностей разработкипрограммного обеспечения под эту платформу.
2.Средства разработки. Любой компилятор для системы Windows 2000 мог быть использован для написания данного программногопродукта. Из наиболее распространенных, таких как Microsoft Visual С++, WebGain VisualCafe, Borland C++, Borland C++ Builder,Borland Delphi, Power Builder, Borland JBuilder был выбран компилятор Borland Delphi. Выбор обоснован широким распространением, удобствомиспользования, высоким качеством генерируемого кода данной среды.

/>/>/>/>/>Требования к программе или программному изделию
/>/>/>/>/>Стандарты
Разработкапрограммной документации и программного продукта должна производится согласноГОСТ 19.701-90, ГОСТ 2.304-88.
/>/>/>/>/>Информационная совместимость
Модулипрограммного комплекса должны быть совместимы между собой на уровне исходногоязыка, а также форматов используемых данных.
/>/>/>/>/>Программные ограничения, совместимость
Программноеизделие должно быть написано на языке Delphi 5.0, и работать под управлением операционных систем Microsoft Windows 98, Windows2000./>/>/>/>
/>Требованияк составу и параметрам технических средств (аппаратные ограничения)
Для работыс программным изделием должно требоваться:
· процессор,аналогичный Intel Celeron 900;
· оперативнаяпамять объемом 64 Мб;
· накопитель нажестком диске с объемом 1 Гб;
· видеоадаптер SVGA с цветным дисплеем;
· клавиатура иманипулятор типа “мышь”.
/>/>/>/>/>Входные данные
Входныеданные должны вводится вручную пользователем с помощью клавиатуры.
/>/>/>/>/>Процессы обработки
Процессыобработки должны разделяться на следующие этапы:/>
· решение задачиминимизации методом наискорейшего спуска;
/>/>/>/>/>Выходные данные
Выходными данными программы должноявляться:
· вывод на дисплей,полученного решения задачи минимизации методом наискорейшего спуска;

/>/>/>/>/>Результирующие компоненты изделия
В комплектпоставки программного изделия должны входить следующие компоненты:
· исходный текстпрограммы на языке BorlandDelphi 5.0;
· исполняемый файл;
· программнаядокументация на изделие.
/>/>/>/>/>Носители информации
Программныйпродукт должен размещаться в виде исполняемого файла на жестком дискекомпьютера пользователя или на гибких магнитных, оптических дисках.
Программноеизделие должно использовать следующие носители информации:
· используемый впроцессе работы программы объем оперативного запоминающего устройства 64 Мб,
· используемый впроцессе работы программы объем накопителя на жестком диске 1 Гб.
/>/>/>/>/>Безопасность и секретность
Информация, содержащаяся впрограммном изделии, не является секретной, поэтому ограничение доступа к нейне предусматривается.
/>/>/>/>/>Требования к надежности
/>/>/>/>/>Требований к надежности предъявленоне было.
Рестарт
В случаяхвозникновения аппаратного или программного сбоя работа программы должнавозобновляться повторным запуском./>/>/>/>
/>Удобствоэксплуатации
Интерфейспрограммы должен быть выполнен таким образом, чтобы обеспечивать простоту иудобство эксплуатации программы.
/>/>/>/>/>Мобильность
Необходимо,чтобы для успешного переноса программного изделия и обеспечения егоработоспособности на компьютере достаточно было бы скопировать исполняемыйфайл.
/>/>/>/>/>Требования к программной документации
Программнаядокументация должна соответствовать ГОСТ 19.701-90, ГОСТ 2.304-88 и включатьследующие документы:
· техническоезадание;
· рабочий проект.
В приложении к документу«Рабочий проект» должен быть приведен листинг исходных текстовпрограммного изделия.
/>/>/>/>/>Технико-экономические показатели
Программное изделие разрабатывается вкачестве учебной программы, поэтому технико-экономические показатели нерассчитываются.
/>/>/>/>/>Стадии и этапы разработки
Выполнениеразработки должно включать две стадии:
·  техническоезадание;
·  рабочий проект.
На стадии«Техническое задание» проводится постановка задачи, разработкатребований к программному изделию, изучение литературы по задаче и оформлениедокумента «Техническое задание».
На стадии«Рабочий проект» проводится разработка схем алгоритмов для каждого изфункциональных модулей, физическое проектирование программного изделия,тестирование (тесты предоставляются заказчиком) и отладка программных модулей.В заключение данного этапа оформляется документ «Рабочий проект».
/>/>/>/>/>Порядок контроля и приемки
Приемкапрограммного продукта осуществляется при сдаче документально оформленных этаповразработки и проведении испытаний на основе установленных тестов. Тесты должныбыть предоставлены поставщиком и согласованы с заказчиком./>/>/>/>

/>2.Рабочий проект
 
Примеромзадачи оптимизации является минимизация функции U=f(x1,x2) от переменных x1,x2.
Методнаискорейшего спуска.
Изначальной точки x1 перпендикулярно линииуровня то есть в направлении градиента (антиградиента), двигаются до тех пор,пока функция возрастает (убывает), то есть решают одномерную задачу минимизациидля функции F(a)=f(x0-a*grad f(x0)),
гдеa выступает в качестве параметра.
Врезультате находится значение x1=x0-a*grad f(x0)соответствующее максимальному (минимальному) значению функции на выбраннойпрямой. Затем вычислительный процесс повторяется для точки x1 и так далее. Критерием окончанияявляется условие f’(xm)=|df/dxi|
Общие сведения
Данное программное изделие носит название «Методнаискорейшего спуска» и предназначено для решения одного из видов задач оптимизации.
Назначение разработки
Программное изделие разрабатывается сцелью реализации метода наискорейшего спуска.
Функциональные иэксплуатационные характеристики изделия
Функциональныевозможности программного изделия
Программноеизделие должно наглядно показывать результат решения задачи минимизации методомнаискорейшего спуска.
Рассмотренные альтернативы
В связи с тем, что требованиязаказчика к алгоритму решения задачи были предъявлены, альтернативы нерассматривались.
Требования к программеили программному изделию
Стандарты
Разработка программной документации ипрограммного продукта производилась согласно ГОСТ 19.701-90, ГОСТ 2.304-88.
Информационнаясовместимость
Модули программного комплексасовместимы между собой на уровне исходного языка, а также форматов используемыхданных.
Программныеограничения, совместимость
Программное изделие написано на языкеDelphi 5.0, и работает под управлениемоперационных систем Microsoft Windows 95/98/Me, WindowsNT/2000/XP. Для использования исходных текстов, поставляемых спрограммным изделием, требуется система разработки программного обеспечения Borland Delphi 5.0 или выше и минимальные аппаратные ограничения,накладываемые этой системой.
Требования к составу ипараметрам технических средств (аппаратные ограничения)
Для работы с программным изделиемтребуется:
· процессор,аналогичный Intel 486, или выше;
· оперативнаяпамять объемом не менее 64 Мб;
· накопитель нажестком диске со свободным местом не менее 1 Гб;
· видеоадаптер SVGA с цветным дисплеем;
· клавиатура илиманипулятор типа “мышь”.
Входные данные
Входныеданные вводятся вручную пользователем с помощью клавиатуры.
Процессы обработки
Процессы обработки разделяются на 2группы:
· решение задачи минимизацииметодом наискорейшего спуска;
· отображениеполученного результата на экране;
Выходные данные
Выходными данными программы являются:
· отображение наэкране результата решения задачи минимизации методом наискорейшего спуска.
Результирующиекомпоненты изделия
В комплект поставки программногоизделия входят следующие компоненты:
a) исходный текстпрограммы на языке Delphi 5.0,включающий файлы:
· файл реализациимодуля Unit1.– текстовый файл с кодом алгоритмарешения задачи динамического программирования,
· файл опцийпроекта Project1.dpr –файл cустановками опций проекта,
· исполняемый файл Project1.exe – автономный исполняемый файл (законченное приложениеWindows).
b) программнаядокументация на изделие (в том числе в цифровом виде в файле Курсовик.doc).
Носители информации
Программный продукт размещается ввиде исполняемого файла на жестком диске компьютера пользователя или на гибкихмагнитных, оптических дисках.
Программное изделие используетследующие носители информации:
•используемый в процессе работы программы объем оперативного запоминающегоустройства не превышает 64 Мб,
• используемый в процессе работыпрограммы объем накопителя на жестком диске не превышает 1 Гб.
Безопасность и секретность
Информация, содержащаяся впрограммном изделии, не является секретной, поэтому ограничение доступа к нейне предусмотрено.
Требования к надежности
Поскольку требований к надежностипредъявлено не было, то обеспечена минимальная надежность хранения данных.

Рестарт
В случаях возникновения аппаратногоили программного сбоя работа программы возобновляется повторным запуском.
Удобство эксплуатации
Интерфейс программы выполнен такимобразом, что обеспечивает простоту и удобство эксплуатации программы.
Мобильность
Для успешного переноса программногоизделия и обеспечения его работоспособности на компьютере достаточноскопировать исполняемый файл программы/>/>/>.
/>Составпроекта
Рабочийпроект состоит изисполняемого файла Project1.exe.
/>/>/>/>/>Описание модуля
Модуль Unit1
Этотмодуль содержит код/>/>/>/>/>,описывающий работу метода наискорейшего спуска. />/>

Литература
1. А.Я.Архангельский Программирование в Delphi 5.0. – М.: ЗАО “Издательство БИНОМ”,2000 г.
2.  Боресков А.В., Шикин Е.В., ШикинаГ.Е. Компьютерная графика: первое знакомство; Под ред. Е.В. Шикина. — М.:Финансы и статистика, 1996. — 176 с.: ил. — (Диалог с компьютером).
3.  Краснов М.В. OpenGL графика в проектах Delphi, БХВ-Санкт-Петербург, 2000. – 352 с.

Приложение А
/>/>/>/>/>/> 
Листинг программы
/>/>/>/>/>/> 
Файл Unit1.pas
unit Unit1;
interface
uses
Windows, Messages,SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,ExtCtrls,OpenGL, Grids, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Panel1: TPanel;
Label2: TLabel;
StringGrid1:TStringGrid;
RadioButton1:TRadioButton;
Button2: TButton;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label5: TLabel;
Label6: TLabel;
Edit3: TEdit;
Label7: TLabel;
UpDown1: TUpDown;
Edit4: TEdit;
ComboBox1: TComboBox;
Edit5: TEdit;
Label8: TLabel;
Edit6: TEdit;
Label9: TLabel;
procedureButton1Click(Sender: TObject);
procedureFormCreate(Sender: TObject);
procedureFormDestroy(Sender: TObject);
procedureFormResize(Sender: TObject);
procedureFormPaint(Sender: TObject);
procedurePanel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState;X, Y: Integer);
procedurePanel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState;X, Y: Integer);
procedure Panel1MouseMove(Sender:TObject; Shift: TShiftState; X,
Y: Integer);
procedureButton2Click(Sender: TObject);
procedureEdit3Change(Sender: TObject);
procedureEdit1Change(Sender: TObject);
procedureEdit2Change(Sender: TObject);
procedureEdit4Change(Sender: TObject);
procedureEdit5Change(Sender: TObject);
procedureEdit6Change(Sender: TObject);
private
DC: HDC;
hrc: HGLRC;
{ Privatedeclarations }
end;
type TE = array[0..2,0..2] of glfloat;
type TM = array[0..2] of glfloat;
var
Form1: TForm1;
x,y,z,m,a,b,c,d,masht: glfloat;
mx,my,mz: TE;
mm: TM;
xmaus,ymaus,rt,verx:integer;
implementation
{$R *.DFM}
{Формат пикселя}
procedureSetDCPixelFormat (hdc: HDC);
var
pfd:TPixelFormatDescriptor;
nPixelFormat:Integer;
begin
FillChar (pfd, SizeOf(pfd), 0);
pfd.dwFlags :=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat :=ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc,nPixelFormat, @pfd);
end;
{====================================================
Создание формы}
procedureTForm1.FormCreate(Sender: TObject);
begin
DC := GetDC(Form1.Panel1.Handle);
SetDCPixelFormat(DC);
hrc :=wglCreateContext(DC);
wglMakeCurrent(DC,hrc);
glClearColor (0.5,0.5, 0.75, 1.0); // цвет фона
glColor3f (1.0, 0.0,0.5); // текущий цвет примитивов
glEnable(GL_DEPTH_TEST);
x:=0.0;
y:=0.0;
z:=0.0;
m:=1.0;
a:=0.0;
b:=0.0;
c:=0.0;
xmaus:= 0;
ymaus:=0 ;
masht:=0;
rt:= 0 ;
verx:= 0;
StringGrid1.Cells[0,0]:='1';
tringGrid1.Cells[0,1]:='0';
tringGrid1.Cells[0,2]:='0';
tringGrid1.Cells[0,3]:='0';
end;
procedureTForm1.Button1Click(Sender: TObject);
var
hx,hy,x0,y0,f0,gx,gy,e,f1:real;
i: integer;
begin
StringGrid1.ColCount:=1;
hx:=0.001;
hy:=0.002;
e:=0.002;
x0:=StrToInt(Edit1.Text);
y0:=StrToInt(Edit2.Text);
if(ComboBox1.ItemIndex=0)then begin
f0:=(exp(x0)+exp(y0))/(exp(x0*x0)+exp(y0*y0));
gx:=exp(x0)/(exp(x0*x0)+exp(y0*y0))-exp(x0*x0)*x0*(2*(exp(x0)+exp(y0))/((exp(x0*x0)+exp(y0*y0))*(exp(x0*x0)+exp(y0*y0))));
gy:=exp(y0)/(exp(y0*y0)+exp(x0*x0))-exp(y0*y0)*y0*(2*(exp(y0)+exp(x0))/((exp(y0*y0)+exp(x0*x0))*(exp(y0*y0)+exp(x0*x0))));
end;
if(ComboBox1.ItemIndex=1)then begin
f0:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);
gx:=2*sin(x0)*cos(x0)/(sin(y0)*sin(y0)+1);
gy:=-2*sin(x0)*sin(x0)*cos(y0)*sin(y0)/((sin(y0)*sin(y0)+1)*(sin(y0)*sin(y0)+1));
end;
if(ComboBox1.ItemIndex=2)then begin
f0:=sin(x0)*cos(y0*y0);
gx:=cos(x0)*cos(y0*y0);
gy:=-2*sin(x0)*sin(y0*y0)*y0;
end;
x0:=x0+hx*gx;
y0:=y0+hy*gy;
if(ComboBox1.ItemIndex=0)then
f1:=(exp(x0)+exp(y0))/(exp(x0*x0)+exp(y0*y0));
if(ComboBox1.ItemIndex=1)then
f1:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);
if(ComboBox1.ItemIndex=2)then
f1:=sin(x0)*cos(y0*y0);
StringGrid1.Cells[0,0]:='1';
StringGrid1.Cells[0,1]:=FloatToStr(x0);
StringGrid1.Cells[0,2]:=FloatToStr(y0);
StringGrid1.Cells[0,3]:=FloatToStr(f1);
if f1
hx:=hx/2;
hy:=hy/2;
end;
i:=1;
whilenot((abs(gx)
begin
f0:=f1;
if(ComboBox1.ItemIndex=0)then begin
gx:=exp(x0)/(exp(x0*x0)+exp(y0*y0))-exp(x0*x0)*x0*(2*(exp(x0)+exp(y0))/((exp(x0*x0)+exp(y0*y0))*(exp(x0*x0)+exp(y0*y0))));
gy:=exp(y0)/(exp(y0*y0)+exp(x0*x0))-exp(y0*y0)*y0*(2*(exp(y0)+exp(x0))/((exp(y0*y0)+exp(x0*x0))*(exp(y0*y0)+exp(x0*x0))));
end;
if(ComboBox1.ItemIndex=1)then begin
gx:=2*sin(x0)*cos(x0)/(sin(y0)*sin(y0)+1);
gy:=-2*sin(x0)*sin(x0)*cos(y0)*sin(y0)/((sin(y0)*sin(y0)+1)*(sin(y0)*sin(y0)+1));
end;
if(ComboBox1.ItemIndex=2)then begin
gx:=cos(x0)*cos(y0*y0);
gy:=-2*sin(x0)*sin(y0*y0)*y0;
end;
x0:=x0+hx*gx;
y0:=y0+hy*gy;
if(ComboBox1.ItemIndex=0)then
f1:=(exp(x0)+exp(y0))/(exp(x0*x0)+exp(y0*y0));
if(ComboBox1.ItemIndex=1)then
f1:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);
if(ComboBox1.ItemIndex=2)then
f1:=sin(x0)*cos(y0*y0);
StringGrid1.Cells[i,0]:=IntToStr(i+1);
StringGrid1.Cells[i,1]:=FloatToStr(x0);
StringGrid1.Cells[i,2]:=FloatToStr(y0);
StringGrid1.Cells[i,3]:=FloatToStr(f1);
i:=i+1;
StringGrid1.ColCount:=i;
if f1
hx:=hx/2;
hy:=hy/2;
end;
end;
Label1.Caption:=FloatToStr(f1);
refresh;
end;
procedureTForm1.FormDestroy(Sender: TObject);
begin
{====================================================
Конец работыприложения}
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC(Panel1.Handle, DC);
DeleteDC (DC);
end;
procedureTForm1.FormResize(Sender: TObject);
begin
glViewport(0, 0,Panel1.ClientWidth, Panel1.ClientHeight);
glLoadIdentity;
glFrustum (-1, 1, -1, 1, 3, 10); // задаем перспективу
// этот фрагмент нужен дляпридания трёхмерности
glTranslatef(0.0, 0.0, -5); // перенос объекта — ось Z
InvalidateRect(Panel1.Handle,nil, False);
end;
procedureTForm1.FormPaint(Sender: TObject);
var
i,j: real;
zz,xl,yl,zl,zlm,stg,h:glfloat;
fy,fx,clr,clb,obl:real;
it,wn: integer;
mm1,mm2,mm3,mm4:array [0..5] of TM;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // очистка буфера цвета
xl:=0;
yl:=0;
zl:=0;
zlm:=StrToFloat(StringGrid1.cells[0,3]);
stg:=StringGrid1.ColCount;
clr:=0;
clb:=1.0;
h:=StrToFloat(Edit3.text);
wn:=StrToInt(Edit5.text);
obl:=StrToFloat(Edit6.Text);
//ox oy oz
glscalef(masht,masht,masht);
glLineWidth(3);
glcolor3f(1.0,1.0,1.0);
glBegin(GL_Lines);
glVertex3f(-1,-1,1);
glVertex3f(1,-1,1);
glVertex3f(-1,-1,1);
glVertex3f(-1,1,1);
glVertex3f(-1,-1,1);
glVertex3f(-1,-1,-1);
glend;
glLineWidth(1);
glcolor3f(1.0,1.0,0.0);
glBegin(GL_Lines);
//x
glVertex3f(1.1-0.03,-1+0.1,1);
glVertex3f(1.1+0.03,-1-0.1,1);
glVertex3f(1.1+0.03,-1+0.1,1);
glVertex3f(1.1-0.03,-1-0.1,1);
//z
glVertex3f(-1-0.03,1.1,1);
glVertex3f(-1+0.03,1.1,1);
glVertex3f(-1-0.03,1.1,1);
glVertex3f(-1+0.03,1.2,1);
glVertex3f(-1-0.03,1.2,1);
glVertex3f(-1+0.03,1.2,1);
//y
glVertex3f(-1,-1,-1-0.1);
glVertex3f(-1,-1+0.1,-1-0.1);
glVertex3f(-1,-1+0.1,-1-0.1);
glVertex3f(-1-0.03,-1+0.2,-1-0.1);
glVertex3f(-1,-1+0.1,-1-0.1);
glVertex3f(-1+0.03,-1+0.2,-1-0.1);
glend;
//if(ComboBox1.ItemIndex=1) then begin
/f1:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);
/f1:=sin(x0)/(x0+y0*y0+1);
i:=-wn;
j:=-wn;
while j
i:=-wn;
yl:=j;
//glBegin(GL_points);
glBegin(GL_Lines);
glcolor3f(clr,0.0,clb);
while i
xl:=i; //f(x) ==
if(ComboBox1.ItemIndex=0)then
zl:=(exp(xl)+exp(yl))/(exp(xl*xl)+exp(yl*yl));
if(ComboBox1.ItemIndex=1)then
zl:=sin(xl)*sin(xl)/(sin(yl)*sin(yl)+1);
if(ComboBox1.ItemIndex=2)then
zl:=sin(xl)*cos(yl*yl);
if zl>=zlm thenbegin
zlm:=zl;
clr:=clr+0.01;
clb:=clb-0.01;
glcolor3f(clr,0.0,clb);
end;
glVertex3f(xl*obl,zl*obl,yl*obl);//+++
i:=i+0.1;
xl:=i;
if(ComboBox1.ItemIndex=0)then
zl:=(exp(xl)+exp(yl))/(exp(xl*xl)+exp(yl*yl));
if(ComboBox1.ItemIndex=1)then
zl:=sin(xl)*sin(xl)/(sin(yl)*sin(yl)+1);
if(ComboBox1.ItemIndex=2)then
zl:=sin(xl)*cos(yl*yl);
glVertex3f(xl*obl,zl*obl,yl*obl);//++++
end;
j:=j+h;
end;
glend;
//----------------------
i:=-wn;
j:=-wn;
clr:=0;
clb:=1.0;
zlm:=StrToFloat(StringGrid1.cells[0,3]);
while j
i:=-wn;
xl:=j;
glBegin(GL_Lines);
glcolor3f(clr,0.0,clb);
while i
yl:=i; //f(x) ||
if(ComboBox1.ItemIndex=0)then
zl:=(exp(xl)+exp(yl))/(exp(xl*xl)+exp(yl*yl));
if(ComboBox1.ItemIndex=1)then
zl:=sin(xl)*sin(xl)/(sin(yl)*sin(yl)+1);
if(ComboBox1.ItemIndex=2)then
zl:=sin(xl)*cos(yl*yl);
if zl>=zlm thenbegin
zlm:=zl;
clr:=clr+0.01;
clb:=clb-0.01;
glcolor3f(clr,0.0,clb);
end;
glVertex3f(xl*obl,zl*obl,yl*obl);//+++
i:=i+0.1;
yl:=i;
if(ComboBox1.ItemIndex=0)then
zl:=(exp(xl)+exp(yl))/(exp(xl*xl)+exp(yl*yl));
if(ComboBox1.ItemIndex=1)then
zl:=sin(xl)*sin(xl)/(sin(yl)*sin(yl)+1);
if(ComboBox1.ItemIndex=2)then
zl:=sin(xl)*cos(yl*yl);
glVertex3f(xl*obl,zl*obl,yl*obl);//+++
end;
j:=j+h;
end;
glend;
//------
it:=0;
glLineWidth(2);
glBegin(GL_Line_strip);
glcolor3f(0.0,1.0,0.0);
whileit
xl:=StrToFloat(StringGrid1.cells[it,1]);//+
yl:=StrToFloat(StringGrid1.cells[it,2]);//+
zl:=StrToFloat(StringGrid1.cells[it,3]);//+
glVertex3f(xl*obl,zl*obl,yl*obl);
it:=it+1;
end;
glend;
glLineWidth(1);
//tmax
glPointSize(6);
glBegin(GL_points);
glcolor3f(1.0,0.0,0.0);
glVertex3f(xl*obl,zl*obl,yl*obl);
glcolor3f(0.0,0.0,1.0);
glVertex3f(StrToFloat(StringGrid1.cells[0,1])*obl,StrToFloat(StringGrid1.cells[0,3])*obl,StrToFloat(StringGrid1.cells[0,2])*obl);
glend;
glscalef(1.0/masht,1.0/masht,1.0/masht);
glRotatef(verx,1,0,0);
glRotatef(rt,0,1,0);
SwapBuffers(DC);
Label2.Caption:=FloatToStr(zlm);
end;
procedureTForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState;X, Y: Integer);
begin
if(Button=mbleft)then begin
radiobutton1.Checked:=true;
end;
end;
procedureTForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState;X, Y: Integer);
begin
radiobutton1.Checked:=false;
end;
procedureTForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y:Integer);
begin
rt:=0;
verx:=0;
ifradiobutton1.Checked=true then begin
rt:=x- xmaus;
verx:=y-ymaus;
refresh;
end;
xmaus:=x;
ymaus:=y;
end;
procedureTForm1.Button2Click(Sender: TObject);
var
hx,hy,h,x0,y0,f0,gx,gy,g1x,g1y,e,f1:real;
i: integer;
begin
StringGrid1.ColCount:=1;
h :=0.001;
hx:=0.001;
hy:=0.001;
e:=0.002;
x0:=StrToInt(Edit1.Text);
y0:=StrToInt(Edit2.Text);
if(ComboBox1.ItemIndex=0)then begin
f0:=(exp(x0)+exp(y0))/(exp(x0*x0)+exp(y0*y0));
gx:=exp(x0)/(exp(x0*x0)+exp(y0*y0))-exp(x0*x0)*x0*(2*(exp(x0)+exp(y0))/((exp(x0*x0)+exp(y0*y0))*(exp(x0*x0)+exp(y0*y0))));
gy:=exp(y0)/(exp(y0*y0)+exp(x0*x0))-exp(y0*y0)*y0*(2*(exp(y0)+exp(x0))/((exp(y0*y0)+exp(x0*x0))*(exp(y0*y0)+exp(x0*x0))));
end;
if(ComboBox1.ItemIndex=1)then begin
f0:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);
gx:=2*sin(x0)*cos(x0)/(sin(y0)*sin(y0)+1);
gy:=-2*sin(x0)*sin(x0)*cos(y0)*sin(y0)/((sin(y0)*sin(y0)+1)*(sin(y0)*sin(y0)+1));
end;
if(ComboBox1.ItemIndex=2)then begin
f0:=sin(x0)*cos(y0*y0);
gx:=cos(x0)*cos(y0*y0);
gy:=-2*sin(x0)*sin(y0*y0)*y0;
end;
g1x:=gx;
g1y:=gy;
x0:=x0+hx*gx;
y0:=y0+hy*gy;
if(ComboBox1.ItemIndex=0)then
f1:=(exp(x0)+exp(y0))/(exp(x0*x0)+exp(y0*y0));
if(ComboBox1.ItemIndex=1)then
f1:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);
if(ComboBox1.ItemIndex=2)then
f1:=sin(x0)*cos(y0*y0);
StringGrid1.Cells[0,0]:='1';
StringGrid1.Cells[0,1]:=FloatToStr(x0);
StringGrid1.Cells[0,2]:=FloatToStr(y0);
StringGrid1.Cells[0,3]:=FloatToStr(f1);
if f1
hx:=h;
hy:=h;
end
else begin
hx:=hx*2;
hy:=hy*2;
end;
i:=1;
whilenot((abs(g1x)
begin
f0:=f1;
x0:=x0+hx*gx;
y0:=y0+hy*gy;
if(ComboBox1.ItemIndex=0)then begin
g1x:=exp(x0)/(exp(x0*x0)+exp(y0*y0))-exp(x0*x0)*x0*(2*(exp(x0)+exp(y0))/((exp(x0*x0)+exp(y0*y0))*(exp(x0*x0)+exp(y0*y0))));
g1y:=exp(y0)/(exp(y0*y0)+exp(x0*x0))-exp(y0*y0)*y0*(2*(exp(y0)+exp(x0))/((exp(y0*y0)+exp(x0*x0))*(exp(y0*y0)+exp(x0*x0))));
f1:=(exp(x0)+exp(y0))/(exp(x0*x0)+exp(y0*y0));
end;
if(ComboBox1.ItemIndex=1)then begin
g1x:=2*sin(x0)*cos(x0)/(sin(y0)*sin(y0)+1);
g1y:=-2*sin(x0)*sin(x0)*cos(y0)*sin(y0)/((sin(y0)*sin(y0)+1)*(sin(y0)*sin(y0)+1));
f1:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);
end;
if(ComboBox1.ItemIndex=2)then begin
f1:=sin(x0)*cos(y0*y0);
g1x:=cos(x0)*cos(y0*y0);
g1y:=-2*sin(x0)*sin(y0*y0)*y0;
end;
StringGrid1.Cells[i,0]:=IntToStr(i+1);
StringGrid1.Cells[i,1]:=FloatToStr(x0);
StringGrid1.Cells[i,2]:=FloatToStr(y0);
StringGrid1.Cells[i,3]:=FloatToStr(f1);
i:=i+1;
StringGrid1.ColCount:=i;
if f1
if(ComboBox1.ItemIndex=0)then begin
gx:=exp(x0)/(exp(x0*x0)+exp(y0*y0))-exp(x0*x0)*x0*(2*(exp(x0)+exp(y0))/((exp(x0*x0)+exp(y0*y0))*(exp(x0*x0)+exp(y0*y0))));
gy:=exp(y0)/(exp(y0*y0)+exp(x0*x0))-exp(y0*y0)*y0*(2*(exp(y0)+exp(x0))/((exp(y0*y0)+exp(x0*x0))*(exp(y0*y0)+exp(x0*x0))));
end;
if(ComboBox1.ItemIndex=1)then begin
gx:=2*sin(x0)*cos(x0)/(sin(y0)*sin(y0)+1);
gy:=-2*sin(x0)*sin(x0)*cos(y0)*sin(y0)/((sin(y0)*sin(y0)+1)*(sin(y0)*sin(y0)+1));
end;
if(ComboBox1.ItemIndex=2)then begin
gx:=cos(x0)*cos(y0*y0);
gy:=-2*sin(x0)*sin(y0*y0)*y0;
end;
hx:=h;
hy:=h;
end
else begin
hx:=hx*2;
hy:=hy*2;
end;
end;
Label1.Caption:=FloatToStr(f1);
refresh;
end;
procedure TForm1.Edit3Change(Sender:TObject);
var
c: real;
begin
try
c:=StrToFloat(Edit3.text);
except
Edit3.text:='0,05';
end;
end;
procedureTForm1.Edit1Change(Sender: TObject);
var
c: integer;
begin
try
c:=StrToInt(Edit1.text);
except
Edit1.text:='-1';
end;
end;
procedureTForm1.Edit2Change(Sender: TObject);
var
c: integer;
begin
try
c:=StrToInt(Edit2.text);
except
Edit2.text:='-1';
end;
end;
procedureTForm1.Edit4Change(Sender: TObject);
begin
masht:=StrToFloat(Edit4.text)/10;
refresh;
end;
procedureTForm1.Edit5Change(Sender: TObject);
var
c: integer;
begin
try
c:=StrToInt(Edit5.text);
except
Edit5.text:='1';
end;
end;
procedureTForm1.Edit6Change(Sender: TObject);
var
c: real;
begin
try
c:=StrToFloat(Edit6.text);
except
Edit6.text:='1,0';
end;
end;
end.

Приложение Б
Тест 1:
Найдём максимум функции f(x,y)=(exp(x)+exp(y))/(exp(x^2)+exp(y^2))
Простой градиентный метод
/>
программный изделиетехнический средство
Метод наискорейшего спуска
/>

Тест 2:
Найдём максимум функции f(x,y)=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1)
Простой градиентный метод
/>
Метод наискорейшего спуска
/>
Тест 3:
Найдём максимум функции f(x,y)=sin(x0)*cos(y0*y0)
Простой градиентный метод

/>
Метод наискорейшего спуска
/>
При изменении начальных точек,может меняться и положение максимума

/>
/>


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.