←предыдущая следующая→
1 2
Министерство путей сообщения РФ
Дальневосточный государственный университет
путей сообщения
Кафедра «Прикладная математика»
Курсовая работа
по численным методам
«Минимизация функций нескольких переменных.
Метод спуска.»
Выполнили: Косолапов А.Г. Терехов А.А.
Проверил: Смагин С.И.
Хабаровск 2003
Содержание:
I. Методы спуска (Общая схема) _________________________ 3
II. Метод покоординатного спуска._____________________ 4
III. Метод градиентного спуска.________________________________ 7
IV. Метод наискорейшего спуска.______________________________ 9
V. Описание программы._____________________________________10
VI. Общая блок схема.________________________________________ 11
VII. Руководство для пользования.______________________________12
VIII. Приложение А (Листинг программы)__________________________13
IX. Приложение B
(Исследование функции U=A*x1^3+B*x2^2-C*x1-D*x2 (изменение шага))_____ 25
Методы спуска
Общая схема
Все методы спуска решения задачи безусловной минимизации различаются либо выбором направления спуска, либо способом движения вдоль направления спуска. Это позволяет написать общую схему методов спуска.
Решается задача минимизации функции (x) на всём пространстве En. Методы спуска состоят в следующей процедуре построения последовательности {xk}. В качестве начального приближения выбирается любая точка x0En. Последовательные приближения x1, x2, … строятся по следующей схеме:
1) в точке xk выбирают направление спуска - Sk;
2) находят (k+1)-е приближение по формуле xk+1=xk-hkSk.
Направление Sk выбирают таким образом, чтобы обеспечить неравенство f(xk+1)Visible=false;
Edit2->Text=Formula[UD->Position];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Sh1NextClick(TObject *Sender)
{
ii++;
PageControl1->ActivePageIndex=ii;
g=1;
switch (UD->Position) {
case 0: Kol->Caption=KolPer[0];break;
case 1: Kol->Caption=KolPer[1];break;
case 2: Kol->Caption=KolPer[2];break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Sh2NextClick(TObject *Sender)
{
ii++;
PageControl1->ActivePageIndex=ii;
g=3;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Sh3BackClick(TObject *Sender)
{
ii--;
PageControl1->ActivePageIndex=ii;
Panel5->Visible=false;
Sh2Next->Visible=false;
g=2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Sh2BackClick(TObject *Sender)
{
if (g ==1 )
{
ii--;
PageControl1->ActivePageIndex=ii;
Panel2->Visible=true;
Panel3->Visible=false;
Panel4->Visible=false;
Panel5->Visible=false;
}
if (g == 2)
{
Panel3->Visible=true;
Panel4->Visible=false;
Panel5->Visible=false;
n=KolPer[UD->Position];
Per->Caption="X1 =";
s=0;
g=1;
}
if (g == 3)
{
Panel5->Visible=false;
Sh2Next->Visible=false;
g=2;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Panel3->Visible=true;
n=KolPer[UD->Position];
Per->Caption="X1 =";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
PeremenN[s]=StrToFloat(Edit4->Text); //нул.приб
InterN[s]=StrToFloat(Edit3->Text); //нач
InterK[s]=StrToFloat(Edit5->Text); //кон
s++;
Per->Caption="X"+ IntToStr(s+1)+"=";
g=2;
if (s == n)
{Panel4->Visible=true;g=2;}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Param[0]=StrToFloat(Edit6->Text); //коэ.шага
Param[1]=StrToFloat(Edit7->Text); // проб.шаг
Param[2]=StrToFloat(Edit8->Text); // погр.
if(CB1->Checked == true )
{Param[3]=StrToFloat(NT->Text); }
else
{Param[3]=-1;}
Sh2Next->Visible=true;
Panel5->Visible=true;
g=3;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PuskClick(TObject *Sender)
{
ss=0; //количество точек которых получилось
Diapozon=true;
Min();
if (Diapozon==false)
ss=ss-1;
Sh3Back->Visible=true;
Panel6->Visible=true;
Series1->Clear();
for(int i = 0; i AddXY(i,Tochki[i][2],"",clBlue);
Nomer->Items->Add(i);
}
Nomer->Items->Add(ss);
//Nomer->Items->St
//ListT->Items->Add(123);
//if ( Diapozon=true )
//{ Itog->Caption="Точка минимума в указанном диапозоне "; }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::CB1Click(TObject *Sender)
{
if(CB1->Checked == true )
NT->Visible=true;
if(CB1->Checked == false )
NT->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{
Panel6->Visible=false;
ListT->Items->Clear();
Nomer->Items->Clear();
Nomer->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NomerChange(TObject *Sender)
{
int ind=Nomer->ItemIndex;
ListT->Items->Clear();
for (int i=0;iItems->Add(Tochki[ind][i]);
ListT->Items->Add(Tochki[ind][2]);
if (ind == ss)
if( Diapozon==true)
{ ListT->Items->Add(" Минимум");}
else
{
ListT->Items->Add(" Минимум");
ListT->Items->Add("Следующая точка в");
ListT->Items->Add("диапозон не входит");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Pr1Click(TObject *Sender)
{
if(Pr1->Checked == true )
DD=true;
if(Pr1->Checked == false )
{
DD=false;
MessageDlg("Вы отключили проверку диапозона точки,"
"убедитесь в этом",mtWarning,
TMsgDlgButtons() Checked == true )
{
Panel7->Visible=true;
Series1->Active=false;
Series2->Clear();
Perem->Text="Xi";
Perem->Items->Clear();
CB3->ItemIndex=-1;
CB3->Items->Clear();
CB4->ItemIndex=-1;
CB4->Items->Clear();
←предыдущая следующая→
1 2
|
|