Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Различные алгоритмы минимизации, реализованные в С++ / all / SV2ZS-PA
.CPP#define X0 0.5
#define wagSv 0.005
#define e1 0.000001
#define e2 0.000001
#define NumIt 5
#include<conio.h>
#include<stdio.h>
#include <math.h>
double func(double x)
{
double f;
// f=3*x*x+12/(x*x*x)-5;
f=2*x*x+3*exp(-x);
return f;
}
////////////////////////////////////////////
void Svenn2(double* a,double* b,double* c)
{
double h=wagSv,x1=X0,x2=x1+h,x3;
int i=0;
if( func(x2) > func(x1) )
{
h=-h;
x2=x1+h;
}
while( func(x1) > func(x2) )
{
x1=x2;
h=2*h;
x2=x1+h;
i++;
}
x3=(x1+x2)/2;
if(func(x3)>func(x1))
{
*a=(x1-h/2<x3)?x1-h/2:x3;
*b=x1;
*c=(x3>x1-h/2)?x3:x1-h/2;
}
else
{
*a=(x1<x2)?x1:x2;
*b=x3;
*c=(x2>x1)?x2:x1;
}
printf("\n €вҐаў «, Ї®«гзҐл© ¬Ґв®¤®¬ ‘ўҐ2 § %d ЁвҐа жЁ© ( %f , %f )",i,*a,*c);
printf(" \n\n Џ®«гзҐлҐ в®зЄЁ a= %f ,b = %f ,c= %f ",*a,*b,*c);
}
////////////////////////////////////////////////
void zs2(double *a,double *b)
{
int k=0;
double x1,x2,L;
while( (fabs(*b-*a)>=e1) && k!=NumIt)
{
L=*b-*a;
x1=*a+0.618*L;
x2=*a+*b-x1;
if(func(x1)>func(x2))
(x1>x2) ? *b =x1 : *a =x1;
else
(x1>x2) ? *a =x2 : *b =x2;
k++;
}
printf("\n\n‘㦥ЁҐ ЁвҐаў « ¬Ґв®¤®¬ §®«®в®Ґ бҐзҐЁҐ 2 ");
printf("§ %d ЁвҐа жЁ© ( %f ; %f)",k,*a,*b);
}
///////////////////////////////////////////////
void Pauell(double a1, double c1)
{
double a=a1,b=(c1+a1)/2,c=c1,d;
int k=0;
d = 0.5*(func(a)*(b*b-c*c)+func(b)*(c*c-a*a)+func(c)*(a*a-b*b))/
(func(a)*(b-c)+func(b)*(c-a)+func(c)*(a-b));
while((fabs((d-b)/b)>e1) || (fabs((func(d)-func(b))/func(b))>e2))
{
k++;
if(func(b)>func(d))
{
(b>d)? c =b: a =b;
b = d;
}
else
(b>d)? c =d: a =d;
d = 0.5*((func(a)-func(b))*(b-c)*(c-a))/
(func(a)*(b-c)+func(b)*(c-a)+func(c)*(a-b))+0.5*(a+b);
}
printf("\n ЊЁЁ¬ «м®Ґ § 票Ґ ¬Ґв®¤®¬ Џ гн«« %f § %d ЁвҐа жЁЁ",(b+d)/2,k);
}
///////////////////////////////////////
void main(void)
{
double a,b,c;
clrscr();
Svenn2(&a,&b,&c);
zs2(&a,&c);
Pauell(a,c);
getch();
}
Соседние файлы в папке all