![]() |
|
|
Реферат: Минимизация функций нескольких переменных. Метод спуска{ BB[j]=T2[j]; B[j]=T2[j]; } BB[i]=T2[i]+ Param[1] ; // добавляем и отнимаем пробный шаг B[i]=T2[i]- Param[1] ; // к i-ой переменной switch (UD->Position) { case 0: dR = (F1(BB)- F1(B))/(2*Param[1]) ; break; case 1: dR = (F2(BB)-F2(B))/(2*Param[1]); break; case 2: dR = (F3(BB)-F3(B))/(2*Param[1]); break; } return dR; } //-------------------------------------------------------------------------- void TForm1::Min() { // массив в котором //double Tochki[1][5]; //хранится первое приближение //double **Tochki; //создаем массив Temp[ss][n] Tochki = new double*[100]; for (int j = 0; j < 100; j++) Tochki[j] = new double[3]; bool Minimum=false,Pogresh=false,shag=false; double sh=Param[0]; for (int j=0;j<n;j++) //T1,T2,TempT=PeremenN; { T1[j]=PeremenN[j]; T2[j]=PeremenN[j]; TempT[j]=PeremenN[j]; Tochki[0][j]=PeremenN[j]; } while ( Minimum == false ) // после выхода из цикла { // минимум в точке T2 shag=false; // начало блока 2 while (shag == false) { double R=0; Tochka(sh); switch (UD->Position) { case 0: R=F1(TempT)-F1(T1) ; break; case 1: R=F2(TempT)-F2(T1); break; case 2: R=F3(TempT)-F3(T1); break; } if (R > 0) // шаг большой то { // уменьшаем его в 2 раза sh= sh/2; } else { shag =true; } } // конец блока 2 // Проверяем входит ли точка в указанный диапозон // если нет то считаем предыдущую точку минимальной if (DD==true ) { for ( int i=0; i<n; i++) { if ( InterN[i] > TempT[i]) { Diapozon=false; Minimum = true; } if (InterK[i] < TempT[i]) { Diapozon=false; Minimum = true; } } } for (int j=0;j<n;j++) { T1[j]=T2[j]; //T1=T2 T2[j]=TempT[j]; //T2=TempT } // начало блока 3 ModG=0; //- модуль градиента for (int i = 0; i < n; i++) { ModG+= Gr(i)*Gr(i); } ModG=sqrt(ModG); if ( ModG < Param[2]) // /gradient/ < e где e-погрешность { Minimum=true; } // /gradient/ - модуль градиента // конец блока 3 ss++; if (Param[3] != -1 ) if (ss == Param[3]) Minimum=true; // начало блока 4 if ( ss > 99 ) { MessageDlg("Предел превышен ...точек более 100 ..измените шаг",mtWarning, TMsgDlgButtons() << mbOK , 0);break;} if(Diapozon==true) { for (int j = 0; j < n; j++) Tochki[ss][j] = T2[j]; } } for (int j = 0; j <= ss; j++) { for (int i = 0; i < n; i++) TempT[i]= Tochki[j][i]; switch (UD->Position) { case 0: Tochki[j][2] = F1(TempT) ; break; case 1: Tochki[j][2] = F2(TempT); break; case 2: Tochki[j][2] = F3(TempT); break; } } // /* double **Temp; //создаем массив Temp[ss][n] Temp = new double*[ss]; for (int j = 0; j < ss; j++) Temp[j] = new double[n]; // for (int i = 0; i < ss; i++) for (int j = 0; j < n; j++) Temp[i][j]=Tochki[i][j]; // //for (int i = 0; i < ss; i++) //удаляем массив Tochki[ss][n] //delete[] Tochki[i]; //delete Tochki; // int mm=ss+1; double **Tochki; //создаем массив Tochki[ss+1][n] Tochki = new double*[mm]; for (int j = 0; j < mm; j++) Tochki[j] = new double[n]; // for (int i = 0; i < mm-1; i++) for (int j = 0; j < n; j++) Tochki[i][j] = Temp[i][j]; // for (int j = 0; j < n; j++) Tochki[ss][j] = T2[j]; // //for (int i = 0; i < ss; i++) //удаляем массив Temp[ss][n] //delete[] Temp[i]; //delete [] Temp; } // конец блока 4 */ } //-------------------------------------------------------------------------- void __fastcall TForm1::UDClick(TObject *Sender, TUDBtnType Button) { Edit2->Text=Formula[UD->Position]; } //--------------------------------------------------------------------------- void __fastcall TForm1::StartClick(TObject *Sender) { Panel1->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 <ss; i++) { Series1->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;i<n;i++) ListT->Items->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() << mbOK , 0); } } //--------------------------------------------------------------------------- void __fastcall TForm1::CB2Click(TObject *Sender) { if(CB2->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(); for(int i = 0; i < n; i++) Perem->Items->Add(i+1); for(int i = 0; i <= ss; i++) { CB3->Items->Add(i); } } if(CB2->Checked == false ) { Series2->Clear(); Series2->Active=false; Series1->Active=true; Panel7->Visible=false; CB4->Enabled=false; CB3->Enabled=false; } } //--------------------------------------------------------------------------- void __fastcall TForm1::PeremChange(TObject *Sender) { int ind=Nomer->ItemIndex; CB3->Enabled=true; CB3->ItemIndex=0; } //--------------------------------------------------------------------------- void __fastcall TForm1::CB3Change(TObject *Sender) { CB4->Items->Clear(); CB4->ItemIndex=-1; int in=CB3->ItemIndex; CB4->Enabled=true; for(int i = in; i <=ss ; i++) CB4->Items->Add(i); CB4->ItemIndex=0; } //--------------------------------------------------------------------------- void __fastcall TForm1::CB4Change(TObject *Sender) { Bild->Visible=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::BildClick(TObject *Sender) { Series2->Clear(); ListP->Items->Clear(); int nh=CB3->ItemIndex; int nk=CB4->ItemIndex; Series2->Active=true; for(int i = nh; i <=nk+nh; i++) { Series2->AddXY(i,Tochki[i][ind],"",clBlue); ListP->Items->Add(Tochki[i][ind]); } Bild->Visible=false; CB4->Enabled=false; CB4->Items->Clear(); CB4->ItemIndex=-1; } //--------------------------------------------------------------------------- Приложение B Исследование функции U=1*x1^3+2*x2^2-3*x1-4*x2 (изменением шага).h=0,1; x1 =-0,5; x2=-1 ; x1нач=-2, x1кон=2, x2нач=-2, x2кон=2
h=0,2; x1 =-0,5; x2=-1 ; x1нач=-2, x1кон=2, x2нач=-2, x2кон=2
h=0,3; x1 =-0,5; x2=-1 ; x1нач=-2, x1кон=2, x2нач=-2, x2кон=2
h=1; x1 =-0,5; x2=-1 ; x1нач=-2, x1кон=2, x2нач=-2, x2кон=2
|
Страницы: 1, 2
![]() |
||
НОВОСТИ | ![]() |
![]() |
||
ВХОД | ![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |