Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
01.05.2014
Размер:
2.04 Кб
Скачать
Спецификация программы:

Каждый метод реализован в виде функции.     
Переменные в программе: 
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;
 }
Соседние файлы в папке Метод Свенна