{"id":3027,"date":"2017-03-01T06:00:58","date_gmt":"2017-03-01T04:00:58","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3027"},"modified":"2022-03-26T14:37:24","modified_gmt":"2022-03-26T12:37:24","slug":"calculo-de-pi-mediante-la-serie-de-nilakantha-1","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/calculo-de-pi-mediante-la-serie-de-nilakantha-1\/","title":{"rendered":"C\u00e1lculo de pi mediante la serie de Nilakantha"},"content":{"rendered":"<p>Una serie infinita para el c\u00e1lculo de pi, publicada por <a href=\"http:\/\/bit.ly\/2l84M1J\">Nilakantha<\/a> en el siglo XV, es<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/02\/Calculo_de_pi_mediante_la_serie_de_Nilakantha.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/02\/Calculo_de_pi_mediante_la_serie_de_Nilakantha.png?resize=571%2C83\" alt=\"Calculo_de_pi_mediante_la_serie_de_Nilakantha\" width=\"571\" height=\"83\" class=\"aligncenter size-full wp-image-3028\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/02\/Calculo_de_pi_mediante_la_serie_de_Nilakantha.png?w=571&amp;ssl=1 571w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/02\/Calculo_de_pi_mediante_la_serie_de_Nilakantha.png?resize=300%2C43&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/02\/Calculo_de_pi_mediante_la_serie_de_Nilakantha.png?resize=100%2C14&amp;ssl=1 100w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/02\/Calculo_de_pi_mediante_la_serie_de_Nilakantha.png?resize=150%2C21&amp;ssl=1 150w\" sizes=\"(max-width: 571px) 100vw, 571px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   aproximacionPi :: Int -> Double\n   tabla          :: FilePath -> [Int] -> IO ()\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(aproximacionPi n) es la n-\u00e9sima aproximaci\u00f3n de pi obtenido sumando los n primeros t\u00e9rminos de la serie de Nilakantha. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">\n     aproximacionPi 0        ==  3.0\n     aproximacionPi 1        ==  3.1666666666666665\n     aproximacionPi 2        ==  3.1333333333333333\n     aproximacionPi 3        ==  3.145238095238095\n     aproximacionPi 4        ==  3.1396825396825396\n     aproximacionPi 5        ==  3.1427128427128426\n     aproximacionPi 10       ==  3.1414067184965018\n     aproximacionPi 100      ==  3.1415924109719824\n     aproximacionPi 1000     ==  3.141592653340544\n     aproximacionPi 10000    ==  3.141592653589538\n     aproximacionPi 100000   ==  3.1415926535897865\n     aproximacionPi 1000000  ==  3.141592653589787\n     pi                      ==  3.141592653589793\n<\/pre>\n<ul>\n<li>(tabla f ns) escribe en el fichero f las n-\u00e9simas aproximaciones de pi, donde n toma los valores de la lista ns, junto con sus errores. Por ejemplo, al evaluar la expresi\u00f3n<\/li>\n<\/ul>\n<pre lang=\"text\">\n     tabla \"AproximacionesPi.txt\" [0,10..100]\n<\/pre>\n<p>hace que el contenido del fichero \u00abAproximacionesPi.txt\u00bb sea<\/p>\n<pre lang=\"text\">\n+------+----------------+----------------+\n| n    | Aproximaci\u00f3n   | Error          |\n+------+----------------+----------------+\n|    0 | 3.000000000000 | 0.141592653590 |\n|   10 | 3.141406718497 | 0.000185935093 |\n|   20 | 3.141565734659 | 0.000026918931 |\n|   30 | 3.141584272675 | 0.000008380915 |\n|   40 | 3.141589028941 | 0.000003624649 |\n|   50 | 3.141590769850 | 0.000001883740 |\n|   60 | 3.141591552546 | 0.000001101044 |\n|   70 | 3.141591955265 | 0.000000698325 |\n|   80 | 3.141592183260 | 0.000000470330 |\n|   90 | 3.141592321886 | 0.000000331704 |\n|  100 | 3.141592410972 | 0.000000242618 |\n+------+----------------+----------------+\n<\/pre>\n<p>y al evaluar la expresi\u00f3n<\/p>\n<pre lang=\"text\">\n     tabla \"AproximacionesPi.txt\" [0,500..5000]\n<\/pre>\n<p>hace que el contenido del fichero \u00abAproximacionesPi.txt\u00bb sea<\/p>\n<pre lang=\"text\">\n+------+----------------+----------------+\n| n    | Aproximaci\u00f3n   | Error          |\n+------+----------------+----------------+\n|    0 | 3.000000000000 | 0.141592653590 |\n|  500 | 3.141592651602 | 0.000000001988 |\n| 1000 | 3.141592653341 | 0.000000000249 |\n| 1500 | 3.141592653516 | 0.000000000074 |\n| 2000 | 3.141592653559 | 0.000000000031 |\n| 2500 | 3.141592653574 | 0.000000000016 |\n| 3000 | 3.141592653581 | 0.000000000009 |\n| 3500 | 3.141592653584 | 0.000000000006 |\n| 4000 | 3.141592653586 | 0.000000000004 |\n| 4500 | 3.141592653587 | 0.000000000003 |\n| 5000 | 3.141592653588 | 0.000000000002 |\n+------+----------------+----------------+\n<\/pre>\n<p><strong>Nota<\/strong>: Este ejercicio ha sido propuesto por Manuel Herrera.<\/p>\n<h4>Referencias<\/h4>\n<ul>\n<li><a href=\"http:\/\/bit.ly\/2l7r2ZO\">The discovery of the series formula for \u03c0 by Leibniz, Gregory and Nilakantha<\/a> por Ranjan Roy.  <\/li>\n<\/ul>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Text.Printf\n\n-- 1\u00aa definici\u00f3n\n-- =============\n\naproximacionPi :: Int -> Double\naproximacionPi n = serieNilakantha !! n\n\nserieNilakantha :: [Double]\nserieNilakantha = scanl1 (+) terminosNilakantha\n\nterminosNilakantha :: [Double]\nterminosNilakantha = zipWith (\/) numeradores denominadores\n  where numeradores   = 3 : cycle [4,-4]\n        denominadores = 1 : [n*(n+1)*(n+2) | n <- [2,4..]]\n\ntabla :: FilePath -> [Int] -> IO ()\ntabla f ns = do\n  writeFile f (tablaAux ns)\n\ntablaAux :: [Int] -> String\ntablaAux ns =\n     linea\n  ++ cabecera\n  ++ linea\n  ++ concat [printf \"| %4d | %.12f | %.12f |\\n\" n a e\n            | n <- ns\n            , let a = aproximacionPi n\n            , let e = abs (pi - a)]\n  ++ linea\n\nlinea :: String\nlinea = \"+------+----------------+----------------+\\n\"\n\ncabecera :: String\ncabecera = \"| n    | Aproximaci\u00f3n   | Error          |\\n\"\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Una serie infinita para el c\u00e1lculo de pi, publicada por Nilakantha en el siglo XV, es Definir las funciones aproximacionPi :: Int -> Double tabla :: FilePath -> [Int] -> IO () tales que (aproximacionPi n) es la n-\u00e9sima aproximaci\u00f3n de pi obtenido sumando los n primeros t\u00e9rminos de la serie de Nilakantha. Por ejemplo,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[7],"tags":[130,12,166,415,11,381,252,380,76],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3027"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=3027"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3027\/revisions"}],"predecessor-version":[{"id":3063,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3027\/revisions\/3063"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}