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

Заключительный этап


Как выбрать лучшее решение.
Команда Феникс, Студенты факультета математики и информатики Гродненский государственный университет имени Янки Купалы
В современном мире, где компьютерные технологии прочно вошли в жизнь человека, роль вычислительных ошибок может быть очень велика. Существуют множество примеров, когда ошибки, возникающие при компьютерных расчетах, приводили к серьезным экономическим, медицинским, строительным, авиационным, этическим и другим проблемам.



Сетевой проект “Крушение иллюзий” поставил перед нами следующие вопросы: 
  • Как увидеть проблему?
  • Как выбор пути решения влияет на результат? 
  • Почему нужно добиваться высокой точности результата?
Ответы на эти вопросы и помогли нам ответить на основополагающий вопрос проекта: Как выбрать лучшее решение?

С первым вопросом «Как увидеть проблему?», мы встретились на первом этапе проекта, который назывался «Ахиллесова пята».
Нам было дано равенство   (a2-b2)/(a-b)=a+b
     Необходимо было:
1) решить полученную задачу, перебирая различные значения данных;
2) получить несколько значений данных, доказывающих, что равенство верно не всегда;
3) провести исследование на некоторых числовых промежутках, определяя частоту возникновения противоречивых результатов.
     Нами была написана программа для решения данного равенства на языке С++. Выяснилось, что при 100 проверках результат несовпадения - 37%.  Примером таких значений могут быть a=1.82 ; b=5.82 .
    
 На этапе «Архимедов рычаг» мы искали ответ на вопрос: Как выбор пути решения влияет на результат?
Для полученного выражения (1-1/4)(1-1/9)(1-1/16)...(1-1/n^2)=(n+1)/(2*n)
      Необходимо было:
1) получить решение предложенной задачи с помощью не менее двух различных вычислительных схем;
2) выбрать наиболее точный путь решения.
 К данной задаче мы написали программу, по которой определили, что наиболее точное решение при 1000 проверок дает схема слева направо.

На следующем этапе «Нить Ариадны» мы отвечали на вопрос: “Почему нужно добиваться высокой точности результата? Нами было рассмотрено несколько ситуации для того, чтобы ответить на поставленный вопрос. Смоделировали эти ситуации.

В блоге нашей команды представлены результаты всех этапов и экспериментов.

   
В итоге мы сформулировали следующее правило выбора лучшего решения вычислительной задачи.
Ответ:
1) понять, что в контексте данной задачи является лучшим решением;
2) оценить возможно допустимую погрешность при вычислениях данной задачи;
3) продумать, можно ли использовать упрощенное выражение для данных вычислений (чем меньше действий, тем меньше отклонений от точного результата);
4) при операции сложения, лучше выбирать схему "справа налево", при умножении - "слева направо".
     Это и будет лучшее решение!

вторник, 10 декабря 2019 г.

Этап 3. Нить Ариадны

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

Ход исследования:

1) найти 2-3 примера отрицательного влияния инструментальной погрешности компьютера на исход в конкретных реальных ситуациях;

2) смоделировать примеры этих ситуаций;

3) дать ответ на проблемный вопрос.



Ракета «Маринер-1»
 
21 июля 1962 с Мыса Канаверал был произведен запуск ракеты-носителя «Атлас», несущей аппарат «Маринер-1» . Который должен был отправиться к Венере. Но стартовав с мыса Канаверал, ракета практически сразу сильно отклонилась от курса, что создало серьезную угрозу падения на землю. Для предотвращения возможной катастрофы NASA было принято решение запустить систему самоуничтожения ракеты. Спустя 293 секунды с момента старта, Mariner 1 был ликвидирован.

Жертв не было, если не считать потраченных на проект 20 миллионов долларов. А ошибка произошла из-за невнимательности программиста: когда он переводил рукописные математические формулы в код, пропустил макрон или надчёркивание (что значит "N-ое сглаживание значения производной радиуса R по времени"). Поэтому для Mariner-1 нормальная скорость оказалась критической. 
Российский GPS

Еще один яркий пример того, как из-за программной ошибки могут быть потеряны миллионы, является относительно недавний случай. Казалось бы, в 21 веке есть все необходимое для написания надёжных программ, особенно, если речь идет о космической отрасли. Опытные специалисты с отличным образованием, хорошее финансирование, возможность использования лучших инструментов для проверки программного обеспечения. Все это не помогло.

5 декабря 2010 года ракета-носитель "Протон-М" с тремя спутниками "Глонасс-М" — российский аналог GPS, упала в Тихий океан. Причину аварии, после завершения расследования, озвучил официальный представитель Генпрокуратуры РФ:  “Установлено, что причиной аварии стало применение не подходящей формулы, в результате чего масса заправленного в бак окислителя разгонного блока жидкого кислорода на 1582 кг превысила максимально допустимую величину, что повлекло выведение ракеты-носителя на незамкнутую орбиту и его падение в акваторию Тихого океана


Вывод:  Будьте внимательны при переводе рукописных математических формул в код;
Всегда ищите и выбирайте наилучший вариант решения;
Добивайтесь всегда точного результата;
Иначе , все это может привести к неописуемым трагедиям.




Ссылка - Цена ошибки




воскресенье, 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


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