Скачиваний:
13
Добавлен:
01.05.2014
Размер:
2.24 Кб
Скачать
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>

double A,B;

double f (double x)
{
  return (2*x*x+16/x);
};

double lk (double a, double b, double d)
{
 return ((a+b-d)/2);
};

double mk (double a, double b, double d)
{
 return ((a+b+d)/2);
};

double f1 (double x)
{
  return (4*x-16/(x*x));
};

void swenn (double x0, double h)
 {
	double x1,a,b;
	int k=1;
	if(f(x0)<f(x0+h))
	h=-h;
	x1=x0+h;
	double fx0,fx1;
	fx0=f(x0);
	fx1=f(x0+h);
	while(fx0>=fx1)
	{
	k++;
	x0=x1;
	h=2*h;
	x1=x1+h;
	fx0=f(x0);
	fx1=f(x1);
	}
	printf("kolichestvo iteracij = %d\n",k);
	a=x1;
	b=x0-h/2;
	if (a>b)
	 {
	   B=a;
	   A=b;
	 }
	else
	{
	  B=b;
	  A=a;
	};
}
/////////////////////////////////////////////////////////
double dihotom(double a, double b, double e, double d)
 {
	double l,m,x;
	int k=1;
	while (fabs(b-a)>e)
	 {
	  l=lk(a,b,d);
	  m=mk(a,b,d);
	  if (f(l)<f(m))
		b=mk(a,b,d);
	  else
		a=lk(a,b,d);
	  k++;
	 };
	x=(a+b)/2;
	printf ("kolichestvo iteracij = %d\n",k);
	return(x);
 };
///////////////////////////////////////////////////////////////////
double kubint (double e, double h, double x0)
{
   double x1,xk,xmin,a=A,b=B,z,w,gamma;
 int k=1;
   while ((fabs(f1(xk))>e))
	{
	 z=f1(a)+f1(b)+3*(f(a)-f(b))/b;
	 w=sqrt(z*z-f1(a)*f1(b));
	 gamma=(z-f1(a)+w)/(f1(b)-f1(a)+2*w);
	 if ((gamma<1)&&(gamma>0))
		{
		 xk=a+gamma*(b-a);
		}
	 else
		{
		 if (gamma<0)
			{
			xk=a;
			}
		 if (gamma>1)
			{
			xk=b;
			}
		}
	 if (f1(xk)>0)
		{
		b=xk;
		}
	 else
		{
		 a=xk;
		}
	 k++;
	}
 xmin=xk;
 printf("kolichestvo iteracij = %d\n",k);
 return (xmin);
};
///////////////////////////////////////////////////////////////////
  void main()
{
  double x=1,min;
  double e=0.000001,d=0.00000001;
  double h=0.01;
  clrscr();
  printf("Metod swenna:\n");
  swenn (x,h);
  printf("a=%.5f    (levyj kraj intervala)\n",A);
  printf("b=%.5f    (pravyj kraj intrvala)\n",B);
  printf("\nMetod dihotomii:\n");
  min = dihotom(A,B,e,d);
  printf("Min = %.5f \n",min);
  printf("\nMetod Kubicheskoj interpoliacii:\n");
  min = kubint(e,h,x);
  printf("Min = %.5f \n",min);
}



Соседние файлы в папке all