На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Ищем интеграл , Интегрирование функции
    Вот я решил написать программку, которая бы умела интегрировать функцию. Решил сделать самым простым методом.
    Итак, S - сумма площадей манюсеньких прямоугольничков шириной TOL=0.001 и высотой y2 (micros). Пользователь вводит с клавиатуры промежутки интегрирования, тоесть a и b . После этого точка отсчета x1=a (присваивается а). Дальше выполняем цикл while (x2<=b). Находим x2=x1+TOL, находим y2 (функция x^2), находим площадь манюсенького прямоугольничка micros=fabs(y2)*TOL (ибо его ширина равна TOL ). в ОБЩУЮ сумму додаем полученное значение площади масипусенького прямоугольничка и x1=x2. Все вроде как идеально, только нифига не работает. Прога выдает результат ноль. В чем проблема??? И можно ли ваще реализовать интегрирование вышеописаным методом? Жду помощи

    ExpandedWrap disabled
      #include <iostream.h>
      #include <math.h>
      #include <conio.h>
      void  main()
      {
      clrscr ();
      float S,micros,x1,x2,y2,a,b,TOL;
      cout<<"Vvodim promeshutki integrirovania";
      cout<<"Vvedite a";
      cin>>a;
      cout<<"Vvedite b";
      cin>>b;
      S=0; TOL=0.001; x1=a; micros=0;
      while (x2<b)
      {
      x2=x1+TOL;
      y2=x2*x2;
      micros=fabs(y2)*TOL;
      S=S+micros;
      x1=x2;   }
      cout<<"Znachenie integrala x^2 na promeshutke ot " <<a<<"do "<<b<<" Ravno"<< S;
      getch ();
      }
      Цитата Vitalik2388 @
      Все вроде как идеально

      А ты уверен, что на момент начала цикла x2 не будет больше, чем b? Я к тому, что ты x2 (опять же, до цикла) нигде не инициализируешь, а уже используешь...
        всё норм считает, может, Вы вводите a меньшее, чем b?

        Добавлено
        volvo877
        +1
          Цитата Radagast @
          А ты уверен, что на момент начала цикла x2 не будет больше, чем b? Я к тому, что ты x2 (опять же, до цикла) нигде не инициализируешь, а уже используешь...

          Ой... А это действительно так. Теперь все нормально работает. :D
          С такой переменной TOL считает не хуже MathCad!

          Вот теперь ещё вопросик. Как сделать так, чтобы пользователь мог вводить ФУНКЦИЮ ВРУЧНУЮ!!! Я поменяю x2 на x, это не вопрос вообще. Но, чтобы получилось так, как будто я вручную ввел строку интегрируемой функции. А то от программы, что считает одну функцию толку ваще мало.

          Задача сводится к упрошенной.
          1. Введите функцию (пользователь вводит функцию);
          2. Введите x (юзик вводит x)
          3. Значение функции y(x)= (прога посчитала)
              Vitalik2388 - для более точных методов интегрирования почитай "Численное интегрирования" из курса "Численный анализ" ;)

              при вводе b надо проверять если b < a ;)

              правильно было бы написать
              ExpandedWrap disabled
                cout<<"Vvedite n";//Число шагов иначе у тебя может быть ситуация когда площадь одного прямоугольника не будем считаться
                                  // например x2 > b   a  x1 < b ->>> выход из цикла и ты теряешь прямоугольник [x1,  b ]  
                cin>>n;
                TOL = ( b - a ) / n;
                x2=x1+TOL;
                while (x2<=b)
                {
                y2=x2*x2;
                micros=fabs(y2)*TOL;
                S=S+micros;
                x1=x2;
                x2=x1+TOL;
                }


              я бы так это написал бы

              ExpandedWrap disabled
                ....
                cout<<"Vvedite n"
                cin>>n;
                h = ( b - a ) / n;
                for( i = 0; i <= n; i++)
                {
                 y = f ( a + i*h );// функция
                 S = S  + y * h;
                }

              ;)
              Сообщение отредактировано: vovan01 -
                Цитата vovan01 @
                при вводе b надо проверять если b < a ;)

                integrate(f(x), x, a, b) == -integerate(f(x), x, b, a)
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0276 ]   [ 15 queries used ]   [ Generated: 18.05.24, 08:49 GMT ]