{"id":184,"date":"2017-05-25T09:00:34","date_gmt":"2017-05-25T14:00:34","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=184"},"modified":"2026-04-18T12:05:02","modified_gmt":"2026-04-18T17:05:02","slug":"metodo-biseccion","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u02\/metodo-biseccion\/","title":{"rendered":"2.1 M\u00e9todo de la Bisecci\u00f3n"},"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\">Bisecci\u00f3n<\/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=\"#funcion\">funci\u00f3n<\/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. M\u00e9todo de la Bisecci\u00f3n \u00bfQu\u00e9 es?<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Burden 2.1 p36, Chapra 5.2 p124, Rodr\u00edguez 3.1 p36<\/p>\n\n\n\n<p>El m\u00e9todo m\u00e1s simple para buscar ra\u00edces de una ecuaci\u00f3n, se basa en el teorema del valor intermedio, b\u00fasqueda binaria, partici\u00f3n de intervalos o de Bolzano.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/biseccion_animado.gif\" alt=\"m\u00e9todo de la bisecci\u00f3n gr\u00e1fica con animaci\u00f3n en cada iteraci\u00f3n.\" class=\"wp-image-13308\" \/><\/figure>\n\n\n\n<p>En el intervalo donde existe un cruce por cero de la funci\u00f3n f(x), el algoritmo busca la ra\u00edz al reducir el intervalo en la mitad (bisecci\u00f3n), seleccionando el sub- intervalo donde se mantenga el cambio de signo de la funci\u00f3n f(x).<\/p>\n\n\n\n<p>Los pasos a seguir son los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el intervalo <code>[a,b]<\/code> se divide siempre en la mitad <code>c<\/code>.<\/li>\n\n\n\n<li>Si la funci\u00f3n f(x) cambia de signo sobre un intervalo, se eval\u00faa el valor de la funci\u00f3n en el punto medio <code>f(c)<\/code>.<\/li>\n\n\n\n<li>La posici\u00f3n de la ra\u00edz se determina en el punto medio del sub-intervalo, izquierdo o derecho,&nbsp; dentro del cual ocurre un \"cambio de signo\".<\/li>\n\n\n\n<li>el proceso se repite hasta obtener una mejor aproximaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<p>La gr\u00e1fica muestra una animaci\u00f3n del proceso, observe la forma en que progresivamente se acercan los puntos [a,b], donde se mantienen valores con signo diferente entre <code>f(a)<\/code> y <code>f(b)<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"552\" height=\"455\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/biseccion01.png\" alt=\"m\u00e9todo de la bisecci\u00f3n esquema para tramos o tama\u00f1os de paso en eje x\" class=\"wp-image-13309\" \/><\/figure>\n\n\n\n<p>Para describir mejor el m\u00e9todo, observamos la gr\u00e1fica en una sola iteraci\u00f3n.<\/p>\n\n\n\n<p>Para la primera iteraci\u00f3n se tiene que la funci\u00f3n tiene un cambio de signo dentro del intervalo [a,b].<\/p>\n\n\n\n<p>El intervalo se divide en la mitad, representado por el punto <code>c<\/code>, obteniendo el sub-intervalo izquierdo [a,<code>c<\/code>] o sub-intervalo derecho [<code>c<\/code>,b].<\/p>\n\n\n\n<p>El sub-intervalo que contiene la funci\u00f3n con un cambio de signo, se convierte en el nuevo intervalo por analizar en la siguiente iteraci\u00f3n.<\/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\">Bisecci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicios\">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=\"#funcion\">funci\u00f3n<\/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<h3 class=\"wp-block-heading\">1.2 Cota de Error<\/h3>\n\n\n\n<p><em><strong>Referencia<\/strong>: Burden Teorema 2.1&nbsp; <\/em>p39.<\/p>\n\n\n\n<p>El error del m\u00e9todo de la bisecci\u00f3n se estima como el ancho o tama\u00f1o del intervalo [a,b] de la \u00faltima iteraci\u00f3n realizada. Si el error es menor que la tolerancia del ejercicio, el algoritmo se detiene y se considera encontrada la ra\u00edz.<\/p>\n\n\n\n<p>Suponga que f \u2208 C[a,b] y f(a)*f(b)&lt;0, f es una funci\u00f3n en el intervalo [a,b] y que presenta un cambio de signo.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> |p_n - p| \\leq \\frac{b-a}{2^n} <\/span>\n\n\n\n<p class=\"has-text-align-center\">donde n <kbd>\u2265<\/kbd> 1<\/p>\n\n\n\n<p>la desigualdad implica que p<sub>n<\/sub> converge a p con una raz\u00f3n de convergencia de orden:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> O \\Big(\\frac{1}{2^n}\\Big) <\/span>\n\n\n\n<p>es decir:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> p_n =p+O \\Big( \\frac{1}{2^n} \\Big) <\/span>\n\n\n\n<p>Con lo que se puede determinar el n\u00famero de iteraciones necesarias para encontrar la ra\u00edz, tal como se muestra en el siguiente ejercicio.<\/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\">Bisecci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicios\">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=\"#funcion\">funci\u00f3n<\/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<h3 class=\"wp-block-heading\">1.3 Cantidad de iteraciones - Ejercicio<\/h3>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Burden ejemplo 2&nbsp; p40<\/p>\n\n\n\n<p>Determine la cantidad de iteraciones necesarias para resolver<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(x) = x^3 + 4x^2 -10 =0 <\/span>\n\n\n\n<p>con exactitud de 10<sup>-3<\/sup> en el intervalo [1,2].<\/p>\n\n\n\n<p><em>Desarrollo<\/em>: Se busca encontrar un entero <strong>n<\/strong> que satisface la ecuaci\u00f3n:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> |p_n -p| \\leq \\frac{b-a}{2^{n}}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> 2^{-n}&lt; 10^{-3}<\/span>\n\n\n\n<p>usando logaritmos:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -n \\log _{10}( 2) &lt; -3 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> n &gt; \\frac{3}{\\log _{10}( 2)} = 9.96 <\/span>\n\n\n\n<p>En consecuencia se requieren unas diez iteraciones para lograr la aproximaci\u00f3n de 10<sup>-3<\/sup>. Verifique los resultados con los valores calculados.<\/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\">Bisecci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicios\">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=\"#funcion\">funci\u00f3n<\/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=\"ejercicio\">2. Ejercicio<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Burden 2.1 ejemplo 1 p38<\/p>\n\n\n\n<p>La ecuaci\u00f3n mostrada tiene una ra\u00edz en [1,2], ya que f(1)=-5 y f(2)=14 y existe cambio de signo. Muestre los resultados parciales del algoritmo de la bisecci\u00f3n con una <strong>tolera<\/strong>ncia de 0.0001 <\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">f(x) = x^3 + 4x^2 -10 =0 <\/span>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/biseccion_animado.gif\" alt=\"m\u00e9todo de la bisecci\u00f3n gr\u00e1fica animada\" class=\"wp-image-13308\" \/><\/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\">Bisecci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicios\">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=\"#funcion\">funci\u00f3n<\/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=\"analitico\">3. Desarrollo Anal\u00edtico - ejemplo paso a paso<\/h2>\n\n\n\n<p>El desarrollo del ejercicio tradicionalmente realizado con l\u00e1piz, papel y calculadora, muestra el orden y detalle de las operaciones que se pueden traducir a un algoritmo en Python. El objetivo adem\u00e1s de desarrollar la comprensi\u00f3n del m\u00e9todo, permite en una evaluaci\u00f3n observar si el estudiante conoce el m\u00e9todo y usa apropiadamente los valores en cada iteraci\u00f3n.<\/p>\n\n\n\n<p><em>iteraci\u00f3n 1<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/biseccion_itera0.gif\" alt=\"m\u00e9todo de la bisecci\u00f3n iteraci\u00f3n 0 gr\u00e1fica\" class=\"wp-image-22797\" style=\"width:350px\" \/><\/figure>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a = 1, b=2 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> c = \\frac{a+b}{2} = \\frac{1+2}{2} = 1.5 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(1) = (1)^3 + 4(1)^2 -10 = -5 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(1.5) = (1.5)^3 + 4(1.5)^2 -10= 2.37 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(2) = (2)^3 + 4(2)^2 -10 =14 <\/span>\n\n\n\n<p>cambio de signo a la izquierda<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a = 1, b= c = 1.5 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> tramo = |1.5-1| =0.5 <\/span>\n\n\n\n<p><em>iteraci\u00f3n 2<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/biseccion_itera1.gif\" alt=\"m\u00e9todo de la bisecci\u00f3n iteraci\u00f3n 1 gr\u00e1fica\" class=\"wp-image-22799\" style=\"width:350px\" \/><\/figure>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a = 1, b=1.5 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> c = \\frac{1+1.5}{2} = 1.25 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(1) = -5 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(1.25) = (1.25)^3 + 4(1.25)^2 -10 = -1.794 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(1.5) = 2.37 <\/span>\n\n\n\n<p>cambio de signo a la derecha<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a = c = 1.25, b=1.5 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> tramo = |1.5-1.25| = 0.25 <\/span>\n\n\n\n<p><em>iteraci\u00f3n 3<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/biseccion_itera2.gif\" alt=\"m\u00e9todo de la bisecci\u00f3n iteraci\u00f3n 2 gr\u00e1fica\" class=\"wp-image-22800\" style=\"width:350px\" \/><\/figure>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a = 1.25, b=1.5 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> c = \\frac{1.25+1.5}{2} = 1.375 <\/span>\n\n\n\n<p>continuar como tarea ...<\/p>\n\n\n\n<p>La tabla resume los valores de las iteraciones.<\/p>\n\n\n\n<p>La misma tabla se puede realizar con un algoritmo para tener los resultados m\u00e1s r\u00e1pido y observar el comportamiento del m\u00e9todo.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>i<\/th><th>a<\/th><th>c<\/th><th>b<\/th><th>f(a)<\/th><th>f(c)<\/th><th>f(b)<\/th><th>tramo<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td><strong><em>1<\/em><\/strong><\/td><td><span style=\"color: #ff00ff\"><strong>1.5<\/strong><\/span><\/td><td>2<\/td><td><strong>-5<\/strong><\/td><td><strong>2.37<\/strong><\/td><td>14<\/td><td>0.5<\/td><\/tr><tr><td>2<\/td><td><em>1<\/em><\/td><td><span style=\"color: #0000ff\"><strong>1.25<\/strong><\/span><\/td><td><span style=\"color: #ff00ff\"><strong>1.5<\/strong><\/span><\/td><td>-5<\/td><td><strong>-1.79<\/strong><\/td><td><strong>2.37<\/strong><\/td><td>0.25<\/td><\/tr><tr><td>3<\/td><td><span style=\"color: #0000ff\"><strong>1.25<\/strong><\/span><\/td><td>...<\/td><td>1.5<\/td><td><\/td><td><\/td><td><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Observe los resultados de f(c), principalmente en la iteraci\u00f3n i=9 con tramo=0.00097 que representa el error de estimaci\u00f3n del valor vs tolerancia.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>m\u00e9todo de Bisecci\u00f3n\ni &#091;'a', 'c', 'b'] &#091;'f(a)', 'f(c)', 'f(b)']\n   tramo\n0 &#091;1.  1.5 2. ] &#091;-5.     2.375 14.   ]\n   0.5\n1 &#091;1.   1.25 1.5 ] &#091;-5.     -1.7969  2.375 ]\n   0.25\n2 &#091;1.25  1.375 1.5  ] &#091;-1.7969  0.1621  2.375 ]\n   0.125\n3 &#091;1.25   1.3125 1.375 ] &#091;-1.7969 -0.8484  0.1621]\n   0.0625\n4 &#091;1.3125 1.3438 1.375 ] &#091;-0.8484 -0.351   0.1621]\n   0.03125\n5 &#091;1.3438 1.3594 1.375 ] &#091;-0.351  -0.0964  0.1621]\n   0.015625\n6 &#091;1.3594 1.3672 1.375 ] &#091;-0.0964  0.0324  0.1621]\n   0.0078125\n7 &#091;1.3594 1.3633 1.3672] &#091;-0.0964 -0.0321  0.0324]\n   0.00390625\n8 &#091;1.3633 1.3652 1.3672] &#091;-3.2150e-02  7.2025e-05  3.2356e-02]\n   0.001953125\n9 &#091;1.3633 1.3643 1.3652] &#091;-3.2150e-02 -1.6047e-02  7.2025e-05]\n   0.0009765625\nM\u00e9todo de la Bisecci\u00f3n\niteraciones: 10\nra\u00edz en:  1.3642578125\nerrado: 0.0009765625\n&gt;&gt;&gt; <\/code><\/pre>\n\n\n\n<p>Se realiza la gr\u00e1fica con los puntos [<strong>c,f(c)<\/strong>]&nbsp;de la tabla para observar el resultado, resaltando que los puntos al final se aglomeran alrededor de la soluci\u00f3n o ra\u00edz de la ecuaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"441\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/05\/biseccion02.png\" alt=\"m\u00e9todo de la bisecci\u00f3n gr\u00e1fica puntos iteraci\u00f3n\" class=\"wp-image-13310\" \/><\/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\">Bisecci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicios\">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=\"#funcion\">funci\u00f3n<\/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=\"algoritmo\">4. Algoritmo en Python para el m\u00e9todo de la Bisecci\u00f3n<\/h2>\n\n\n\n<p>El video presenta el desarrollo b\u00e1sico conceptual del algoritmo en Python para una comprensi\u00f3n del proceso paso a paso.<\/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=\"M\u00e9todo de la Bisecci\u00f3n y gr\u00e1fica con Python - M\u00e9todos Num\u00e9ricos\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/EFo49MuYBA4?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 \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# M\u00e9todo de la Bisecci\u00f3n\n# &#x5B;a,b] se seleccionan de la gr\u00e1fica de f(x)\nimport numpy as np\n\n# INGRESO\nfx = lambda x: x**3 + 4*x**2 - 10 \na = 1\nb = 2\ntolera = 0.001\n\n# PROCEDIMIENTO\ntramo = b-a\nwhile not(tramo&lt;tolera):\n    c = (a+b)\/2\n    fa = fx(a)\n    fb = fx(b)\n    fc = fx(c)\n    cambia = np.sign(fa)*np.sign(fc)\n    if cambia &lt; 0:  # cambio de signo izquierda\n        a = a\n        b = c\n    if cambia &gt; 0:  # cambio de signo derecha\n        a = c\n        b = b\n    tramo = b-a\n\n# SALIDA\nprint('Bisecci\u00f3n raiz en: ', c)\nprint('errado: ', tramo)\n<\/pre><\/div>\n\n\n<p>Instrucciones en Python del Algoritmo b\u00e1sico del video<\/p>\n\n\n\n<p>Se obtiene el siguiente resultado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bisecci\u00f3n ra\u00edz en:  1.3642578125\nerrado:  0.0009765625\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\">Bisecci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicios\">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=\"#funcion\">funci\u00f3n<\/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=\"funcion\">5. Algoritmo en Python como funci\u00f3n<\/h2>\n\n\n\n<p>El algoritmo presentado en el video se puede mejorar, por ejemplo simplificando los dos <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/fp-unidades\/fp-u03\/condicionales-estructura\/\" data-type=\"post\" data-id=\"7887\">condicionales<\/a> en uno.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; gutter: false; title: ; notranslate\" title=\"\">\n            if (cambia&lt;0): # cambio de signo izquierda\n                b = c\n                fb = fc\n            else:  # cambio de signo derecha\n                a = c\n                fa = fc\n<\/pre><\/div>\n\n\n<p>Considere que en cada iteraci\u00f3n, se eval\u00faa la funci\u00f3n en tres puntos, f<sub>a<\/sub> y f<sub>b<\/sub> se calculan en la iteraci\u00f3n anterior. Se puede optimizar sustituyendo los valores de los extremos y solo evaluando el centro f<sub>c<\/sub>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; gutter: false; title: ; notranslate\" title=\"\">\n    fa = fx(a)\n    fb = fx(b)\n    tramo = np.abs(b-a)\n    itera = 0\n...\n        while (tramo&gt;=tolera and itera&lt;=iteramax):\n            c = (a+b)\/2\n            fc = fx(c)\n            cambia = np.sign(fa)*np.sign(fc)\n<\/pre><\/div>\n\n\n<p>Para el desarrollo con l\u00e1piz y papel ser\u00eda necesario observar los valores calculados en cada iteraci\u00f3n, por lo que se a\u00f1ade una variable \"<em><strong>vertabla<\/strong><\/em>\" para activar las instrucciones que muestran los c\u00e1lculos en cada iteraci\u00f3n.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; gutter: false; title: ; notranslate\" title=\"\">\n        if vertabla==True:\n            print('m\u00e9todo de Bisecci\u00f3n')\n            print('i', &#x5B;'a','c','b'],\n                   &#x5B; 'f(a)', 'f(c)','f(b)'])\n            print('  ','tramo')\n            np.set_printoptions(precision)\n<\/pre><\/div>\n\n\n<p>Se incluye validar que el intervalo disponga de f<sub>a<\/sub> y f<sub>b<\/sub> con signos opuestos, antes de intentar usar el algoritmo<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; gutter: false; title: ; notranslate\" title=\"\">\n    if cambia&lt;0: # existe cambio de signo f(a) vs f(b)\n<\/pre><\/div>\n\n\n<p>Finalmente se puede convertir el procedimiento en una funci\u00f3n de Python.<\/p>\n\n\n\n<p>Algoritmo en Python como funci\u00f3n<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Algoritmo de Bisecci\u00f3n, con tabla\n# Los valores de &#x5B;a,b] son aceptables\n# y seleccionados desde la gr\u00e1fica de la funci\u00f3n\n# error = tolera\nimport numpy as np\n \ndef biseccion(fx,a,b,tolera,iteramax = 50,\n                    vertabla=False, precision=6):\n    '''Algoritmo de Bisecci\u00f3n\n    Los valores de &#x5B;a,b] son seleccionados\n    desde la gr\u00e1fica de la funci\u00f3n\n    error = tolera\n    '''\n    fa = fx(a)\n    fb = fx(b)\n    tramo = np.abs(b-a)\n    itera = 0\n    cambia = np.sign(fa)*np.sign(fb)\n    tabla=&#x5B;]\n\n    if cambia&lt;0: # existe cambio de signo f(a) vs f(b)\n        if vertabla==True:\n            print('m\u00e9todo de la Bisecci\u00f3n')\n            print('i', &#x5B;'a','c','b'],&#x5B; 'f(a)', 'f(c)','f(b)'])\n            print('  ','tramo')\n            np.set_printoptions(precision)\n             \n        while (tramo&gt;=tolera and itera&lt;=iteramax):\n            c = (a+b)\/2\n            fc = fx(c)\n            cambia = np.sign(fa)*np.sign(fc)\n            unafila = np.array(&#x5B;a,c,b,fa,fc,fb])\n            if (cambia&lt;0):\n                b = c\n                fb = fc\n            else:\n                a = c\n                fa = fc\n            tramo = np.abs(b-a)\n            unafila = np.concatenate(&#x5B;unafila,&#x5B;tramo]],axis=0)\n            tabla.append(unafila)\n            if vertabla==True:\n                print(itera,unafila&#x5B;0:3],unafila&#x5B;3:6])\n                print('  ',tramo)\n            itera = itera + 1\n        respuesta = c\n        # Valida respuesta\n        if (itera&gt;=iteramax):\n            respuesta = np.nan\n \n    else: \n        print(' No existe cambio de signo entre f(a) y f(b)')\n        print(' f(a) =',fa,',  f(b) =',fb) \n        respuesta=np.nan\n    tabla = np.array(tabla,dtype=float)\n    return(respuesta,tabla)\n \n# PROGRAMA ----------------------\n# INGRESO\nfx  = lambda x: x**3 + 4*x**2 - 10\na = 1\nb = 2\ntolera = 0.001\nverdigitos = 4 # ver digitos en tabla\n \n# PROCEDIMIENTO\nc,tabla = biseccion(fx,a,b,tolera,\n                    vertabla=True,\n                    precision=verdigitos)\nn = len(tabla)\nerrado = tabla&#x5B;n-1,6]\n\n# SALIDA\nprint('M\u00e9todo de la Bisecci\u00f3n')\nprint('iteraciones:',n)\nprint('ra\u00edz en: ',c)\nprint('errado:',errado)\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\">Bisecci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicios\">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=\"#funcion\">funci\u00f3n<\/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=\"grafica\">6. Gr\u00e1fica en Python<\/h2>\n\n\n\n<p>La secci\u00f3n para la gr\u00e1fica, contiene las  variantes:<\/p>\n\n\n\n<p>Las muestras para la gr\u00e1fica de f(x), con la marca de un punto de la ra\u00edz. <\/p>\n\n\n\n<p>Para el caso de realizar la gr\u00e1fica de una iteraci\u00f3n particular, usar la variable <strong>itera_graf<\/strong>. Por ejemplo para las gr\u00e1ficas presentadas en cada iteraci\u00f3n en la secci\u00f3n de <a href=\"#analitico\">desarrollo anal\u00edtico<\/a>.<\/p>\n\n\n\n<p>Las instrucciones que se a\u00f1aden al algoritmo como funci\u00f3n son:<\/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 = 21 # en intervalo &#x5B;a,b]\nitera_graf = n-1 # iteraci\u00f3n en gr\u00e1fica\n\ntitulo = 'Bisecci\u00f3n'\nxk = np.linspace(a,b,muestras)\nfk = fx(xk)\n&#x5B;ai,ci,bi] = tabla&#x5B;itera_graf,0:3]\n&#x5B;fai,fci,fbi] = tabla&#x5B;itera_graf,3:6]\n\nplt.plot(xk,fk, label='f(x)')\n\nif itera_graf==(n-1): # iteraci\u00f3n final\n    plt.plot(c,0,'D',color='orange',label='c')\n\nif itera_graf&lt;(n-1): # una iteraci\u00f3n en gr\u00e1fica\n    titulo = titulo + ', itera='+str(itera_graf)\n    plt.plot(ai,fai,'o',color='red',label='a')\n    plt.plot(bi,fbi,'o',color='green',label='b')\n    plt.plot(ci,fci,'o',color='orange',label='c')\n\n    plt.plot(&#x5B;ai,ai],&#x5B;fai,0],'--',color='red')\n    plt.plot(&#x5B;bi,bi],&#x5B;fbi,0],'--',color='green')\n    plt.plot(&#x5B;ci,ci],&#x5B;fci,0],'--',color='orange')\n\nplt.axhline(0,color='gray')\nplt.xlabel('x')\nplt.ylabel('f(x)')\nplt.title(titulo)\nplt.grid()\nplt.legend()\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\">Bisecci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicios\">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=\"#funcion\">funci\u00f3n<\/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=\"libreria\">7. Funci\u00f3n en librer\u00eda Scipy.optimize.bisect<\/h2>\n\n\n\n<p>El m\u00e9todo de la bisecci\u00f3n se encuentra tambi\u00e9n implementado en las librer\u00eda Scipy, que tambi\u00e9n puede ser usado de la forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; import scipy as sp\n&gt;&gt;&gt; fx = lambda x: x**3 + 4*x**2 - 10\n&gt;&gt;&gt; sp.optimize.bisect(fx,1,2,xtol=0.001)\n1.3642578125<\/code><\/pre>\n\n\n\n<p>que es el resultado de la ra\u00edz para la \u00faltima iteraci\u00f3n del ejercicio. Lo que muestra que el algoritmo realizado tiene un valor m\u00e1s aproximado.<\/p>\n\n\n\n<p>Sin embargo por did\u00e1ctica y mejor comprensi\u00f3n de los m\u00e9todos y su implementaci\u00f3n en algoritmos que es parte del objetivo de aprendizaje, se continuar\u00e1 desarrollando la forma b\u00e1sica y detallada con Python.<\/p>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: <a href=\"https:\/\/docs.scipy.org\/doc\/scipy\/reference\/generated\/scipy.optimize.bisect.html\">https:\/\/docs.scipy.org\/doc\/scipy\/reference\/generated\/scipy.optimize.bisect.html<\/a><\/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\">Bisecci\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicios\">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=\"#funcion\">funci\u00f3n<\/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","protected":false},"excerpt":{"rendered":"<p>Bisecci\u00f3n Ejercicio Anal\u00edtico Algoritmo funci\u00f3n gr\u00e1fica librer\u00eda 1. M\u00e9todo de la Bisecci\u00f3n \u00bfQu\u00e9 es? Referencia: Burden 2.1 p36, Chapra 5.2 p124, Rodr\u00edguez 3.1 p36 El m\u00e9todo m\u00e1s simple para buscar ra\u00edces de una ecuaci\u00f3n, se basa en el teorema del valor intermedio, b\u00fasqueda binaria, partici\u00f3n de intervalos o de Bolzano. En el intervalo donde existe [&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":[36],"tags":[],"class_list":["post-184","post","type-post","status-publish","format-standard","hentry","category-mn-u02"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/184","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=184"}],"version-history":[{"count":27,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/184\/revisions"}],"predecessor-version":[{"id":22817,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/184\/revisions\/22817"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}