Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы 1-5 / LABA3 / LABA3_3
.CPP#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
class Minimum {
public:
double k, // зЁб«® ЁвҐа жЁ© ¬Ґв®¤ ¤«п 宦¤ҐЁп ¬ЁЁ¬г¬
dx, // з «м®Ґ ЇаЁа 饨Ґ и Ј
xm, // в®з®бвм ЇЇа®ЄбЁ¬ жЁЁ ¬ЁЁ¬г¬
X0[2], // бв ав®ў п в®зЄ Ї®ЁбЄ ¬ЁЁ¬г¬
P[2], // бв ав®ў®Ґ Їа ў«ҐЁҐ Ї®ЁбЄ
X_min[2]; // ЇЇа®ЄбЁ¬Ёа®ў ®Ґ § 票Ґ ©¤Ґ®Ј® ¬ЁЁ¬г¬ Ї® Їа ў«ҐЁо
float r1, r2;
Minimum() // ЁЁжЁ «Ё§Ёа㥬 ЇҐаҐ¬ҐлҐ
{
X0[0] = 1.0;
X0[1] = 1.0;
P[0] = -10,0;
P[1] = -10,0;
X_min[0]=0.0;
X_min[1]=0.0;
dx=0.000001;
xm=0.000001;
k=1;
};
double func_dual(double M[2]) // ”гЄжЁп ¤ўге ЇҐаҐ¬Ґле
{
double x1=M[0], x2=M[1], D;
// D=x1*x1+3*x2*x2+2*x1*x2; // вҐбв®ў п дгЄжЁп
D=((x1-5)*(x1-5))+((x2-5)*(x2-5));
return D;
};
double func(double l) // ”гЄжЁп ®¤®© ЇҐаҐ¬Ґ®©
{
double M[2];
M[0]=0.0;
M[1]=0.0;
for (int i=0; i<2; i++)
{
M[i]=X0[i]+l*P[i];
}
return func_dual(M);
};
double SwannGold_section1(double l)
{
double x2=l,
x1=l,
a=0, b=0; // Ї®ЁбЄ Їа ў«ҐЁп
x2=x1+dx; // ўлзЁб«пҐ¬ ўв®аго в®зЄг
if (func(x1) < func(x2)) dx*=-1; // Ё§¬ҐпҐ¬ Їа ў«ҐЁҐ
x2=x1+dx; // ўлзЁб«пҐ¬ ўв®аго в®зЄг
// Ї®ЁбЄ ЁвҐаў « б «®Є «Ё§ жЁҐ© ¬ЁЁ¬г¬
do { dx *= 2; // ўлзЁб«ҐЁҐ § зҐЁп ®ў®Ј® и Ј
x2=x2+dx; // ўлзЁб«пҐ¬ б«Ґ¤гойго в®зЄг
} while ( func(x1) > func(x2));
if (x1<x2)
{
a=x1;
b=x2;
}
else
{
a=x2;
b=x1;
};
return Gold_section1(a, b);
};
double Gold_section1(double a, double b) //‡®«®в®Ґ бҐзҐЁҐ 1 ®в 2 ЇҐаҐ¬Ґле
{
double min_p=0,
l=0, m=0;
do
{
l=a+(0.382*(b-a)); // 室Ё¬ «п¬Ў¤г-«Ґў п в®зЄ
m=a+(0.618*(b-a)); // 室Ё¬ ¬о-Їа ў п в®зЄ
if ( func(l) < func(m))
{
b=m; // ЇҐаҐ¤ўЁЈ Ґ¬ Ја Ёжг бЇа ў «Ґў®
m=a+(0.382*(b-a));
}
else {
a=l; // ЇҐаҐ¤ўЁЈ Ґ¬ Ја Ёжг б«Ґў Їа ў®
l=a+(0.618*(b-a));
}
k++;
min_p=fabs(b-a);
} while ((min_p/xm-1)>1);
return (a+b)/2;
};
Davidon()
{
double L=SwannGold_section1(0);
for (int i=0; i<2; i++)
{
X_min[i]=X0[i]+L*P[i];
};
r1=X_min[0];
r2=X_min[1];
cout<<
"\n\nЊҐв®¤ „ ўЁ¤® .\n’®з®бвм Їа®ЄбЁ¬ жЁЁ = "<<xm<<
"\n—Ёб«® ЁвҐа жЁ©: "<<k<<"\n€§ в®зЄЁ X0 ("<<X0[0]<<","<<X0[1]<<
") Ї® Їа ў«ҐЁо P ("<<P[0]<<";"<<P[1]<<")"<<
"\nЌ ©¤Ґ ¬ЁЁ¬г¬ дгЄжЁЁ = "<<"("<<r1<<"; "<<r2<<")";
};
};
void main(void)
{
clrscr();
Minimum segment; // ᮧ¤ Ґ¬ ®ЎкҐЄв Є« бб Minimum
segment.Davidon(); // ўл§лў Ґ¬ ¬Ґв®¤ „ ўЁ¤®
getch(); // ®¦Ё¤ Ґ¬ ¦ вЁп «оЎ®© Є« ўЁиЁ
}
Соседние файлы в папке LABA3