{"id":5896,"date":"2020-05-15T07:08:35","date_gmt":"2020-05-15T05:08:35","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=5896"},"modified":"2020-05-22T06:17:57","modified_gmt":"2020-05-22T04:17:57","slug":"operaciones-con-polinomios-como-diccionarios","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/operaciones-con-polinomios-como-diccionarios\/","title":{"rendered":"Operaciones con polinomios como diccionarios"},"content":{"rendered":"<p>Los polinomios se pueden representar mediante diccionarios con los exponentes como claves y los coeficientes como valores.<\/p>\n<p>El tipo de los polinomios con coeficientes de tipo a se define por<\/p>\n<pre lang=\"text\">\n   type Polinomio a = M.Map Int a\n<\/pre>\n<p>Dos ejemplos de polinomios (que usaremos en los ejemplos) son<\/p>\n<pre lang=\"text\">\n   3 + 7x - 5x^3\n   4 + 5x^3 + x^5\n<\/pre>\n<p>se definen por<\/p>\n<pre lang=\"text\">\n  ejPol1, ejPol2 :: Polinomio Int\n  ejPol1 = M.fromList [(0,3),(1,7),(3,-5)]\n  ejPol2 = M.fromList [(0,4),(3,5),(5,1)]\n<\/pre>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   sumaPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a\n   multPorTerm :: Num a => (Int,a) -> Polinomio a -> Polinomio a\n   multPol :: (Eq a, Num a) => Polinomio a -> Polinomio a -> Polinomio a\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(sumaPol p q) es la suma de los polinomios p y q. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     \u03bb> sumaPol ejPol1 ejPol2\n     fromList [(0,7),(1,7),(5,1)]\n     \u03bb> sumaPol ejPol1 ejPol1\n     fromList [(0,6),(1,14),(3,-10)]\n<\/pre>\n<ul>\n<li>(multPorTerm (n,a) p) es el producto del t\u00e9rmino ax^n por p. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">\n     \u03bb> multPorTerm (2,3) (M.fromList [(0,4),(2,1)])\n     fromList [(2,12),(4,3)]\n<\/pre>\n<ul>\n<li>(multPol p q) es el producto de los polinomios p y q. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">\n     \u03bb> multPol ejPol1 ejPol2\n     fromList [(0,12),(1,28),(3,-5),(4,35),(5,3),(6,-18),(8,-5)]\n     \u03bb> multPol ejPol1 ejPol1\n     fromList [(0,9),(1,42),(2,49),(3,-30),(4,-70),(6,25)]\n     \u03bb> multPol ejPol2 ejPol2\n     fromList [(0,16),(3,40),(5,8),(6,25),(8,10),(10,1)]\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport qualified Data.Map as M\n\ntype Polinomio a = M.Map Int a \n\nejPol1, ejPol2 :: Polinomio Int\nejPol1 = M.fromList [(0,3),(1,7),(3,-5)]\nejPol2 = M.fromList [(0,4),(3,5),(5,1)]\n\nsumaPol :: (Num a, Eq a) => Polinomio a -> Polinomio a -> Polinomio a\nsumaPol p q = \n    M.filter (\/=0) (M.unionWith (+) p q)\n\nmultPorTerm :: Num a => (Int,a) -> Polinomio a -> Polinomio a\nmultPorTerm (n,a) p =\n    M.map (*a) (M.mapKeys (+n) p)\n\nmultPol :: (Eq a, Num a) => Polinomio a -> Polinomio a -> Polinomio a\nmultPol p q\n    | M.null p  = M.empty\n    | otherwise = sumaPol (multPorTerm t q) (multPol r q)\n    where (t,r) = M.deleteFindMin p\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Los polinomios se pueden representar mediante diccionarios con los exponentes como claves y los coeficientes como valores. El tipo de los polinomios con coeficientes de tipo a se define por type Polinomio a = M.Map Int a Dos ejemplos de polinomios (que usaremos en los ejemplos) son 3 + 7x &#8211; 5x^3 4 + 5x^3&#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":[4],"tags":[396,403,290,402,397,399,400,401,11,398],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5896"}],"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=5896"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5896\/revisions"}],"predecessor-version":[{"id":5918,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/5896\/revisions\/5918"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=5896"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=5896"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=5896"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}