на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


Реферат: Минимизация функций нескольких переменных. Метод спуска


    {

     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

x1

x2

R
0 -0,5 -1 7,375
1 -0,2750 -0,1999 1,6842
2 0,0023 0,2800 -0,9701
3 0,3023 0,5680 -2,5059
4 0,5749 0,7408 -3,4002
5 0,7757 0,8445 -3,8120
6 0,8952 0,9067 -3,9508
7 0,9548 0,9440 -3,9877
8 0,9813 0,9664 -3,9967
9 0,9924 0,9798 -3,9990
10 0,9969 0,9879 -3,9997
11 0,9988 0,9927 -3,9999
12 0,9995 0,9956 -4,0000
13 0,9998 0,9974 -4,0000
14 1,0000 0,9984 -4,0000

h=0,2; x1 =-0,5; x2=-1 ; x1нач=-2, x1кон=2, x2нач=-2, x2кон=2

x1

x2

R
0 -0,5 -1 7,375
1 0,0500 0,6000 -1,5301
2 0,5485 0,9200 -3,4676
3 0,9680 0,9840 -3,9964
4 1,0058 0,9968 -3,9999
5 0,9988 0,9994 -4,0000

h=0,3; x1 =-0,5; x2=-1 ; x1нач=-2, x1кон=2, x2нач=-2, x2кон=2

x1

x2

R

0 -0,5 -1 7,375
1 0,1750 1,4 -2,1996
2 1,0473 0,9200 -3,9804
3 0,9600 1,016 -3,9948
4 1,0305 0,9968 -3,9972
5 0,9747 0,0006 -3,9981
6 1,0196 0,9999 -3,9988
7 0,9839 1,0000 -3,9992
8 1,0126 1,0000 -3,9995
9 0,9898 1,0000 -3,9997
10 1,0081 1,0000 -39998
11 0,9935 1,0000 -3,9999
12 1,0052 1,0000 -3,9999
13 0,9958 1.0000 -3,9999
14 1,0033 1,0000 -4,0000
15 0,9973 1,0000 -4,0000
16 1,0021 1,0000 -4,0000
17 0,9983 1,0000 -4,0000
18 1,0013 1,0000 -4,0000


h=1; x1 =-0,5; x2=-1 ; x1нач=-2, x1кон=2, x2нач=-2, x2кон=2

x1

x2

R
0 -0,5 -1 7,375
1 0,6250 3 4,3692
2 1,5391 -1,0000 5,0283
3 0,5125 1 -3,4029
4 1,0655 1 -3,9869
5 0,9640 1 -3,9961
6 1,0170 1 -3,9991
7 0,9913 1,0000 -3,9998
8 1,0043 1 -3,9999
9 0,9978 1 -4,0000
10 1,0011 1 -4,0000

Страницы: 1, 2


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое.


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.