Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 20:00   #1
Килямов Сергей
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 2
По умолчанию Метод деления пополам (дихотомии)

вот что я написал:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "dihotomia.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
double a, b, x1, x2, y1, y2, eps, e, d, En, xmin, xmax, ymax;
int i = 0 ;
eps = 0.001 ;
e = 2.7 ;
a = 0 ;
b = 1 ;
d = 0.001 ;
do
{x1 = (b + a - d) * 0.5 ;
x2 = (b + a + d) * 0.5 ;
y1 = 1 / pow(e, x1) + pow(e, (-2 * x1)) ;
y2 = 1 / pow(e, x2) + pow(e, (-2 * x2)) ;
if (x1 >= x2)
{b = x2;
y2 = 1 / pow(e, x2) + pow(e, (-2 * x2)) ;
}
else
{a = x1;
y1 = 1 / pow(e, x1) + pow(e, (-2 * x1)) ;
}
En = (b - a) * 0.5 ;
xmax = (a + b) * 0.5 ;
}
while(( b + a) * 0.5) ;
ymax = 1 / pow(e, xmax) + pow(e, (-2 * xmax)) ;

Edit1->Text = xmax ;

Edit2->Text = ymax ;
}

//---------------------------------------------------------------------------
Ничего не считает кто что посоветует? писал в C++Builder 6
Вложения
Тип файла: rar Метод дихотомии.rar (350.1 Кб, 10 просмотров)
Сер 71
Килямов Сергей вне форума Ответить с цитированием
Старый 31.10.2011, 22:33   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

О, боги! Вы что вообще ищете? Корень или экстремум?

Последний раз редактировалось Vago; 31.10.2011 в 22:49.
Vago вне форума Ответить с цитированием
Старый 01.11.2011, 16:15   #3
Килямов Сергей
Новичок
Джуниор
 
Регистрация: 30.10.2011
Сообщений: 2
По умолчанию

ищу максимум функции
Сер 71
Килямов Сергей вне форума Ответить с цитированием
Старый 01.11.2011, 18:13   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Код:
#include <math.h>
#include <stdio.h>

#define DEBUG_PRINT 0

double fn( double x ) {
   return ( 1. / (exp( x ) + exp( -2. * x ) ) ) ;
}

int main(){

   double   a = 0. , 
            b = 1. , 
            x1, x2, xStar,
            y1, y2, yStar ,
            eps = 0.001, 
            delta = 0.0001 ;
 
   while ( (b-a) > eps ) {
      x1 = (b + a - delta ) / 2. ;
      x2 = (b + a + delta ) / 2. ;
      y1 = fn( x1 ) ;
      y2 = fn( x2 ) ;
      if ( y1 >= y2 )
         b = x2 ;
      else
         a = x1 ;
#if DEBUG_PRINT == 1
      printf( "%.4g %.4g\n", a, b ) ;
#endif
   }
   xStar = (a + b ) / 2 ;
   yStar = fn( xStar ) ;

   printf( "Max. value F(%.3g) = %.3g\n", xStar, yStar ) ;

   return 0 ;

}
Привет составителям вашей методички, написавшим в "Шаге 2" действия, предпринимаемые при поиске МИНИМУМА и ни слова об этом не сказавшим. (О том, что весь этот так называемый "алгоритм" попросту содержит формальные ошибки, ибо, в реальности, на каждом шаге a либо b должны меняться - деликатно умолчим).

Преподавателям программирования, не рассказавшим вам про старшинство операций, и не сообщившим, что для вычисления "e в степени" в Си существует ф-я exp() - отдельный привет!

Ввод вместо присваиваний и хотя бы элементарный контроль введённых данных - уж сами, пожалуйста...
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод деления пополам Си++ nikozavr Общие вопросы C/C++ 10 12.02.2011 11:36
Метод деления отрезка пополам Витяака Помощь студентам 2 23.12.2010 11:42
Метод деления отрезка пополам Delphi lordve Помощь студентам 0 06.12.2009 23:57
поиск корня методом деления пополам jewels Общие вопросы C/C++ 2 16.11.2009 01:09
Вычисление корня уравнения методом деления отрезка пополам Absent Помощь студентам 12 25.11.2007 17:54