|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.05.2017, 00:34 | #1 |
Новичок
Джуниор
Регистрация: 30.03.2017
Сообщений: 6
|
Описать функцию Pi(eps), вычисляющую значение числа Пи по формуле
Добрый день. Прошу помочь с заданием, нужно для получения зачета)
ЗАДАНИЕ: Описать функцию Pi(eps), вычисляющую значение числа Пи по формуле: Pi/2 = (2*4)/(3*3) * (4*6)/(5*5) * (6*8)/(7*7) и т.д. с произвольной точностью eps. Значение точности передать в функцию как аргумент. Обратиться с точностью 0,01; 0,001; 0,0001.
topfacts.ucoz.net - интересный и занимательный сайт.
|
27.05.2017, 18:54 | #2 | |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
Раньше для получения зачета читали книжки и конспекты.
Во-вторых, это не Pi/2, а Pi/4 . Держи, двоечник. Код:
Цитата:
А этот алгоритм - полное гуано, медленно сходится. Eps достигнут, а до точного значения - как до Луны на верблюдах. Последний раз редактировалось digitalis; 27.05.2017 в 19:00. |
|
27.05.2017, 23:22 | #3 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
|
27.05.2017, 23:39 | #4 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
То, что i-е значение отличается от i-1-го на величину < eps (а именно это считают достаточным основанием для окончания расчета) при медленной сходимости не означает, что оно и от "точного" (вычисленного с гораздо большей точностью) значения на величину < eps. Вот и в этом случае этот критерий не работает:
0,7853981634 = pi/4 ; eps = 0.001 2,0 4,0 3,0 0,8888888889 0,088889 4,0 6,0 5,0 0,8533333333 -0,035556 6,0 8,0 7,0 0,8359183673 -0,017415 8,0 10,0 9,0 0,8255983875 -0,010320 10,0 12,0 11,0 0,8187752603 -0,006823 12,0 14,0 13,0 0,8139304363 -0,004845 14,0 16,0 15,0 0,8103129677 -0,003617 16,0 18,0 17,0 0,8075091166 -0,002804 18,0 20,0 19,0 0,8052722492 -0,002237 20,0 22,0 21,0 0,8034462351 -0,001826 22,0 24,0 23,0 0,8019274331 -0,001519 24,0 26,0 25,0 0,8006443492 -0,001283 26,0 28,0 27,0 0,7995460717 -0,001098 28,0 30,0 29,0 0,7985953629 -0,000951 0,7985953629 - pi/4 = 0,013197191995... Ну никак не получается утверждать, что мы вычислили pi/4 с точностью 0.001 Я проделал еще более сотни иттераций, а к точности 0.001 и не близко. Алгоритм по Пифагору с удвоением числа сторон сходится намного быстрее. 9 иттераций - и отклонение 0.000001 . Зачем студеням рекомендуют хреновые методы ? "У нас есть экскаватор, но вы, детишки, будете копать этот канал лопатами." Последний раз редактировалось digitalis; 28.05.2017 в 00:38. |
27.05.2017, 23:47 | #5 |
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
Вадим, оно по этому алгоритму даже к неточному не приближается толком
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
|
28.05.2017, 00:35 | #6 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
Ну почему же, отклонение в 0.001 получаем всего лишь ... на 197 шаге . При этом eps задана 0.000000001
ТС давно слинял (нетупой одногруппник ему за стакан сухонького [под вздохи душившей ТС-а жабы] наваял прогу), а форумские дяди ломают свои тетерихтические копья Последний раз редактировалось digitalis; 28.05.2017 в 13:07. |
28.05.2017, 22:49 | #7 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
|
28.05.2017, 23:28 | #8 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
Я старался быть предельно близким к принятой терминологии. Вычисление проводим до тех пор, пока разность между вычисленным на последней иттерации значением (уж извините, i-м) и предпоследним ( i-1-м) стала меньше наперед заданной величины, после чего прекращаем - в данном случае - добавлять последующие члены в выражение. Но как видим на примере плохого, медленно сходящегося алгоритма это не гарантирует точности. Хорошо, пи мы знаем с точностью до триллиона и более знаков, можем оценить. А как быть с вычислением неизвестной функции ? Можем получить результат, очень далекий от реальности. Возможно, теория чисел знает ответ на этот вопрос, но я в универе не обучался, мы простые политехи.
Всяко вертел свой пост #6, чуть на голову не становился - не пойму, что в нем можно не понять ? |
29.05.2017, 05:30 | #9 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Спасибо, мне теперь стало всё понятно. Да, здесь всё совпадает с тем, как нас обучали. Но номер последнего члена последовательности я бы обозначил не через i, а через N, соответственно номер предпоследнего члена (N-1). Ну, и условие выхода не такое, как вы описали, а просто сравнивать последний член ряда с заданной точностью EPS, и выходить из цикла, если этот член меньше EPS. Я опираюсь на то, как нас обучали. Почему же давали такой неточный алгоритм - не знаю.
|
29.05.2017, 10:28 | #10 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
Ну вот, почти пришли к консексусу Остались 2 маленькие нестыковочки в наших позициях.
1. Обычно принято (у меня по крайней мере ) N обозначать общее или конечное число чего-нить, а i - переменная внутри цикла Код:
2. А вот насчет критерия достижения точности... Тут у нас школы разные. В данном алгоритме, где идет не суммирование ряда, а умножение на следующий член последовательности - эти, пардон, члены крутятся возле единицы, и мы eps будем ловить до второго пришествия. А разность двух соседних итераций - оно надежнее. Но тоже не совсем, как мы доказали в данном случае. Надеюсь, недалеко увели топик от изначального своими глубокомыслями Последний раз редактировалось digitalis; 29.05.2017 в 10:34. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Описать процедуру, вычисляющую корни третьей, пятой и седьмой степень числа | kukobch | Паскаль, Turbo Pascal, PascalABC.NET | 10 | 05.11.2016 15:04 |
Две задачи в Delphi 1)Описать процедуру PowerAВ (A, B,C), вычисляющую В-тую степень числа A и возвращающую ее в.. | DANE1 | Помощь студентам | 2 | 14.10.2016 13:50 |
Описать функцию PowerA(x,a,eps) | Lena24 | Помощь студентам | 2 | 20.03.2013 15:16 |
Описать Функцию Палиндром для целого числа | glebast | Помощь студентам | 2 | 30.12.2011 13:33 |