Оптимизационные методы минимизации и максимизации
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?гут сильно повлиять на ход процесса.
Поэтому на практике часто сравнение алгоритмов проводят с помощью вычислительных экспериментов при решении так называемых специальных тестовых задач. Эти задачи могут быть как с малым, так и с большим числом переменных, иметь различный вид нелинейности. Они могут быть составлены специально и возникать из практических приложений, например задача минимизации суммы квадратов, решение систем нелинейных уравнений и т.п.
Библиографический список
1.Микрокова В.И. Методы оптимизации. - Киров, 2004.
2.Пантелеев А.В. Методы оптимизации в примерах и задачах.- Высшая школа ,2002.
.Интернет.
Приложение
Листинг программы
Для программной реализации был предложен метод Коши. Алгоритм метода описан в пояснительной записке.
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"*Form1;N=1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ lin_ur=new TStringList;}
//---------------------------------------------------------------------------__fastcall TForm1::saveris()
{ if(Form1->SaveDialog1->Execute())
{Form1->Chart1->SaveToBitmapFile(Form1->SaveDialog1->FileName);}}
//---------------------------------------------------------__fastcall TForm1::saverez()
{int k=0;str1="";="Метод Коши Уравнение имеет вид: f(X1,X2)=(X1-"+FloatToStrF(a,ffGeneral,6,0)+")^2+(X2-"+FloatToStrF(b,ffGeneral,6,0)+")^2+X1*X2; Точка поиска:["+FloatToStrF(x110,ffGeneral,6,0)+";"+FloatToStrF(x210,ffGeneral,6,0)+"]\n";(int j=0;j<N;j++)
{ for(int i=0;i<5;i++)
{k=StrLen(Form1->StringGrid1->Cells[i][j].c_str());+=(" "+Form1->StringGrid1->Cells[i][j]+" ");(int p=0;25-k>p;p++)+=(" ");+=("|");}+=\n;}(Form1->SaveDialog2->Execute())
{String save=Form1->SaveDialog2->FileName;*fp;=fopen(save.c_str(),"w");(str1.c_str(),fp);(fp);}
}
//-----------------------------------------------------------__fastcall TForm1::zadanie()
{ Button2->Enabled=true;->Enabled=false;->Enabled=false;->Enabled=true;->Clear();->Clear();=StrToInt(Edit1->Text.c_str());=StrToInt(Edit2->Text.c_str());=atof(Edit3->Text.c_str());=atof(Edit4->Text.c_str());=x11;=x21;_pred=funk(x11,x21);=(-8*b+4*a)/3.0+2*b;=(4*b-2*a)/3.0;->Caption="["+FloatToStrF(q1,ffGeneral,6,0)+";"+FloatToStrF(q2,ffGeneral,6,0)+"]";
Label11->Caption="Данная точка является минимумом функции";
fq=funk(q1,q2);->Caption=FloatToStrF(fq,ffGeneral,6,0);
//Label5->Caption="f(X1,X2) = (X1-"+FloatToStrF(a,ffGeneral,6,0)+")^2+(X2-"+FloatToStrF(b,ffGeneral,6,0)+")^2+X1*X2";
//Form1->StatusBar1->Panels->Items[3]->Text="*******Введите точность метода и нажмите \"ВЫЧИСЛИТЬ\"*******"; }
//----------------------------------------__fastcall TForm1::vi4()
{Button1->Enabled=true;->Enabled=false;->Enabled=false;->Enabled=true;->Enabled=true;->Enabled=true;->Enabled=true;->Enabled=true;_lin_ur();_ur=new TStringList;();();
// Form1->StatusBar1->Panels->Items[3]->Text="*******Введите новые исходные данные и нажмите \"ВВОД ДАННЫХ\"*******";}
//---------------------------------------------------------------------------__fastcall TForm1::poisk()
{float XX1,XX2,YY1,YY2;>Clear();>AddXY(q1,q2,"",clBlue);->StringGrid1->Cells[0][0]="N";->StringGrid1->Cells[1][0]="Производная";->StringGrid1->Cells[2][0]="Коэфициент альфа";->StringGrid1->Cells[3][0]="Текущая точка";->StringGrid1->Cells[4][0]="Значение функции";->Clear();->Clear();i=0;=StrToFloat(Edit5->Text);_pred=9999;->AddXY(x11,x21,"",clBlue);->AddXY(x11,x21,"",clBlue);=1000;(fabs(tmp1)>eps)
{ N=i+2;->Cells[0][i+1]=i;=df_x1(x11, x21);=df_x2(x11, x21);((tmp1!=0)&(tmp2!=0))->Cells[1][i+1]="["+FloatToStrF(tmp1,ffGeneral,4,4)+";"+FloatToStrF(tmp2,ffGeneral,4,4)+"]";_v= 2*tmp1*(x11-a)+2*tmp2*(x21-b)+x11*tmp2+x21*tmp1;_z= 2*(tmp1*tmp1+tmp2*tmp2+tmp1*tmp2);(alpha_z!=0)
{alpha=alpha_v/alpha_z;->Cells[2][i+1]=FloatToStrF(alpha,ffGeneral,6,0); }break;_pred=temp_tek;=x11-tmp1*alpha;=x21-tmp2*alpha;->AddXY(x11,x21,"",clBlue);->AddXY(x11,x21,"",clBlue);->Cells[3][i+1]="["+FloatToStrF(x11,ffGeneral,6,0)+";"+FloatToStrF(x21,ffGeneral,6,0)+"]";_tek=funk(x11,x21);->Cells[4][i+1]=FloatToStrF(temp_tek,ffGeneral,6,0);++;}}
//---------------------------------------------------------------------------__fastcall TForm1::funk(float x11, float x21)
{return (pow(x11-a,2)+pow(x21-b,2)+x11*x21);}
//------------------------------------------------------__fastcall TForm1::df_x1(float x11,float x21)
{return (2*x11-2*a+x21);}
//--------------------------------------------------------__fastcall TForm1::df_x2(float x11,float x21)
{return (2*x21-2*b+x11);}__fastcall TForm1::line()
{ double DD=0 ; // дискриминант 1D=0; // дискриминант 2x_n; // начало сканированияx_k; // конец сканированияh=0.01; // шаг построенияxx21,xx22,xx11,fx; // переменные и функция
Chart1->UndoZoom(); // отмена Zooma->Clear();11=x11; // точка оптимума
xx21=x21;
Series4->AddXY(xx11,xx21,"",clBlue);
fx=temp_tek; // значение функции в точке опт.(int i=0;i<8;i++)
{fx+=10; // шаг построения линий уровня
TLineSeries *Series2=new TLineSeries(Form1);->ParentChart=Chart1;_ur->AddObject("",Series2);*Series3=new TLineSeries(Form1);->ParentChart=Chart1;_ur->AddObject("",Series3);->Clear();->Clear();=pow((8*a-4*b),2)-16*(fx-a*a)*(1-4);_n=(4*b-8*a+sqrt(DD))/(2*(1-4));_k=(4*b-8*a-sqrt(DD))/(2*(1-4));=x_n;(xx11<x_k)
{D=(1-4)*xx11*xx11+(8*a-4*b)*xx11+4*(fx-a*a);(DAddXY(xx11,xx22,"",clGreen);} }
//--------------------------------------------------------------------__fastcall TForm1::del_lin_ur()
{for (int i=lin_ur->Count-1;i>=0;i--)lin_ur->Objects[i];lin_ur;}__fastcall TForm1::N7Click(TObject *Sender)
{Close();}
//---------------------------------------------------------------------------__fastcall TForm1::Button1Click(TObject *Sender)
{ zadanie();}
//---------------------------------------------------------------------------__fastcall TForm1::Button2Click(TObject *Sender)
{ vi4();}
//---------------------------------------------------------------------------__fastcall TForm1::N2Click(TObject *Sender)
{ zadanie();}
//---------------------------------------------------------------------------__fastcall TForm1::N3Click(TObject *Sender)
{vi4();}
//---------------------------------------------------------------------------__fastcall TForm1::Button4Click(TObject *Sender)
{ saveris();}
//---------------------------------------------------------------------------__fastcall TForm1::Button3Click(TObject *Sender)
{saverez();}
//---------------------------------------------------------------------------__fastcall TForm1::N4Click(TObject *Sender)
{saverez(); }
//---------------------------------------------------------------------------__fastcall TForm1::N5Click(TObject *Sender)
{saveris();}
//---------------------------------------------------------------------------__fastcall TForm1::PageControl1Change(TObject *Sender)
RichEdit1->Lines->LoadFromFile("metod.rtf");}">{//Form1->RichEdit1->Lines->LoadFromFile(&q