Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Метод Фиббоначчи / ZS1 - kvadr interpol - ekstrapol
.cpp#include<conio.h>
#include<math.h>
#include<iostream.h>
double f(double x)
{
//if(x>=0) return (4*x*x*x-3*x*x*x*x);
//else return (4*x*x*x+3*x*x*x*x);
return (2*x*x+16/x);
}
double dif (double x)
{
//if(x>=0) return (12*x*x-12*x*x*x);
//else return (12*x*x+12*x*x*x);
return (4*x-16/(x*x));
}
void main()
{
// clrscr();
double a1,x0=1,x1,h1=0.01,a,b,c,n,x2,min,e=0.001,I,M,b1;
int k=1;
x1=x0+h1;
if(f(x0)<f(x1))
{
h1=-h1;
x1=x0+h1;
}
do
{
h1=2*h1;
x1=x1+h1;
k++;
}
while(f(x1-h1)>f(x1)&&dif(x1-1.5*h1)*dif(x1)>0);
a=x1-1.5*h1;
b=x1;
if(a>b)
{
n=a;
a=b;
b=n;
}
a1=a;
b1=b;
//////////////////////ZS-1/////////////////////////
cout<<a<<"\n";
cout<<b<<"\n";
do{
M=a+0.618*fabs(b-a);
I=a+0.382*fabs(b-a);
k=1;
if(f(I)<f(M)){
b=M;
M=I;
I=a+0.382*fabs(b-a);
}
else {
a=I;
I=M;
M=a+0.618*fabs(b-a);
}
k++;
}while(fabs(b-a)>e);
min=(a+b)/2;
cout<<"ZS-1\n";
cout<<"Minimum: "<<min<<"\n";
cout<<"Iteracii: "<<k;
getch();
//////////////lineinaya Interpolyaciya (metod sekuchih)////////////////////
do{
x1=b1-dif(b1)*(b1-a1)/(dif(b1)-dif(a1));
if(dif(x1)>0)
b1=x1;
else a1=x1;
k++;
}while(fabs(dif(x1))>e);
cout<<"\nlineinaya Interpolyaciya (metod sekuchihsya)";
cout<<'\n';
cout<<"Minimum: "<<x1<<"\n";
cout<<"Iteracii: "<<k;
getch();
///////////////Interpolyacii-Extrapolyaciya///////////////////
int d;
k=1;
do{
b=d;
x1=(a1+b1)/2;
a=x1-h1;
b=x1;
c=x1+h1;
d=1/2*(f(a1)*(b*b-c*c)+f(b1)*(c*c-a*a)+f(c)*(a*a-b*b))/(f(a1)*(b-c)+f(b1)*(c-a)+f(c)*(a-b));
k++;
cout<<"_"<<k;
}while(fabs((d-b)/b)>e && fabs((f(d)-f(b))/f(b))>e);
min=(b+d)/2;
cout<<"Interpolyacii-Extrapolyaciya";
cout<<"Iteracii: "<<k;
cout<<"Minimum: "<<min;
}
Соседние файлы в папке Метод Фиббоначчи