воскресенье, 1 декабря 2019 г.

Этап 2. Архимедов рычаг


Объект исследования: компьютерная арифметика.
Цель исследования: Выявить влияние пути решения на результат компьютерных вычислений.
Задачи исследования:
  1. Развить навыки выбора метода решения задачи.
  2. Научиться составлять план проведения экспериментальной работы.
  3. Научиться проводить компьютерный эксперимент. 
  4. Научиться анализировать результаты экспериментальной работы.


План исследования:
  1. получение задания
  2.  получить решение предложенной задачи с помощью не менее двух различных вычислительных схем.
  3.  выбрать наиболее точный путь решения
  4.  сформулировать гипотезу и проверить ее на не менее трех новых примерах;
  5. дать ответ на проблемный вопрос.
Наша задача: (1-1/4)(1-1/9)(1-1/16)...(1-1/n^2)
После обсуждения в команде было решено рассмотреть три схемы:
  1.    получение точного результата,  
  2. вычисление суммы при прохождении ее слева направо (Sp),
  3. вычисление суммы при прохождении ее справа налево (Sl).
За реализацию первой схемы взялся математик нашей команды .
Она обнаружила, что точным решением является: 0.5((n+1)/n)

За реализацию второй и третей схемы и написанием полной программы, взялся программист нашей команды .
#include <iostream>

using namespace std;
int main()
{
  double S, Sp, Sl;
  int n, i;
  cin>>n;
     S=(double)(0.5*(n+1)/n);
  if (n>=2) { Sp=1;
   cout.precision(25);
      for(i=2;i<=n;i++) { Sp=Sp*(1-(double)1/(i*i));  }
    cout<<"Слева направо: "<<Sp<<endl;
   Sl=1;
   for(i=n;i>=2;i--) { Sl=Sl*(1-(double)1/(i*i));  }
    cout<<"Справа налево: "<<Sl<<endl;
cout<<"Точный результат: "<<S<<endl;
   if (S-Sp<S-Sl)  cout<<"Лучше считать слева направо"<<endl;
   else
   if (S-Sp>S-Sl)   cout<<"Лучше считать справа налево"<<endl;
   else cout<<"Все равно: ответ одинаковый"<<endl; }
 else
    cout<<"Введите n=>2"<<endl;
 return 0; }
  
      Получилось, что принципиально важно для получения предельной точности результата выбрать правильную схему вычислений. В данном случае, это - вычисление суммы в направлении слева направо,но мы провели еще три эксперимента:
1) 1/6+1/24+1/60+...+1/(n*(n+1)*(n+2))   точное результат для нее 0.5(0.5-1/((n+1)*(n+2))

 2) 3/8+6/55+3/56+...+6/((3n-1)*(3n+5))   точное результат  0,7-1/(3n+2)-1/(3n+5)
 3) 1/3+11/60+7/60+....+(3*n-1)/(n*(n-1)*(n+1))  точное результат  7/6-1/n-2/(n+1)


В итоге выяснили, что не всегда привычная нам схема вычисления точна. Как например, в эксперименте 2 и 3, точнее проводить вычисления суммы в направлении справа налево.

Несмотря на правильность вычислительной схемы, результат может быть не точным, а  значит, необходимо найти другую схему с точным результатом.

Таблица результатов:

Ссылки на код программ: 

  1.        Главная задача
  2.        Эксперимент 1
  3.       Эксперимент 2
  4.         Эксперимент 3


Результаты компьютерных исследований мы представили в видео:





Комментариев нет:

Отправить комментарий