{"id":584,"date":"2017-07-08T09:35:54","date_gmt":"2017-07-08T14:35:54","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=584"},"modified":"2026-04-04T08:52:50","modified_gmt":"2026-04-04T13:52:50","slug":"trazador-cubico-natural","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u04\/trazador-cubico-natural\/","title":{"rendered":"4.5 Trazadores C\u00fabicos Natural o libre 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 C\u00fabico<\/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\n\n\n<p><a href=\"#libreria\">librer\u00eda<\/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. Trazador C\u00fabico - Planteamiento<\/h2>\n\n\n\n<figure class=\"wp-block-image alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"204\" height=\"597\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/spline03_curvigrafo.jpg\" alt=\"spline curvigrafo\" class=\"wp-image-13587\" style=\"width:auto;height:300px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"439\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/07\/spline04naturallibre.png\" alt=\"spline natural libre diagrama en gr\u00e1fico\" class=\"wp-image-13582\" \/><\/figure>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>:&nbsp; Burden 3.5 p105, Chapra 18.6.3 p532, Rodr\u00edguez 6.11.1 p244<\/p>\n\n\n\n<p>Tiene como objetivo incorporar condiciones adicionales para la funci\u00f3n en los extremos del intervalo donde se encuentran los puntos o \"nodos\".<\/p>\n\n\n\n<p>Por ejemplo, si los datos son los de una trayectoria en un experimento de f\u00edsica, se podr\u00eda disponer de la aceleraci\u00f3n el punto inicial de las muestras (izquierda)&nbsp;y de salida (derecha) del intervalo de las muestras.<\/p>\n\n\n\n<p>El m\u00e9todo busca obtener un polinomio de tercer grado para cada sub-intervalo o tramo entre \"nodos\" consecutivos (j,&nbsp; j+1), de la forma:<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S_j(x_j) = a_j + b_j (x-x_j) + c_j(x-xj)^2 + d_j(x-x_j)^3 <\/span>\n\n\n\n<p>para cada j = 0, 1, ..., n-1<\/p>\n\n\n\n<p>Para <strong>n<\/strong> datos existen <strong>n-1<\/strong> tramos, cuatro inc\u00f3gnitas (coeficientes) que evaluar por cada tramo, como resultado <strong>4(n-1)<\/strong> inc\u00f3gnitas para todo el intervalo .<\/p>\n\n\n\n<p>Para los t\u00e9rminos (<strong>x<\/strong><sub>j+1<\/sub>- <strong>x<\/strong><sub>j<\/sub>) de los tramos que se usan varias veces en el desarrollo, se simplifican como h<sub>j<\/sub>:<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> h_j = x_{j+1} - x_{j}<\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S_j(x_j) = a_j + b_j h_j + c_j h_j^2 + d_jh_j^3 <\/span>\n\n\n\n<p>Para generar el sistema de ecuaciones, se siguen los siguientes criterios:<\/p>\n\n\n\n<p>1. &nbsp;Los valores de la funci\u00f3n deben ser iguales en los nodos interiores<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S_j(x_{j+1}) = f(x_{j+1}) = S_{j+1}(x_{j+1}) <\/span>\n\n\n\n<p>2. Las primeras derivadas en los nodos interiores deben ser iguales<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S'_j(x_{j+1}) = S'_{j+1}(x_{j+1}) <\/span>\n\n\n\n<p>3. Las segundas derivadas en los nodos interiores deben ser iguales<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S''_j(x_{j+1}) = S''_{j+1}(x_{j+1}) <\/span>\n\n\n\n<p>4. El primer y \u00faltimo polinomio deben pasar a trav\u00e9s de los puntos extremos<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(x_0) = S_0(x_0) = a_0 <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(x_n) = S_n(x_n) = a_n <\/span>\n\n\n\n<p>5. Una de las condiciones de frontera se satisface:<\/p>\n\n\n\n<p>5a. <strong><em>frontera libre o natural<\/em><\/strong>: Las segundas derivadas en los nodos extremos son cero<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S''(x_0) = S''(x_n) = 0 <\/span>\n\n\n\n<p>5b. <strong><em>frontera sujeta<\/em><\/strong>: las primeras derivadas en los nodos extremos son conocidas<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S'(x_0) = f'(x_0)<\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S'(x_n) = f'(x_n) <\/span>\n\n\n\n<p><strong>Tarea<\/strong>: Revisar en los libros, textos el planteamiento de las ecuaciones para resolver el sistema que se genera al plantear el polinomio.<\/p>\n\n\n\n<p>Ubicar en el texto las ecuaciones resultantes, que son las que se aplicar\u00e1n en el algoritmo.<\/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 C\u00fabico<\/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\n\n\n<p><a href=\"#libreria\">librer\u00eda<\/a><a name=\"concepto\"><\/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=\"algoritmo\">2. Algoritmo en Python<\/h2>\n\n\n\n<p>El algoritmo parte de lo desarrollado para \"trazadores lineales\", donde se presentaron los bloques para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>construir el trazador en una tabla de polinomios por tramos<\/li>\n\n\n\n<li>realizar la gr\u00e1fica con los trazadores en cada tramo<\/li>\n\n\n\n<li>evaluar cada uno de ellos en cada tramo con muestras suficientes para presentar una buena resoluci\u00f3n o precisi\u00f3n en la gr\u00e1fica<\/li>\n<\/ul>\n\n\n\n<p>Del algoritmo b\u00e1sico se modifica entonces el bloque del c\u00e1lculo de los polinomios de acuerdo al planteamiento de formulas y procedimientos para trazadores c\u00fabicos naturales (enviado a revisar como tarea).<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Trazador cubico natural\nimport numpy as np\nimport sympy as sym\n\n# INGRESO\nxi = &#x5B;0.1 , 0.2, 0.3, 0.4]\nfi = &#x5B;1.45, 1.8, 1.7, 2.0]\n\ntitulo = 'Trazador c\u00fabico natural o libre'\n# natural, 2da derivadas en los nodos extremos son cero\n\n# Algoritmos como funcion\n\ndef traza3natural(xi,yi, vertabla=False):\n    ''' trazador cubico natural,\n    2da derivadas en los nodos extremos son cero\n    '''\n    # Vectores como arreglo, numeros reales\n    xi = np.array(xi,dtype=float)\n    yi = np.array(yi,dtype=float)\n    n = len(xi)\n\n    h = np.diff(xi,n=1) # h tamano de paso\n\n    # Sistema de ecuaciones\n    A = np.zeros(shape=(n-2,n-2), dtype=float)\n    B = np.zeros(n-2, dtype=float)\n    S = np.zeros(n, dtype=float)\n    A&#x5B;0,0] = 2*(h&#x5B;0]+h&#x5B;1])\n    A&#x5B;0,1] = h&#x5B;1]\n    B&#x5B;0] = 6*((yi&#x5B;2]-yi&#x5B;1])\/h&#x5B;1] - (yi&#x5B;1]-yi&#x5B;0])\/h&#x5B;0])\n    for i in range(1,n-3,1):\n        A&#x5B;i,i-1] = h&#x5B;i]\n        A&#x5B;i,i] = 2*(h&#x5B;i]+h&#x5B;i+1])\n        A&#x5B;i,i+1] = h&#x5B;i+1]\n        B&#x5B;i] = 6*((yi&#x5B;i+2]-yi&#x5B;i+1])\/h&#x5B;i+1] - (yi&#x5B;i+1]-yi&#x5B;i])\/h&#x5B;i])\n    A&#x5B;n-3,n-4] = h&#x5B;n-3]\n    A&#x5B;n-3,n-3] = 2*(h&#x5B;n-3]+h&#x5B;n-2])\n    B&#x5B;n-3] = 6*((yi&#x5B;n-1]-yi&#x5B;n-2])\/h&#x5B;n-2] - (yi&#x5B;n-2]-yi&#x5B;n-3])\/h&#x5B;n-3])\n\n    # Resolver sistema de ecuaciones, S\n    r = np.linalg.solve(A,B)\n    #S&#x5B;0] = 0; S&#x5B;n-1] = 0 # Definidos en cero\n    S&#x5B;1:n-1] = r&#x5B;0:n-2]\n\n    # Coeficientes\n    a = np.zeros(n-1, dtype = float)\n    b = np.zeros(n-1, dtype = float)\n    c = np.zeros(n-1, dtype = float)\n    d = np.zeros(n-1, dtype = float)\n    for j in range(0,n-1,1):\n        a&#x5B;j] = (S&#x5B;j+1]-S&#x5B;j])\/(6*h&#x5B;j])\n        b&#x5B;j] = S&#x5B;j]\/2\n        c&#x5B;j] = (yi&#x5B;j+1]-yi&#x5B;j])\/h&#x5B;j] - (2*h&#x5B;j]*S&#x5B;j]+h&#x5B;j]*S&#x5B;j+1])\/6\n        d&#x5B;j] = yi&#x5B;j]\n\n    # Polinomio trazador\n    x = sym.Symbol('x')\n    px_tabla = &#x5B;]\n    for j in range(0,n-1,1):\n        pxtramo = a&#x5B;j]*(x-xi&#x5B;j])**3 + b&#x5B;j]*(x-xi&#x5B;j])**2 + c&#x5B;j]*(x-xi&#x5B;j])+ d&#x5B;j]\n        px_tabla.append(pxtramo)\n    \n    if vertabla==True:\n        print('h:',h)\n        print('A:') ; print(A)\n        print('B:',B) ; print('S:',S)\n        print('r:',r)\n        print('coeficientes&#x5B; ,tramo]:')\n        print('a:',a) ; print('b:',b)\n        print('c:',c) ; print('d:',d)\n\n    return(px_tabla)\n\n# PROGRAMA ---------------\n# PROCEDIMIENTO\nn = len(xi)\n# Obtiene los polinomios por tramos\npx_tabla = traza3natural(xi,fi,vertabla=True)\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    print('simplificado:')\n    sym.pprint(px_tabla&#x5B;i].expand())\n<\/pre><\/div>\n\n\n<p>con lo que se obtiene el resultado por cada tramo<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>h: &#091;0.1 0.1 0.1]\nA:\n&#091;&#091;0.4 0.1]\n &#091;0.1 0.4]]\nB: &#091;-27.  24.]\nr: &#091;-88.  82.]\nS: &#091;  0. -88.  82.   0.]\ncoeficientes&#091; ,tramo]:\na: &#091;-146.66666667  283.33333333 -136.66666667]\nb: &#091;  0. -44.  41.]\nc: &#091;4.96666667 0.56666667 0.26666667]\nd: &#091;1.45 1.8  1.7 ]\nTrazador c\u00fabico natural o libre\nPolinomios por tramos: \nx = &#091; 0.1 , 0.2 ]\nexpresion: 4.96666666666667*x - 146.666666666667*(x - 0.1)**3 + 0.953333333333333\nsimplificado:\n                    3         2                            \n- 146.666666666667\u22c5x  + 44.0\u22c5x  + 0.566666666666666\u22c5x + 1.1\nx = &#091; 0.2 , 0.3 ]\nexpresion: 0.566666666666666*x + 283.333333333333*(x - 0.2)**3 - 44.0*(x - 0.2)**2 + 1.68666666666667\nsimplificado:\n                  3          2                            \n283.333333333333\u22c5x  - 214.0\u22c5x  + 52.1666666666667\u22c5x - 2.34\nx = &#091; 0.3 , 0.4 ]\nexpresion: 0.266666666666665*x - 136.666666666667*(x - 0.3)**3 + 41.0*(x - 0.3)**2 + 1.62\nsimplificado:\n                    3          2                           \n- 136.666666666667\u22c5x  + 164.0\u22c5x  - 61.2333333333333\u22c5x + 9.0\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 C\u00fabico<\/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\n\n\n<p><a href=\"#libreria\">librer\u00eda<\/a><a name=\"concepto\"><\/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\">3. Gr\u00e1fica con Python<\/h2>\n\n\n\n<p>Para el trazado de la gr\u00e1fica se a\u00f1ade al final del algoritmo:<\/p>\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 = 10 # entre cada par de puntos\n\n# Puntos para grafica en 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(xtraza,ytraza, label='trazador')\nplt.plot(xi,fi,'o', label='puntos')\nplt.title(titulo)\nplt.xlabel('xi')\nplt.ylabel('px(xi)')\nplt.legend()\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 C\u00fabico<\/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\n\n\n<p><a href=\"#libreria\">librer\u00eda<\/a><a name=\"concepto\"><\/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=\"libreria\">4. Trazador c\u00fabico natural en librer\u00eda Scipy<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>:&nbsp;<a href=\"https:\/\/docs.scipy.org\/doc\/scipy\/reference\/generated\/scipy.interpolate.CubicSpline.html#scipy.interpolate.CubicSpline\">https:\/\/docs.scipy.org\/doc\/scipy\/reference\/generated\/scipy.interpolate.CubicSpline.html#scipy.interpolate.CubicSpline<\/a><\/p>\n\n\n\n<p>La librer\u00eda Scipy dispone de una funci\u00f3n para calcular los coeficientes de los trazadores c\u00fabicos. Para el ejemplo del ejercicio se realiza el c\u00e1lculo y los polinomios.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Trazador c\u00fabico natural o libre\ncoeficientes:\na: &#091;-146.66666667  283.33333333 -136.66666667]\nb: &#091; 8.8817842e-15 -4.4000000e+01  4.1000000e+01]\nc: &#091;4.96666667 0.56666667 0.26666667]\nd: &#091;1.45 1.8  1.7 ]\nPolinomios por tramos: \nx = &#091; 0.1 , 0.2 ]\nexpresi\u00f3n: 4.96666666666667*x - 146.666666666667*(x - 0.1)**3 + 8.88178419700125e-15*(x - 0.1)**2 + 0.953333333333333\nsimplifica:\n                    3         2                            \n- 146.666666666667\u22c5x  + 44.0\u22c5x  + 0.566666666666662\u22c5x + 1.1\nx = &#091; 0.2 , 0.3 ]\nexpresi\u00f3n: 0.566666666666667*x + 283.333333333333*(x - 0.2)**3 - 44.0*(x - 0.2)**2 + 1.68666666666667\nsimplifica:\n                  3          2                            \n283.333333333333\u22c5x  - 214.0\u22c5x  + 52.1666666666667\u22c5x - 2.34\nx = &#091; 0.3 , 0.4 ]\nexpresi\u00f3n: 0.266666666666665*x - 136.666666666667*(x - 0.3)**3 + 41.0*(x - 0.3)**2 + 1.62\nsimplifica:\n                    3          2                           \n- 136.666666666667\u22c5x  + 164.0\u22c5x  - 61.2333333333333\u22c5x + 9.0<\/code><\/pre>\n\n\n\n<p>Las instrucciones en Python con la librer\u00eda Scipy para trazadores c\u00fabicos natural son:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Trazador c\u00fabico natural o libre con Scipy\nimport numpy as np\nimport scipy as sp\nimport sympy as sym\n\n# INGRESO\nxi = &#x5B;0.1 , 0.2, 0.3, 0.4]\nfi = &#x5B;1.45, 1.8, 1.7, 2.0]\n\ntitulo = 'Trazador c\u00fabico Natural o libre'\n# natural, 2da derivadas en los nodos extremos son cero\ncs_tipo = ((2, 0.0), (2, 0.0)) # natural\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# coeficientes de trazadores c\u00fabicos\ntraza_cub = sp.interpolate.CubicSpline(xi,fi,bc_type=cs_tipo )\ntraza_coef = traza_cub.c # coeficientes\na = traza_coef&#x5B;0]\nb = traza_coef&#x5B;1]\nc = traza_coef&#x5B;2]\nd = traza_coef&#x5B;3]\n\n# Polinomio trazador\nx = sym.Symbol('x')\npx_tabla = &#x5B;]\nfor j in range(0,n-1,1):\n    pxtramo = a&#x5B;j]*(x-xi&#x5B;j])**3 + b&#x5B;j]*(x-xi&#x5B;j])**2 + c&#x5B;j]*(x-xi&#x5B;j])+ d&#x5B;j]\n    px_tabla.append(pxtramo)\n\n# SALIDA\nprint(titulo)\nprint('coeficientes:')\nprint('a:',a)\nprint('b:',b)\nprint('c:',c)\nprint('d:',d)\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    print('simplifica:')\n    sym.pprint(px_tabla&#x5B;i].expand())\n<\/pre><\/div>\n\n\n<p>La gr\u00e1fica se puede generar con el bloque anterior<\/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 C\u00fabico<\/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\n\n\n<p><a href=\"#libreria\">librer\u00eda<\/a><a name=\"concepto\"><\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\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><strong>Si los polinomios entre cada tramo no se igualan sus velocidades y aceleraciones<\/strong>, se presentan puntos de inflexi\u00f3n en cada nodo.<\/p>\n\n\n\n<p>El resultado para en la trayectoria de un veh\u00edculo tripulado podr\u00eda generar una experiencia semejante a la mostrada en los siguientes videos.<\/p>\n\n\n\n<p><strong>Referencia<\/strong>: [1] Car sales woman scares customers. maxman.tv. 4 enero 2016<\/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=\"Car sales woman scares customers\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/zCQ-etiFyho?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\n<p class=\"style-scope ytd-watch-metadata\">[2] Pilot\u2019s face-melting 9.5 G\u2019s flight ages her 50 years | New York Post. 4 abr 2023<\/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=\"Pilot\u2019s face-melting 9.5 G\u2019s flight ages her 50 years | New York Post\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/JXW1Q7MYVjQ?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\n<p>youtube: slingshot ride<\/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 C\u00fabico<\/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\n\n\n<p><a href=\"#libreria\">librer\u00eda<\/a><a name=\"concepto\"><\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trazador C\u00fabico Algoritmo gr\u00e1fica librer\u00eda 1. Trazador C\u00fabico - Planteamiento Referencia:&nbsp; Burden 3.5 p105, Chapra 18.6.3 p532, Rodr\u00edguez 6.11.1 p244 Tiene como objetivo incorporar condiciones adicionales para la funci\u00f3n en los extremos del intervalo donde se encuentran los puntos o \"nodos\". Por ejemplo, si los datos son los de una trayectoria en un experimento de [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"wp-custom-template-entrada-mn-unidades","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-584","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\/584","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=584"}],"version-history":[{"count":16,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/584\/revisions"}],"predecessor-version":[{"id":23405,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/584\/revisions\/23405"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=584"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=584"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=584"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}