{"id":7060,"date":"2022-05-31T06:00:22","date_gmt":"2022-05-31T04:00:22","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=7060"},"modified":"2022-05-29T08:04:30","modified_gmt":"2022-05-29T06:04:30","slug":"polinomios-de-bell","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/polinomios-de-bell\/","title":{"rendered":"Polinomios de Bell"},"content":{"rendered":"<p>Los polinomios de Bell forman una sucesi\u00f3n de polinomios, definida como sigue:<\/p>\n<ul>\n<li>B\u2080(x) = 1 (polinomio unidad)<\/li>\n<li>B\u2099(x) = x\u00b7[B\u2099(x) + B\u2099'(x)] (donde B\u2099'(x) es la derivada de B\u2099(x))<\/li>\n<\/ul>\n<p>Por ejemplo,<\/p>\n<pre lang=\"text\">\n   B\u2080(x) = 1                     = 1\n   B\u2081(x) = x\u00b7(1+0)               = x     \n   B\u2082(x) = x\u00b7(x+1)               = x\u00b2+x         \n   B\u2083(x) = x\u00b7(x\u00b2+x+2x+1)         = x\u00b3+3x\u00b2+x    \n   B\u2084(x) = x\u00b7(x\u00b3+3x\u00b2+x+3x\u00b2+6x+1) = x\u2074+6x\u00b3+7x\u00b2+x       \n<\/pre>\n<p>Definir la funci\u00f3n<\/p>\n<pre lang=\"text\">\n   polBell :: Integer -> Polinomio Integer\n<\/pre>\n<p>tal que <code>(polBell n)<\/code> es el polinomio de Bell de grado <code>n<\/code>. Por ejemplo,<\/p>\n<pre lang=\"text\">\n   polBell 4                    ==  x^4 + 6*x^3 + 7*x^2 + 1*x\n   coeficiente 2 (polBell 4)    ==  7\n   coeficiente 2 (polBell 30)   ==  536870911\n   coeficiente 1 (polBell 1000) == 1\n   length (show (coeficiente 9 (polBell 2000)))  ==  1903\n<\/pre>\n<p><strong>Notas<\/strong>: Se usa la librer\u00eda <code>I1M.PolOperaciones<\/code> que se encuentra  <a href=\"http:\/\/bit.ly\/1AKmUQB\">aqu\u00ed<\/a> y se describe <a href=\"http:\/\/bit.ly\/1NZ0NKo\">aqu\u00ed<\/a>. Adem\u00e1s, en el \u00faltimo ejemplo se usa la funci\u00f3n <code>coeficiente<\/code> tal que <code>(coeficiente k p)<\/code> es el coeficiente del t\u00e9rmino de grado <code>k<\/code> en el polinomio <code>p<\/code> definida por<\/p>\n<pre lang=\"text\">\n   coeficiente :: Num a => Int -> Polinomio a -> a\n   coeficiente k p | k == n                 = coefLider p\n                   | k > grado (restoPol p) = 0\n                   | otherwise              = coeficiente k (restoPol p)\n                   where n = grado p\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List          (genericIndex)\nimport I1M.PolOperaciones (Polinomio, coefLider, consPol, derivada,\n                           grado, multPol, polCero, polUnidad, restoPol,\n                           sumaPol) \nimport Test.QuickCheck    (Positive (Positive), quickCheck)\n\n-- Funci\u00f3n auxiliar\n-- ================\n\n-- (coeficiente k p) es el coeficiente del t\u00e9rmino de grado k en el\n-- polinomio p.\ncoeficiente :: Num a => Int -> Polinomio a -> a\ncoeficiente k p | k == n                 = coefLider p\n                | k > grado (restoPol p) = 0\n                | otherwise              = coeficiente k (restoPol p)\n                where n = grado p\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\npolBell1 :: Integer -> Polinomio Integer\npolBell1 0 = polUnidad\npolBell1 n = multPol (consPol 1 1 polCero) (sumaPol p (derivada p))\n  where p = polBell1 (n-1)\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\npolBell2 :: Integer -> Polinomio Integer\npolBell2 n = sucPolinomiosBell `genericIndex` n\n\nsucPolinomiosBell :: [Polinomio Integer]\nsucPolinomiosBell = iterate f polUnidad\n  where f p = multPol (consPol 1 1 polCero) (sumaPol p (derivada p))\n\n-- Comprobaci\u00f3n de equivalencia\n-- ============================\n\n-- La propiedad es\nprop_polBell :: Positive Integer -> Bool \nprop_polBell (Positive n) =\n  polBell1 n == polBell2 n\n\n-- La comprobaci\u00f3n es\n--    \u03bb> quickCheck prop_polBell\n--    +++ OK, passed 100 tests.\n\n-- Comparaci\u00f3n de eficiencia\n-- =========================\n\n-- La comparaci\u00f3n es\n--    \u03bb> length (show (coeficiente 9 (polBell1 2000)))\n--    1903\n--    (5.37 secs, 4,829,322,368 bytes)\n--    \u03bb> length (show (coeficiente 9 (polBell2 2000)))\n--    1903\n--    (4.03 secs, 4,825,094,064 bytes)\n<\/pre>\n<p>El c\u00f3digo se encuentra en <a href=\"https:\/\/github.com\/jaalonso\/Exercitium\/blob\/main\/src\/Polinomios_de_Bell.hs\">GitHub<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los polinomios de Bell forman una sucesi\u00f3n de polinomios, definida como sigue: B\u2080(x) = 1 (polinomio unidad) B\u2099(x) = x\u00b7[B\u2099(x) + B\u2099'(x)] (donde B\u2099'(x) es la derivada de B\u2099(x)) Por ejemplo, B\u2080(x) = 1 = 1 B\u2081(x) = x\u00b7(1+0) = x B\u2082(x) = x\u00b7(x+1) = x\u00b2+x B\u2083(x) = x\u00b7(x\u00b2+x+2x+1) = x\u00b3+3x\u00b2+x B\u2084(x) = x\u00b7(x\u00b3+3x\u00b2+x+3x\u00b2+6x+1) =&#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":[2],"tags":[561],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/7060"}],"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=7060"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/7060\/revisions"}],"predecessor-version":[{"id":7061,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/7060\/revisions\/7061"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=7060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=7060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=7060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}