Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Брб_лаб_1+2.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
270.4 Кб
Скачать

Void main()

{ clrscr();

printf("Poisk metodom -grad\n");

printf("eps=%f epsOP=%f",eps, epsOP);

x[0]=x0[0]; x[1]=x0[1]; f0=Fq();

printf("\nf%i/%i(%f,%f)=%f",it,ko,x0[0],x0[1], f0);

do

{ it++; UnGrad(); f=O_Poshuk();

printf("\nf%2i/%3i(%9.6f,%9.6f)=%10.7f",it,ko,x[0],x[1], f);

stop=1;

for(i=0;i<n;i++) if (fabs(x[i]-x0[i])>=eps) stop= 0;

x0[0]=x[0]; x0[1]=x[1]; f0=f;

}

while ((stop==0)||(it>100));

printf("\nko=%i Press <Enter>", ko);

getch();

}

Рис.1

Рис.2

Рис.3

Алгоритм програми:

Початок

fk= f(k)) ; f(k) у точці Х(k)

K=0;

Знайти точку Х(k+1) min у напрямку

-f(k)

Так

Ні

k=k+1;

виведення

Х(k+1)(k)

Кінець

Міністерство освіти і науки України Національний технічний університет України «Київський політехнічний інститут» Радіотехнічний факультет Кафедра радіоконструювання та виробництва радіо апаратури

Лабораторна робота №5

МЕТОД «НЕЛДЕРА-МІДА»

Роботу прийняла: Роботу виконали: Роботу прийняла: Студенти гр.. РВ-91,

Тимофеєва Ю.Ф. IV курс, РТФ Іщенко Костянтин

Кальнюк Василь

Київ 2013р

Налагоджена програма:

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <vcl.h>

char ch;

int it=0, m, b, i, j, ko, No_Xm=0, Fr_Xm=0, pause=0, n=3;

double eps=0.001, fp, fp1, F_Xm, Fx[3+1], Xx[3+1][3]={{8,4},{9,5},{10,4}};

double Xo[3], X[3], X1[3];

// Дослiджувана фyнкцiя

double F(){ ko++; return X[0]*X[0]+4*X[1]*X[1];}

void SetFx(int k) // Pозрахунок значення фyнкцii

{ for(i=0; i<=n; i++)

if(i!=k) {for(j=0;j<n;j++) X[j]=Xx[i][j]; Fx[i]= F();}

}

double SymplSize() // Calc size of symplex

{ double s, xjmin, xjmax;

s=0;

for(j=0; j<n; j++)

{ xjmin= 1e30; xjmax=-1e30;

for(i=0; i<=n; i++)

{ if(Xx[i][j]<xjmin) xjmin=Xx[i][j];

if(Xx[i][j]>xjmax) xjmax=Xx[i][j];

}

s=s+(xjmax-xjmin);

}

s=s/n;

printf(" Sos=%lf",s);

return s;

}

double Mirror(double a) //Вiддзеркалення Xm для заданого а

{for(i=0; i<n; i++)

{ X[i]= Xo[i]+ a*(Xo[i]-Xx[m][i]);

}

double fp=F(); //printf(")->%lf ",fp);

return fp;

}

void Reduction(double a) // Редукцiя cимплекса

{ printf("Reduction"); // Bибiр найкращоi Xb точки

b=0; for(i=1; i<=n;i++) if(Fx[i]<=Fx[b]) b=i;

for(i=0; i<=n; i++)

if(i!=b)

for(j=0;j<n;j++) Xx[i][j]=Xx[b][j]+a*(Xx[i][j]-Xx[b][j]);

SetFx(b);

}