Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Различные алгоритмы минимизации, реализованные в С++ / all / kub_aprok
.cpp#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#include <stdio.h>
double func(double x)
{
double f=(10*x*x*x+3*x*x+x+5)*(10*x*x*x+3*x*x+x+5);
return f;
}
double df(double x)
{
double fproizv=(20*x*x*x+6*x*x+2*x+10)*(30*x*x+6*x+1);
return fproizv;
}
void main()
{
clrscr();
double a,b,d,z,w,gamma,xmin,h1,x1,x2,f1,f2;
int n=1,k=1;
double eps=0.01;
h1=0.01;
cout<<"‚ўҐ¤ЁвҐ Їа®Ё§ў®«мго в®зЄг\n";
cin>>x1;
x2=x1+h1;
if (df(x1)>0) h1=-h1;
x2=x1+h1;
f1=df(x1);
f2=df(x2);
while (f1*f2>0)
{
x1=x2;
h1=h1*2;
x2=x1+h1;
f1=df(x1);
f2=df(x2);
n++;
}
a=x2-h1;
if(a>x2)
{b=a; a=x2;}
else
b=x2;
cout<<"€бе®¤л© ЁвҐаў « - ["<<a<<";"<<b<<"]";
while (abs(df(d))>eps)
{
z=df(a)+df(b)+3*(func(a)-func(b))/b;
w=sqrt(z*z-df(a)*df(b));
gamma=(z-df(a)+w)/(df(b)-df(a)+2*w);
d=a+gamma*(b-a);
if (df(d)>0)
{
b=d;
}
else
{
a=d;
};
k++;
};
xmin=d;
cout<<"\nЊЁЁ¬г¬ = "<<xmin<<"\nЉ®«ЁзҐбвў® ЁвҐа жЁ©="<<k;
getch();
}
Соседние файлы в папке all