Объект исследования: компьютерная арифметика.
Цель исследования: Выявить влияние пути решения на результат
компьютерных вычислений.
Задачи исследования:
- Развить навыки выбора метода решения задачи.
- Научиться составлять план проведения экспериментальной работы.
- Научиться проводить компьютерный эксперимент.
- Научиться анализировать результаты экспериментальной работы.
План исследования:
- получение задания
- получить решение предложенной задачи с помощью не менее двух различных вычислительных схем.
- выбрать наиболее точный путь решения
- сформулировать гипотезу и проверить ее на не менее трех новых примерах;
- дать ответ на проблемный вопрос.
Наша задача: (1-1/4)(1-1/9)(1-1/16)...(1-1/n^2)
После
обсуждения в команде было решено рассмотреть три схемы:
- получение точного результата,
- вычисление суммы при прохождении ее слева направо (Sp),
- вычисление суммы при прохождении ее справа налево (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, точнее проводить вычисления суммы в направлении справа налево.
Ссылки на код программ:
Результаты компьютерных исследований мы представили в видео:
Комментариев нет:
Отправить комментарий