Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Различные алгоритмы минимизации, реализованные в С++ / all / LABA1TEM
.CPP#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
double f (double x)
{
return (x*x+2*x);
};
double f1 (double x)
{
return (2*x+2);
};
void main()
{
double x0=4,x1,h=0.01,e=0.000001,a,b,A,B;
///////////////////////////////////////////////////////////
//--------------------metod Swenna-----------------------//
///////////////////////////////////////////////////////////
if(f(x0)<f(x0+h))
h=-h;
x1=x0+h;
while(f(x1)<=f(x0))
{
x0=x1;
x1=x0+h;
h=2*h;
}
B=b=x0;
A=a=x1;
clrscr();
printf("a=%.2f (levyj kraj intervala)\n",a);
printf("b=%.2f (pravyj kraj intrvala)\n",b);
////////////////////////////////////////////////////////////
//--------------Metod trehtochechnogo poiska--------------//
////////////////////////////////////////////////////////////
double xm,x2,l,x;
int k=1;
l=fabs(b-a);
while(l>e)
{
xm=(a+b)/2;
l=fabs(b-a);
x1=a+l/4;
x2=b-l/4;
if(f(x1)<f(xm))
{
b=xm;
xm=x1;
}
else
{
if((f(x1)>=f(xm)) && (f(xm)<=f(x2)))
{
a=x1;
b=x2;
}
else
{
a=xm;
xm=x2;
};
};
};
x=xm;
printf("min=%.2f (po metodu troichnogo poiska)\n",x);
////////////////////////////////////////////////
//------------Metod interpoliacii-------------//
////////////////////////////////////////////////
a=A;
b=B;
xm=b-f1(b)*(b-a)/(f1(b)-f1(a));
while(fabs(f1(xm))>e)
{
xm=b-f1(b)*(b-a)/(f1(b)-f1(a));
if (f1(xm)>0)
{
b=xm;
}
else
{
a=xm;
};
};
printf("min=%.2f (po metodu interpoliacii)",xm);
}
Соседние файлы в папке all