Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

vm_labs / lr_6 / METHODS

.CPP
Скачиваний:
5
Добавлен:
09.02.2015
Размер:
3.94 Кб
Скачать
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <fstream.h>

extern double F(double);
extern	double	Fi(double);

double BISECT(double Left,double Right,double Eps,int &N)
{
  double E = fabs(Eps)*2.0;
  double FLeft = F(Left);
  double FRight = F(Right);
  double X = (Left+Right)/2.0;
  double Y;

  if (FLeft*FRight>0.0) {puts("ЌҐўҐа­®Ґ § ¤ ­ЁҐ Ё­вҐаў « \n");exit(1);}
  if (Eps<=0.0) {puts("ЌҐўҐа­®Ґ § ¤ ­ЁҐ в®з­®бвЁ\n");exit(1);}

  N=0;
  if (FLeft==0.0)  return Left;
  if (FRight==0.0) return Right;

  while ((Right-Left)>=E)
  {
	N++;
	X = 0.5*(Right + Left);     /* ўлзЁб«Ґ­ЁҐ бҐаҐ¤Ё­л ®в१Є        */
	Y = F(X);
	if (Y == 0.0) return (X);
        if (Y*FLeft < 0.0)
           Right=X;
        else
         { Left=X; FLeft=Y; }

  };
  return(X);
}

double Round (double X,double Delta)
{
 if (Delta<=1E-9) {puts("ЌҐўҐа­®Ґ § ¤ ­ЁҐ в®з­®бвЁ ®ЄагЈ«Ґ­Ёп\n");exit(1);}
 if (X>0.0) return (Delta*(long((X/Delta)+0.5)));
    else    return (Delta*(long((X/Delta)-0.5)));
}



double ITER(double X0,double Eps,int &N, ofstream &f_out)
{
  if (Eps<=0.0) {puts("ЌҐўҐа­®Ґ § ¤ ­ЁҐ в®з­®бвЁ\n");exit (1);}
  double X1=Fi(X0);
  double X2=Fi(X1);
  extern double delta;
  double x_true(0.437906525773);
  N = 2;

  f_out<<"Delta\t"<<delta<<"\nEps\t"<<Eps<<endl
       <<"N\t"<<"X(n-2)\t\tX(n-1)\t\tX(n)\t\t|(X(n)-X(n-1)|\t\t|(X(n)-x)/(X(n)-X(n-1))|\n";

  f_out << N << "\t" << X0 << "\t" << X1 << "\t" << X2 <<  "\t" << fabs(X2-X1) << "\t\t";
  if ((X2-X1)!=0)
	f_out << fabs((X2-x_true)/(X2-X1)) << "\n";
  else
	f_out << "X(n)=X(n-1)=X" << "\n";

  while( fabs(X1-X2)>Eps/*(X1 - X2)*(X1 - X2) > fabs((2*X1-X0-X2)*Eps)*/ )
  {
	X0 = X1;
	X1 = X2;
	X2 = Fi(X1);
	N++;
	f_out << N << "\t" << X0 << "\t" << X1 << "\t" << X2 <<  "\t" << fabs(X2-X1) << "\t\t";
	if ((X2-X1)!=0)
		f_out << fabs((X2-x_true)/(X2-X1)) << "\n";
	else
		f_out << "X(n)=X(n-1)=X" << "\n";

  }
   f_out<<"/------------------------------/\n";
   return(X2);
}




double NEWTON (double X,double Eps,int &N, ofstream &f_out)
{
  extern double F1 (double);
  double Y,Y1,DX;
  double x_pred,x_true(0.437906525773);
  extern double delta;

   f_out<<"Delta\t"<<delta<<"\nEps\t"<<Eps<<endl
      <<"N\t"<<"X(i-1)\t\tX(i)\t\t|X(i)-X(i-1)|\t|(X(i)-X)/(X(i)-X(i-1))|\n";

  N=0;
  do
  {
    x_pred=X;

    Y = F(X);

    if (Y==0.0) {f_out<<"/------------------------------/\n"; return (X);}

    Y1 = F1(X);
    if (Y1==0.0) {puts("Џа®Ё§ў®¤­ п ®Ўа вЁ« бм ў ­®«м\n");exit(1);}

    DX=Y/Y1; X=X-DX;
    N++;

    f_out << N << "\t" << x_pred << "\t" << X << "\t" << fabs(X-x_pred) << "\t" << fabs((X-x_true)/(X-x_pred)) << "\n";
  }
  while (fabs(DX)>Eps);
  f_out<<"/------------------------------/\n";
  return (X);
}


double HORDA(double Left,double Right,double Eps,int &N, ofstream &f_out)
{
  double FLeft = F(Left);
  double FRight = F(Right);
  double X,Y;
  double x_pred,x_true(0.437906525773);
  extern double delta;

  if (FLeft*FRight>0.0) {puts("ЌҐўҐа­®Ґ § ¤ ­ЁҐ Ё­вҐаў « \n");exit(1);}
  if (Eps<=0.0) {puts("ЌҐўҐа­®Ґ § ¤ ­ЁҐ в®з­®бвЁ\n");exit(1);}

  N=0;
  if (FLeft==0.0)  return Left;
  if (FRight==0.0) return Right;

 f_out<<"Delta\t"<<delta<<"\nEps\t"<<Eps<<endl
      <<"N\t"<<"X(i-1)\t\tX(i)\t\t|X(i)-X(i-1)|\t|(X(i)-X)/(X(i-1)-X)|\n";


  x_pred=Right;

  do
  {
	N++;
	X = Left-(Right-Left)*FLeft/(FRight-FLeft);
	Y = F(X);

	/*if ((delta<0.00001)&&(Eps<0.00001))
	{*/

		f_out << N << "\t" << x_pred << "\t" << X << "\t" << fabs(X-x_pred) << "\t" << fabs((X-x_true)/(x_pred-x_true)) << "\n";
	/*}*/
	x_pred=X;

	if (Y == 0.0) {f_out<<"/------------------------------/\n"; return (X);}
	if (Y*FLeft < 0.0)
	 { Right=X; FRight=Y; }
	else
	 { Left=X; FLeft=Y; }


  }
  while ( fabs(Y) >= Eps );
  f_out<<"/------------------------------/\n";

  return(X);

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