Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Метод Дэвидсона / sven+bolcan+dev
.cpp#include<iostream.h>
#include<conio.h>
#include<math.h>
double x10=-0.5,p1=1,x11=1,p2=0,e=0.01,x1min,x2min,x1,x2,aa,ab,ac;
double g1,g2;
int k=0;
int k1=0;
double y(double a)
{x1=x10+a*p1;
x2=x11+a*p2;
return (-12*x2+4*x1*x1+4*x2*x2-4*x1*x2); }
double grad(double(alpfa1))
{
x1=x10+alpfa1*p1;
x2=x11+alpfa1*p2;
g1=8*x1+-4*x2;
g2=-12+8*x2-4*x1;
return (g1*p1+g2*p2);
}
double ah=0.1,ah1,a2,a,a1,eps=0.00001,Amin;
void Swenn()
{
//clrscr();
a1=0;
a2=a1+ah;
if(y(a2) > y(a1))
{ah=-ah;
a2=a1+ah;
}
ah1=ah;
a=a2;
do
{ah=2*ah;
a=a+ah;
}
while(y(a)<y(a-ah));
ab=a;
aa=a-1.5*ah;
if(ah1>0){ aa=aa;
ab=ab;}
else ac=aa,aa=ab,ab=ac;
cout<<"Nachalnii interval:"<<endl;
cout<<"["<<aa<<","<<ab<<"]"<<endl;
getch();
}
double alpfaA, alpfaB, alpfaC;
void Balsano()
{
alpfaA=aa;
alpfaB=ab;
do
{
alpfaC=(alpfaA+alpfaB)/2;
if (grad(alpfaC)>0) {
alpfaB=alpfaC;
} else {
alpfaA=alpfaC;
}
k++;
}
while(fabs(grad(alpfaC))>=eps);
{
x1min=x10+alpfaC*p1;
x2min=x11+alpfaC*p2;
Amin=-12*x2min+4*x1min*x1min+4*x2min*x2min-4*x1min*x2min;
}
cout<<endl<<"Balsamo:"<<endl<<"x1min = "<<x1min<<endl<<"x2min = "<<x2min<<endl;
cout<<"Amin= "<<Amin<<endl<<"alpfaC= "<<alpfaC<<endl;
cout << "k = " << k << endl<<endl;
getch();
}
double z,w,alr,x11min,x22min,Amin1,alr1,e1=0.01;
void Dev()
{
do
{
z=grad(aa)+grad(ab)+3*(y(aa)-y(ab))/(ab-aa);
w=sqrt(pow(z,2)-grad(aa)*grad(ab));
alr=aa+(ab-aa)*(w-grad(aa)+z)/(2*w-grad(aa)+grad(ab));
k1++;
if(grad(alr)>=0)
{
ab=alr;
aa=aa;
}
else
{
aa=alr;
ab=ab;
}
}
while (fabs(grad(alr)>=e1));
x11min=x10+alr*p1;
x22min=x11+alr*p2;
Amin1=-12*x22min+4*x11min*x11min+4*x22min*x22min-4*x11min*x22min;
cout<<endl<<"Dev: "<<endl<<"z = "<<z<<endl<<"w = "<<w<<endl<<"alr = "<<alr<<endl<<"Amin1 = "<<Amin1<<endl<<"k1= "<<k1<<endl;
cout<<"x11min = "<<x11min<<endl<<"x22min = "<<x22min<<endl;
cout<<"grad(alr)= "<<grad(alr)<<endl;
cout<<"grad(aa)= "<<grad(aa)<<endl<<"grad(ab)= "<<grad(ab)<<endl;
cout<<"y(aa)= "<<y(aa)<<endl<<"y(ab)= "<<y(ab)<<endl;
getch();
}
void main()
{
Swenn();
Balsano();
Dev();
}
Соседние файлы в папке Метод Дэвидсона