{"id":5966,"date":"2018-03-07T20:34:23","date_gmt":"2018-03-07T19:34:23","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=5966"},"modified":"2018-03-11T09:35:41","modified_gmt":"2018-03-11T08:35:41","slug":"i1m2017-ejercicios-de-programacion-de-calculo-numerico-en-maxima","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2017-ejercicios-de-programacion-de-calculo-numerico-en-maxima\/","title":{"rendered":"I1M2017: Ejercicios de programaci\u00f3n de c\u00e1lculo num\u00e9rico en Maxima"},"content":{"rendered":"<p>En la tercera parte de la clase de hoy de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-17\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> se han comentado las soluciones de los ejercicios de la relaci\u00f3n 28, en la que se definen en Maxima funciones para resolver los siguientes problemas de c\u00e1lculo num\u00e9rico:<\/p>\n<ul>\n<li>diferenciaci\u00f3n num\u00e9rica,<\/li>\n<li>c\u00e1lculo de la ra\u00edz cuadrada mediante el m\u00e9todo de Her\u00f3n,<\/li>\n<li>c\u00e1lculo de los ceros de una funci\u00f3n por el m\u00e9todo de Newton y<\/li>\n<li>c\u00e1lculo de funciones inversas.<\/li>\n<\/ul>\n<p>Estas funciones se han definido en Haskell en la <a href=\"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2017-calculo-numerico-en-haskell\/\">relaci\u00f3n 26<\/a><\/p>\n<p>Los ejercicios, y sus soluciones, se muestran a continuaci\u00f3n.<br \/>\n<!--more--><\/p>\n<pre lang=\"text\">\n\/* ---------------------------------------------------------------------\n   Diferenciaci\u00f3n num\u00e9rica                                            \n   ------------------------------------------------------------------- *\/\n\n\/* ---------------------------------------------------------------------\n   Ejercicio 1.1. Definir la funci\u00f3n derivada tal que derivada(a,f,x) es\n   el valor de la derivada de la funci\u00f3n f en el punto x con\n   aproximaci\u00f3n a. Por ejemplo,  \n      (%i2) derivada (0.001,sin,%pi);\n      (%o2) - 0.99999983333334\n      (%i3) derivada (0.001,cos,%pi);\n      (%o3) 4.999999583255033E-4\n   ------------------------------------------------------------------- *\/\n\nderivada (a,f,x) := (f(x+a)-f(x))\/a$  \n\n\/* ---------------------------------------------------------------------\n   Ejercicio 1.2. Definir las funciones derivadaBurda, derivadaFina y\n   derivadaSuper tales que \n      + derivadaBurda (f,x) es el valor de la derivada de la funci\u00f3n f \n        en el punto x con aproximaci\u00f3n 0.01,\n      + derivadaFina (f,x) es el valor de la derivada de la funci\u00f3n f \n        en el punto x con aproximaci\u00f3n 0.0001.\n      + derivadaSuper (f,x) es el valor de la derivada de la funci\u00f3n f \n        en el punto x con aproximaci\u00f3n 0.000001.\n   Por ejemplo,\n      (%i4) derivadaBurda (cos,%pi);\n      (%o4) 0.0049999583334736\n      (%i5) derivadaFina (cos,%pi);\n      (%o5) 4.999999969612645E-5\n      (%i6) derivadaSuper (cos,%pi);\n      (%o6) 5.000444502911705E-7\n   ------------------------------------------------------------------- *\/\n\nderivadaBurda (f,x) := derivada (0.01,    f,x)$  \nderivadaFina  (f,x) := derivada (0.0001,  f,x)$  \nderivadaSuper (f,x) := derivada (0.000001,f,x)$  \n\n\/* ---------------------------------------------------------------------\n   Ejercicio 1.3. Definir la funci\u00f3n derivadaFinaDelSeno tal que\n   (derivadaFinaDelSeno x) es el valor de la derivada fina del seno en\n   x. Por ejemplo,\n      (%i7) derivadaFinaDelSeno (%pi);\n      (%o7) - 0.99999999833333\n   ------------------------------------------------------------------- *\/\n\nderivadaFinaDelSeno (x) := derivadaFina (sin,x)$\n\n\/* ---------------------------------------------------------------------\n   C\u00e1lculo de la ra\u00edz cuadrada                                        \n   ------------------------------------------------------------------- *\/\n\n\/* ---------------------------------------------------------------------\n   Ejercicio 2. El m\u00e9todo de Her\u00f3n para calcular la ra\u00edz cuadrada de\n   un n\u00famero se basa en las siguientes propiedades:\n   + Si y es una aproximaci\u00f3n de la ra\u00edz cuadrada de x, entonces \n     (y+x\/y)\/2 es una aproximaci\u00f3n mejor. \n   + El l\u00edmite de la sucesi\u00f3n definida por \n         x(0)   = 1 \n         x(n+1) = (x(n)+x\/x(n))\/2\n     es la ra\u00edz cuadrada de x.\n   \n   Definir, por iteraci\u00f3n con unless, la funci\u00f3n raiz tal que raiz(x) es\n   la ra\u00edz cuadrada de x calculada usando la  propiedad anterior. Por\n   ejemplo,  \n      (%i8) raiz (9);\n      (%o8) 3.000000001396984\n   ------------------------------------------------------------------- *\/\n\nraiz (x) := block ([y:1],\n  unless abs (y*y-x) < 0.00001 do\n    y : 0.5*(y+x\/y),\n  y)$  \n\n\/* ---------------------------------------------------------------------\n   Ceros de una funci\u00f3n                                               \n   ------------------------------------------------------------------- *\/\n\n\/* ---------------------------------------------------------------------\n   Ejercicio 3. Los ceros de una funci\u00f3n pueden calcularse mediante el\n   m\u00e9todo de Newton bas\u00e1ndose en las siguientes propiedades:\n   + Si b es una aproximaci\u00f3n para el punto cero de f, entonces \n     b-f(b)\/f'(b) es una mejor aproximaci\u00f3n.\n   + el l\u00edmite de la sucesi\u00f3n x(n) definida por\n        x(0)   = 1 \n        x(n+1) = x(n)-f(x(n))\/f'(x(n))\n     es un cero de f.\n\n   Definir, por iteraci\u00f3n con unless, la funci\u00f3n puntoCero tal que\n   puntoCero(f) es un cero de la funci\u00f3n f calculado usando el \n   m\u00e9todo anterior. Por ejemplo, \n      (%i9) puntoCero (cos);\n      (%o9) 1.570796326794957\n   ------------------------------------------------------------------- *\/\n\npuntoCero (f) := block ([b:1],\n  unless abs (f(b)) < 0.00001 do\n     b : b - f(b) \/ derivadaFina (f,b),\n  float (b))$\n\n\/* ---------------------------------------------------------------------\n   Funciones inversas                                                 \n   ------------------------------------------------------------------- *\/\n\n\/* ---------------------------------------------------------------------\n   Ejercicio 4.1. En este ejercicio se usar\u00e1 la funci\u00f3n puntoCero para\n   definir la inversa de distintas funciones.\n\n   Definir, usando puntoCero, la funci\u00f3n raizCuadrada tal que\n   raizCuadrada x es la ra\u00edz cuadrada de x. Por ejemplo,\n      (%i10) raizCuadrada (9);\n      (%o10) 3.000000002941184\n   ------------------------------------------------------------------ *\/\n\nraizCuadrada (a) := block (\n    local (f),\n    f (x) := x^2-a,  \n    puntoCero (f))$\n\n\/* ---------------------------------------------------------------------\n   Ejercicio 4.2. Definir, usando puntoCero, la funci\u00f3n raizCubica tal\n   que raizCubica (x) es la ra\u00edz c\u00fabica de x. Por ejemplo, \n      (%i11) raizCubica (27);\n      (%o11) 3.000000000019604\n   ------------------------------------------------------------------- *\/\n\nraizCubica (a) := block (\n  local (f),\n  f (x) := x^3-a,  \n  puntoCero (f))$\n\n\/* ---------------------------------------------------------------------\n   Ejercicio 4.3. Definir, usando puntoCero, la funci\u00f3n arcoseno tal que\n   arcoseno(x) es el arcoseno de x. Por ejemplo, \n      (%i12) arcoseno (1);\n      (%o12) 1.566548942830657\n   ------------------------------------------------------------------ *\/\n\narcoseno (a) := block (\n  local (f),\n  f (x) := sin (x) - a,  \n  puntoCero (f))$\n\n\/* ---------------------------------------------------------------------\n   Ejercicio 4.4. Definir, usando puntoCero, la funci\u00f3n arcocoseno tal\n   que arcocoseno(x) es el arcoseno de x. Por ejemplo, \n      (%i13) arcocoseno (0);\n      (%o13) 1.570796326794957\n   ------------------------------------------------------------------ *\/\n\narcocoseno (a) := block (\n  local (f),\n  f (x) := cos (x) - a,  \n  puntoCero (f))$\n\n\/* ---------------------------------------------------------------------\n   Ejercicio 4.5. Definir, usando puntoCero, la funci\u00f3n inversa tal que\n   inversa(g,a) es el valor de la inversa de g en a Por ejemplo, \n      (%i14) cuadrado (x) := x^2$\n      (%i15) inversa (cuadrado,9);\n      (%o15) 3.000000002941184\n      (%i16) inversa (lambda ([x], x^2), 9);\n      (%o16) 3.000000002941184\n   ------------------------------------------------------------------ *\/\n\ninversa (g,a) := block (\n  local (f),\n  f (x) := g (x) - a,  \n  puntoCero (f))$\n\n\/* ---------------------------------------------------------------------\n   Ejercicio 4.6. Redefinir, usando inversa, las funciones raizCuadrada,\n   raizCubica, arcoseno y arcocoseno. Por ejemplo,\n      (%i17) raizCuadradaI (9);\n      (%o17) 3.000000002941184\n      (%i18) raizCubicaI (9);\n      (%o18) 2.080083824207376\n      (%i19) arcosenoI (1);\n      (%o19) 1.566548942830657\n      (%i20) arcocosenoI (0);\n      (%o20) 1.570796326794957\n   ------------------------------------------------------------------ *\/\n\nraizCuadradaI (a) := inversa (lambda ([x], x^2), a)$\nraizCubicaI   (a) := inversa (lambda ([x], x^3), a)$\narcosenoI     (a) := inversa (sin, a)$  \narcocosenoI   (a) := inversa (cos, a)$\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la tercera parte de la clase de hoy de Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas se han comentado las soluciones de los ejercicios de la relaci\u00f3n 28, en la que se definen en Maxima funciones para resolver los siguientes problemas de c\u00e1lculo num\u00e9rico: diferenciaci\u00f3n num\u00e9rica, c\u00e1lculo de la ra\u00edz cuadrada mediante el m\u00e9todo&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","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":[265],"tags":[316,281],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/5966"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=5966"}],"version-history":[{"count":1,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/5966\/revisions"}],"predecessor-version":[{"id":5967,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/5966\/revisions\/5967"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=5966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=5966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=5966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}