 
        
        
          Добавил:
          
          
        
        
    
            Studfiles2
            
            
            
            
            
            Опубликованный материал нарушает ваши авторские права? Сообщите нам.
          
          Вуз:
          Предмет:
          Файл:Метод Свенна / sven-zs1
.cppСпецификация программы:
Каждый метод реализован в виде функции.     
Переменные в программе: 
a, b – текущий интервала локализации
h – размер шага
x – аппроксимирующий минимум
x1 – стартовая точка
l, m - точки деления интервала локализации в ЗС1
            k – счетчики числа итераций. 
Текст программы:
#include <iostream.h>
#include <math.h>
#include <conio.h>
long double a,b;
int k1,k;
double Sven (long double,long double,long double);
double ZS1 (long double,long double);
double fx(long double);
/**************************************************************************/
void main()
 {
  clrscr();
  long double h=0.01,x2,x1;
  x1=1;
  x2=x1+h;
  if ( fx(x2) > fx(x1))
   h=-h;
  h=Sven (x1,x2,h);
  cout << " a " << a << endl;
  cout << " b " << b << endl;
  long double m,l,x;
  m=a+0.618*(b-a);
  l=a+0.382*(b-a);
  x=ZS1 (m,l);
  cout << endl <<" x " << x << endl;
  cout << endl <<" k(Svenn) " << k1 << endl; 
  cout << endl <<" k(ZS1) "    << k << endl;
  getch();
 }
/**************************************************************************/
double Sven(long double x1, long double x2, long double h)
 {
  long double x3,z;
  x2=x1+h;
  while (1)
   {
    h=2*h;
    x3=x2+h;
    if (fx(x3)>fx(x2))
     break;
    x1=x2;
    x2=x3;
  k1=k1+1;
   }
  a=x1;
  b=x3;
  if (a>b)
   {
    z=b;
    b=a;
    a=z;
   }
  return h;
 }
/**************************************************************************/
double ZS1(long double m, long double l)
 {
  long double x;
  while (1)
   {
    if (fx(l) < fx(m))
     {
      b=m;
      m=l;
      l=a+0.382*(b-a);
     }
    else
     {
      a=l;
      l=m;
      m=a+0.618*(b-a);
     }
    if (abs(b-a)<0.001)
     break;
    k=k+1;
   }
  x=(a+b)/2;
  return x;
 }
/**************************************************************************/
double fx(long double x)
 {
  long double s,f;
  s=(2*pow(x,2)+3*pow(2.7,(-x)));
  return s;
 }
          Соседние файлы в папке Метод Свенна
          
      
    
    
    
          