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

Void main()

{ clrscr(); printf("\n Tochnist poshuku ekstremumu %lf",eps);

//printf("\n' ' - stop; Enter - continue by step; a - to end.");

SetFx(-1);

// 1. рoзрахунок значень функцii

do

{ it++;

// 2. Виведення значень функцii симплекса

printf("\n%d:",it);

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

printf(" F(%5.3lf,%5.3lf)=%6.5lf",Xx[i][0],Xx[i][1],Fx[i]);

if(pause==0)

{ scanf("%c",&ch);

switch (ch)

{ case '\n': break;

case 'a' : pause=1; break;

case ' ' : exit(1);

}

}

// 3. Bибiр найгiршоi Xm точки cимплекса

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

// 4. perevirka povtoren

if(No_Xm!=m) { No_Xm=m; Fr_Xm=1;}

else { if(Fr_Xm==3) goto m1; else Fr_Xm++;}

// 5. Pозрахунок центра вiдзеркалення

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

{ Xo[j]= 0; for(i=0; i<=n; i++) if(i!=m) Xo[j]+=Xx[i][j];

Xo[j]= Xo[j]/n; // áåç Xm

}

// 6. Деформацiя cимплекса

F_Xm= Fx[m]; printf("\n");

fp1= Mirror(1); for(i=0; i<n; i++) X1[i]=X[i];

if(fp1<F_Xm)

{ fp= Mirror(2);

if(fp<fp1) {for(i=0; i<n; i++) Xx[m][i]=X [i]; Fx[m]=fp;}

else {for(i=0; i<n; i++) Xx[m][i]=X1[i]; Fx[m]=fp1;}

} else

{ fp= Mirror(0.5);

if(fp<F_Xm) {for(i=0;i<n;i++) Xx[m][i]=X[i]; Fx[m]=fp;}

else m1: Reduction(0.5);

}

} while (SymplSize()>eps);

printf("\nFmin(%.7lf,%.7lf)=%.7f",Xx[b][1],Xx[b][2],Fx[b]);

printf(". ko=%d. Push <Enter>",ko);

getch();

}

Результати:

Рис.1

Рис.2

Рис.3

Рис.4

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

Початок

Задаємо X0,X1…Xn

Задаємо F

Так

Ні

Віддзеркалення

Ні

Так

Ні

Так

F<

Редукція

Стиснення

Ні

Так

Розширення

Кінець