Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы Гаусса-Зейделя, Хука-Дживса и Коши / циклического покоординатного спуска
.cpp#include<conio.h>
#include<math.h>
#include<iostream.h>
#include<stdlib.h>
double *grad (double x1,double x2){
double *g;
g=new double [2];
//g[0]=(-4*(x2-x1*x1)*x1-2*(1-x1));;
//g[1]=(2*(x2-x1*x1));
g[0]=16*x1+4*x2;
g[1]=4*x1+10*x2;
return g;
}
double *ort(int k)
{
double *o;
o=new double [2];
if(k%2==0){ o[0]=0; o[1]=1; }
else {o[0]=1; o[1]=0;}
return o;
}
double fun(double a,double x01,double x02,double p[2]){
//return (x02+a*p[1]-(x01+a*p[0])*(x01+a*p[0]))*(x02+a*p[1]-(x01+a*p[0])*(x01+a*p[0]))+(1-(x01+a*p[0]))*(1-(x01+a*p[0]));
return (8*(x01+a*p[0])*(x01+a*p[0])+4*(x02+a*p[1])*(x01+a*p[0])+5*(x02+a*p[1])*(x02+a*p[1]));
}
void main(void)
{
// clrscr();
double I0=0,al,I1,x,y,a,b,n,d,c,x1,x2,x01,x02,h1=0.01,e=0.0001,*p,*g;
p=new double [2];
g=new double [2];
int k=1;
x01=10;
x02=10;
do{
x1=x01;
x2=x02;
p=ort(k);
I1=I0+h1;
if(fun(I0,x1,x2,p)<fun(I1,x1,x2,p))
{
h1=-h1;
//I1=I0+h1;
}
do
{
h1=2*h1;
I1=I1+h1;
x=fun((I1-h1),x1,x2,p);
y=fun((I1),x1,x2,p);
}
while(fun((I1-h1),x1,x2,p)>fun(I1,x1,x2,p));
a=I1-1.5*h1;
b=I1;
if(a>b)
{
n=a;
a=b;
b=n;
}
//////////////////////Paulla/////////////////////////
double c,d;
c=b;
b=(a+b)/2;
d=((a+b)/2+0.5* (((fun(a,x1,x2,p)-fun(b,x1,x2,p))*(b-c)*(c-a))/ (fun(a,x1,x2,p)*(b-c)+fun(b,x1,x2,p)*(c-a)+fun(c,x1,x2,p)*(a-b))));
while ( (fabs((d-b)/2)>=e) || (fabs((fun(d,x1,x2,p)-fun(b,x1,x2,p))/fun(b,x1,x2,p))>=e) )
{
if (b<d)
{
if (fun(b,x1,x2,p)<fun(d,x1,x2,p))
{
c=d;
}
else
{
a=b;
b=d;
};
}
else
{
if (fun(b,x1,x2,p)<fun(d,x1,x2,p))
{
a=d;
}
else
{
c=b;
b=d;
};
};
d=((a+b)/2+0.5* (((fun(a,x1,x2,p)-fun(b,x1,x2,p))*(b-c)*(c-a))/ (fun(a,x1,x2,p)*(b-c)+fun(b,x1,x2,p)*(c-a)+fun(c,x1,x2,p)*(a-b))));
}
cout<<"k: "<<k<<"\n";
c=(b+d)/2;
al=c;
x01=x1+al*p[0];
x02=x2+al*p[1];
cout <<"\nmin: "<<x01<<"\n";
cout <<"\nmin: "<<x02<<"\n";
g=grad(x01,x02);
k++;
} while(sqrt((g[0]*g[0])+(g[1]*g[1]))>e);
//cout<<"\nKol-vo iterracii: "<<k;
delete[] p;
delete[] g;
}
Соседние файлы в папке Методы Гаусса-Зейделя, Хука-Дживса и Коши