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

float f(float x1,float x2)
{  return (-12*x2+4*x1*x1+4*x2*x2-4*x1*x2);
}

float df(float x1,float x2,float p1,float p2)
{
  return ((8*x1-4*x2)*p1+(-12+8*x2-4*x1)*p2);
}

void main()
{   clrscr();

    float al;
    float al1;
    float al2;
    float p[2];
    float x[2];
    float eps;

    cout<<"		‚室­лҐ ¤ ­­лҐ: "<<endl;
    cout<<"‚ўҐ¤ЁвҐ x: ";
    cin>>x[1];
    cin>>x[2];
    cout<<"‚ўҐ¤ЁвҐ ­ Їа ў«Ґ­ЁҐ p:";
    cin>>p[1];
    cin>>p[2];
    cout<<"‚ўҐ¤ЁвҐ в®з­®бвм eps = ";
    cin>>eps;
    float n=fabs((f(x[1],x[2])-df(x[1],x[2],p[1],p[2]))/df(x[1],x[2],p[1],p[2]));
    if(n>1) {al=1;}
    else {al=n;}
    cout<<"Ќ з «м­л© и Ј al = "<<al<<endl;

    cout<<endl<<endl<<"  	  ‚л室­лҐ ¤ ­­лҐ:"<<endl;

    float x10=x[1];
    float x20=x[2];
    float p10=p[1];
    float p20=p[2];
    int t;

     if (df(x10,x20,p[1],p[2])>0)
      {
	p10=-p10;
	p20=-p20;
      }
      float ddf=df(x10,x20,p10,p20);
     while(ddf*df(x[1],x[2],p10,p20)>=0)
      {
	 if (df(x[1],x[2],p[1],p[2])!=0)
	 {
	 x[1]=x[1]+al*p10;
	 x[2]=x[2]+al*p20;
	 al=2*al;
	 p[1]=p10;
	 p[2]=p20;
	 }
	 else
	  {
	    cout<<"ЂЇЇа®ЄбЁ¬ЁагойЁ© ¬Ё­Ё¬г¬ е = ("<<x[1]<<","<<x[2]<<")'"<<endl;
	    while(!kbhit());
	    exit(1);
	  }
	  t++;
      }
      if (t==1) {al1=0;   al2=al/2;}
      else  { al1=al/4;   al2=al/2;}

     cout<<"Ќ з «м­л© Ё­вҐаў « Ї® е: ®в ["<<x[1]-al2*p10<<";"<<x[2]-al2*p20<<"]' ¤® ["<<x[1]<<";"<<x[2]<<"]'"<<endl;
     int k=0;
      x10=x[1]-al2*p10;
      x20=x[2]-al2*p20;
      float x11=x[1];
      float x21=x[2];
      while (((fabs(al2)>=eps) || (fabs(df(x[1],x[2],p10,p20))>=eps)) && (k<5))
       {
	 al=al2/2;
	 x[1]=x10+al*p10;
	 x[2]=x20+al*p20;
	 if(df(x[1],x[2],p10,p20)>0) {al2=al;}
	 else {x10=x10+al*p10;x20=x20+al*p20;}
	 k++;
       }

      float z;
      float w;
      while (fabs(df(x[1],x[2],p10,p20))>=eps)
       {
	 z=df(x10,x20,p10,p20)+df(x11,x21,p10,p20)+3*(f(x10,x20)-f(x11,x21))/sqrt(x11*x11+x21*x21);
	 w=sqrt(z*z-df(x10,x20,p10,p20)*df(x11,x21,p10,p20));

	 al=al2*((w+z-df(x10,x20,p10,p20))/(w-df(x10,x20,p10,p20)+df(x11,x21,p10,p20)));
	 x[1]=x10+al*p10;
	 x[2]=x20+al*p20;

	 if (df(x[1],x[2],p10,p20)<0)
	  {x10=x10+al*p10;x20=x20+al*p20;}
	 else
	  {x11=x10+al*p10;x21=x20+al*p20;al2=al;}

	 k++;
       }


      cout<<"ЂЇЇа®ЄбЁ¬ЁагойЁ© ¬Ё­Ё¬г¬ е = ("<<x[1]<<","<<x[2]<<")'"<<endl;
      cout<<"Љ®«ЁзҐбвў® ЁвҐа жЁ© = "<<k<<endl;
      cout<<"Њ®¤г«м Їа®Ё§ў®¤­®© ў Ї®«г祭­®© в®зЄҐ а ўҐ­ = "<<fabs(df(x[1],x[2],p10,p20))<<endl;

   while(!kbhit());

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