{"id":572,"date":"2017-07-07T09:30:54","date_gmt":"2017-07-07T14:30:54","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=572"},"modified":"2026-04-04T08:47:28","modified_gmt":"2026-04-04T13:47:28","slug":"trazadores-lineales-splines-grado1","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u04\/trazadores-lineales-splines-grado1\/","title":{"rendered":"4.4 Trazadores lineales (Splines) grado1 con Python"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Trazador Lineal<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">Anal\u00edtico<\/a><\/p>\n\n\n\n<p> <a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"concepto\">1. Trazadores lineales (Splines) grado1<\/h2>\n\n\n\n<figure class=\"wp-block-image alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"300\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/spline01flexibledibujotecnico.png\" alt=\"spline flexible dibujo t\u00e9cnico\" class=\"wp-image-13578\" style=\"width:350px\" \/><\/figure>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Chapra 18.6.1 p525<\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"559\" height=\"439\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/spline02_dimensiones.png\" alt=\"spline dimensiones\" class=\"wp-image-13579\" style=\"width:350px\" \/><\/figure>\n\n\n\n<p>El concepto de trazador se origin\u00f3 en la t\u00e9cnica de dibujo que usa una cinta delgada y flexible (spline) para dibujar curvas suaves a trav\u00e9s de un conjunto de puntos.<\/p>\n\n\n\n<p>La uni\u00f3n m\u00e1s simple entre dos puntos es una l\u00ednea recta. El m\u00e9todo crea un polinomio para cada par de puntos consecutivos en el intervalo, por lo que el resultado ser\u00e1 una tabla de polinomios.<\/p>\n\n\n\n<p>Los trazadores de primer grado para un grupo de datos ordenados pueden definirse como un conjunto de funciones lineales.<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f_0(x) = f(x_0) + m_0(x-x_0), x_0\\leq x\\leq x_1<\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f_1(x) = f(x_1) + m_1(x-x_1), x_1\\leq x\\leq x_2<\/span>\n\n\n\n<p class=\"has-text-align-center\"><strong>...<\/strong><\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f_n(x) = f(x_{n-1}) + m_{n-1}(x-x_{n-1}), x_{n-1}\\leq x\\leq x_n<\/span>\n\n\n\n<p>donde<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> m_i = \\frac{f(x_{i+1}) - f(x_i)}{(x_{i+1}-x_i)} <\/span>\n\n\n\n<p>Observe que la expresi\u00f3n de f(x) para un tramo entre dos puntos es el polinomio de grado 1 realizado con diferencia finita avanzadas&nbsp; o las diferencias divididas.<\/p>\n\n\n\n<p>Las ecuaciones se pueden usar para evaluar la funci\u00f3n en cualquier punto entre x<sub>0<\/sub> y x<sub>n<\/sub>. Al localizar primero el intervalo dentro del cual est\u00e1 el punto, puede seleccionar el polinomio que corresponde a ese tramo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Trazador Lineal<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">Anal\u00edtico<\/a><\/p>\n\n\n\n<p> <a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ejercicio\">2. Ejercicio<\/h2>\n\n\n\n<p>Datos de los puntos como ejemplo para el algoritmo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>xi = &#091;0.1 , 0.2, 0.3, 0.4]\nfi = &#091;1.45, 1.8, 1.7, 2.0]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Trazador Lineal<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">Anal\u00edtico<\/a><\/p>\n\n\n\n<p> <a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"analitico\">3. Desarrollo anal\u00edtico<\/h2>\n\n\n\n<p>El m\u00e9todo con trazadores lineales, permite plantear los bloques necesarios para manejar varios polinomios, uno por cada tramo entre dos puntos dentro del intervalo del problema<\/p>\n\n\n\n<p>0.1&nbsp;\u2264 x\u2264 0.2<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> m_0= \\frac{1.8 - 1.45}{0.2-0.1} = 3.5 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f_0(x) = 1.45 + 3.5(x-0.1)<\/span>\n\n\n\n<p>0.2 \u2264 x&nbsp;\u2264 0.3<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> m_1= \\frac{1.7 - 1.8}{0.3-0.2} = -1 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f_1(x) = 1.8 + -1(x-0.2)<\/span>\n\n\n\n<p>0.3 \u2264 x&nbsp;\u2264 0.4<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> m_2= \\frac{2 - 1.7}{0.4-0.3} = 3 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f_3(x) = 1.7 + 3(x-0.3)<\/span>\n\n\n\n<p>El m\u00e9todo permitir\u00e1 disponer de un punto de partida para trazadores de mayor grado, por ejemplo los c\u00fabicos.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"559\" height=\"439\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/spline02_dimensiones.png\" alt=\"spline dimensiones\" class=\"wp-image-13579\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Trazador Lineal<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">Anal\u00edtico<\/a><\/p>\n\n\n\n<p> <a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"algoritmo\">4. Algoritmo en Python<\/h2>\n\n\n\n<p>Los polinomios de cada tramo se almacenan en una tabla, cada uno puede ser utilizado individualmente en su respectivo tramo, por ejemplo para realizar la gr\u00e1fica de l\u00ednea entre tramos.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Interpolaci\u00f3n con Trazadores Lineales en Python\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/N7Fq_b6ZHio?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; highlight: [19,26]; title: ; notranslate\" title=\"\">\n# Trazador (spline) lineal, grado 1\nimport numpy as np\nimport sympy as sym\n\n# INGRESO , Datos de prueba\nxi = &#x5B;0.1 , 0.2, 0.3, 0.4]\nfi = &#x5B;1.45, 1.8, 1.7, 2.0]\n\ntitulo = 'Trazadores lineales (splines)'\n\n# PROCEDIMIENTO\n# Vectores como arreglo, numeros reales\nxi = np.array(xi,dtype=float)\nfi = np.array(fi,dtype=float)\nn = len(xi)\n\n# trazador lineal, grado 1\nx = sym.Symbol('x')\npx_tabla = &#x5B;] # por cada tramo\n\ni = 0 # tramo inicial px = f0 +d1f*(x-x0)\nwhile i&lt;(n-1):\n    # con 1ra diferencia finita avanzada\n    d1f =(fi&#x5B;i+1]-fi&#x5B;i])\/(xi&#x5B;i+1]-xi&#x5B;i])\n    pxtramo = fi&#x5B;i] + d1f*(x-xi&#x5B;i])\n    px_tabla.append(pxtramo)\n    i = i + 1\n\n# SALIDA\nprint(titulo)\nprint('Polinomios por tramos: ')\nfor i in range(0,n-1,1):\n    print('x = &#x5B;',xi&#x5B;i],',',xi&#x5B;i+1],']')\n    print('expresion:',px_tabla&#x5B;i])\n<\/pre><\/div>\n\n\n<p>Se obtiene como resultado:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Polinomios por tramos: \nx = &#091; 0.1 , 0.2 ]\n 3.5*x + 1.1\nx = &#091; 0.2 , 0.3 ]\n 2.0 - 1.0*x\nx = &#091; 0.3 , 0.4 ]\n 3.0*x + 0.8\n&gt;&gt;&gt; <\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Trazador Lineal<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">Anal\u00edtico<\/a><\/p>\n\n\n\n<p> <a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"grafica\">5. Gr\u00e1fica con Python<\/h2>\n\n\n\n<p>Para a\u00f1adir la gr\u00e1fica se a\u00f1aden las instrucciones para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>evaluar el polinomio en cada tramo<\/li>\n\n\n\n<li>concatenar los resultados de todos los tramos en los vectores xtraza, ytraza.<\/li>\n\n\n\n<li>poner en la gr\u00e1fica los puntos del problema y las l\u00edneas que genera cada polinomio<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICA --------------\nimport matplotlib.pyplot as plt\n\nmuestras = 5 # entre cada par de puntos\n\n# Puntos para graficar cada tramo\nxtraza = np.array(&#x5B;],dtype=float)\nytraza = np.array(&#x5B;],dtype=float)\ni = 0\nwhile i&lt;(n-1): # cada tramo\n    xtramo = np.linspace(xi&#x5B;i],xi&#x5B;i+1],muestras)\n    # evalua polinomio del tramo\n    pxk = sym.lambdify('x',px_tabla&#x5B;i])\n    ytramo = pxk(xtramo)\n    # vectores de trazador en x,y\n    xtraza = np.concatenate((xtraza,xtramo))\n    ytraza = np.concatenate((ytraza,ytramo))\n    i = i + 1\n\n# Graficar\nplt.plot(xi,fi,'o', label='puntos')\nplt.plot(xtraza,ytraza, label='trazador')\n\n# entorno de grafica\nplt.xlabel('xi')\nplt.ylabel('px(xi)')\nplt.legend()\nplt.title(titulo)\nplt.tight_layout()\nplt.show()\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Trazador Lineal<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">Anal\u00edtico<\/a><\/p>\n\n\n\n<p> <a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trazador Lineal Ejercicio Anal\u00edtico Algoritmo gr\u00e1fica 1. Trazadores lineales (Splines) grado1 Referencia: Chapra 18.6.1 p525 El concepto de trazador se origin\u00f3 en la t\u00e9cnica de dibujo que usa una cinta delgada y flexible (spline) para dibujar curvas suaves a trav\u00e9s de un conjunto de puntos. La uni\u00f3n m\u00e1s simple entre dos puntos es una l\u00ednea [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-mn-unidades","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-572","post","type-post","status-publish","format-standard","hentry","category-mn-u04"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/572","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=572"}],"version-history":[{"count":11,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/572\/revisions"}],"predecessor-version":[{"id":23402,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/572\/revisions\/23402"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}