Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Различные алгоритмы минимизации, реализованные в С++ / all / BOLZPAUL
.CPP#include <conio.h>
#include <iostream.h>
#include <math.h>
long double otv(long double x)
{
long double f;
f=x*x*x*x-14*x*x*x+60*x*x-70*x;
return f;
}
long double Proiz(long double x)
{
long double f;
f=4*x*x*x-42*x*x+120*x-70;
return f;
}
void Swann(long double &x1,long double &x2)
{
long double h,f1,f2;
h=0.01;
x2=x1+h;
f1=otv(x1);
f2=otv(x2);
if (f1<f2)
{
x2=x1-h;
f2=otv(x2);
while (f2<f1)
{
h*=2;
x1=x2;
x2-=h;
f1=otv(x1);
f2=otv(x2);
}
cout<<"Ќ з «мл© ЁвҐаў «: ["<<x2<<";"<<x1<<"]";
}
else
{
while (f1>f2)
{
h*=2;
x1=x2;
x2+=h;
f1=otv(x1);
f2=otv(x2);
}
cout<<"Ќ з «мл© ЁвҐаў «: ["<<x1<<";"<<x2<<"]";
}
if(x1>x2)
{
h=x1;
x1=x2;
x2=h;
}
}
void main()
{
clrscr();
long double e=0.000001,a,b,c,x,x1=1,x2=0,fa,fb,fc,fd,d;
int k=1;
Swann(x1,x2);
fa=Proiz(x1);
fb=Proiz(x2);
a=x1;
b=x2;
for (int i=0;i<5;i++)
{
x=(a+b)/2;
c=Proiz(x);
if (c>0) b=x;
else a=x;
k++;
}
c=b;
b=(a+c)/2;
fa=otv(a);
fb=otv(b);
fc=otv(c);
d=0.5*(fa*(b*b-c*c)+fb*(c*c-a*a)+fc*(a*a-b*b))/(fa*(b-c)+fb*(c-a)+fc*(a-b));
fd=otv(d);
while((abs(1-d/b)>e) & (abs(1-fd/fb)>e))
{
if((b<d) & (fb<fd)) c=d;
if((b<d) & (fb>fd)) a=b;
if((b>d) & (fb<fd)) a=d;
if((b>d) & (fb>fd)) c=b;
b=(a+c)/2;
d=(a+b)/2+0.5*(fa-fb)*(b-c)*(c-a)/(fa*(b-c)+fb*(c-a)+fc*(a-b));
fa=otv(a);
fb=otv(b);
fc=otv(c);
fd=otv(d);
k++;
}
x=(b+d)/2;
cout<<endl<<"—Ёб«® ЁвҐа жЁ©: "<<k;
cout<<endl<<"€бЄ®¬ п в®зЄ x* = "<<x;
getch();
}
Соседние файлы в папке all