<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Método de Bisección en Java 21]]></title><description><![CDATA[Método de Bisección en Java 21]]></description><link>https://metodo-de-biseccion-en-java-21.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 19:52:47 GMT</lastBuildDate><atom:link href="https://metodo-de-biseccion-en-java-21.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Método de Bisección en Java 21: guía completa con código y explicación práctica]]></title><description><![CDATA[Introducción
El método de bisección es uno de los algoritmos más simples y robustos para encontrar raíces reales de funciones continuas. Su principio es dividir sucesivamente un intervalo en dos partes hasta localizar el punto donde la función cambia...]]></description><link>https://metodo-de-biseccion-en-java-21.hashnode.dev/metodo-de-biseccion-en-java-21-guia-completa-con-codigo-y-explicacion-practica</link><guid isPermaLink="true">https://metodo-de-biseccion-en-java-21.hashnode.dev/metodo-de-biseccion-en-java-21-guia-completa-con-codigo-y-explicacion-practica</guid><category><![CDATA[Methods]]></category><category><![CDATA[numerology]]></category><category><![CDATA[Java]]></category><category><![CDATA[Mathematics]]></category><dc:creator><![CDATA[Jhon Torres]]></dc:creator><pubDate>Mon, 27 Oct 2025 05:00:00 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-introduccion">Introducción</h3>
<p>El <strong>método de bisección</strong> es uno de los algoritmos más simples y robustos para encontrar raíces reales de funciones continuas. Su principio es dividir sucesivamente un intervalo en dos partes hasta localizar el punto donde la función cambia de signo, lo cual indica la presencia de una raíz.</p>
<p>En este artículo te mostraré cómo implementarlo en <strong>Java 21</strong>, cómo funciona paso a paso y por qué sigue siendo una herramienta esencial en análisis numérico.</p>
<hr />
<h3 id="heading-fundamento-teorico">⚙️ Fundamento teórico</h3>
<pre><code class="lang-java"><span class="hljs-function">Método de Bisección
Si una función <span class="hljs-title">continuamf</span><span class="hljs-params">(x)</span> cumple que <span class="hljs-title">f</span><span class="hljs-params">(a)</span> y <span class="hljs-title">f</span><span class="hljs-params">(b)</span> tienen signos <span class="hljs-title">opuestos</span> <span class="hljs-params">(es decir, f(a)</span>⋅<span class="hljs-title">f</span><span class="hljs-params">(b)</span>&lt;0), 
entonces, por el Teorema del Valor Intermedio, existe al menos una raíz 𝑟 en el intervalo 
[a,b] tal que 
<span class="hljs-title">f</span><span class="hljs-params">(r)</span></span>=<span class="hljs-number">0.</span>
El método de bisección reduce el intervalo en cada iteración hasta que la longitud del intervalo es menor que una tolerancia deseada.
Pasos del algoritmo:
Escoger a y 𝑏 <span class="hljs-function">tales que <span class="hljs-title">f</span><span class="hljs-params">(a)</span>⋅<span class="hljs-title">f</span><span class="hljs-params">(b)</span>&lt;0.

Calcular el punto medio c</span>=(a+b)/<span class="hljs-number">2.</span>

<span class="hljs-function">Evaluar <span class="hljs-title">f</span><span class="hljs-params">(c)</span>. Si <span class="hljs-title">f</span><span class="hljs-params">(c)</span></span>=<span class="hljs-number">0</span>, entonces c es la raíz.

<span class="hljs-function">Si <span class="hljs-title">f</span><span class="hljs-params">(a)</span>⋅<span class="hljs-title">f</span><span class="hljs-params">(c)</span>&lt;0, la raíz está entre c</span>; asignar b=c.
De lo contrario, asignar a=c.
Repetir hasta que ∣b−a∣/<span class="hljs-number">2</span>&lt;tolerancia.

El método siempre converge, aunque puede ser más lento que otros métodos (como Newton-Raphson).
</code></pre>
<hr />
<h3 id="heading-codigo-completo-en-java-21">💻 Código completo en Java 21</h3>
<pre><code class="lang-java"><span class="hljs-keyword">import</span> java.util.Scanner;
<span class="hljs-keyword">import</span> java.util.function.DoubleUnaryOperator;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BiseccionInteractiva</span> </span>{

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        Scanner sc = <span class="hljs-keyword">new</span> Scanner(System.in);

        System.out.println(<span class="hljs-string">"Método de Bisección"</span>);
        System.out.println(<span class="hljs-string">"Función fija: f(x) = x^3 - x - 2"</span>);

        System.out.print(<span class="hljs-string">"Ingrese el límite inferior (a): "</span>);
        <span class="hljs-keyword">double</span> a = sc.nextDouble();

        System.out.print(<span class="hljs-string">"Ingrese el límite superior (b): "</span>);
        <span class="hljs-keyword">double</span> b = sc.nextDouble();

        System.out.print(<span class="hljs-string">"Ingrese la tolerancia (ej. 1e-6): "</span>);
        <span class="hljs-keyword">double</span> tol = sc.nextDouble();

        System.out.print(<span class="hljs-string">"Ingrese el número máximo de iteraciones: "</span>);
        <span class="hljs-keyword">int</span> maxIter = sc.nextInt();

        DoubleUnaryOperator f = x -&gt; Math.pow(x, <span class="hljs-number">3</span>) - x - <span class="hljs-number">2</span>;

        <span class="hljs-keyword">if</span> (f.applyAsDouble(a) * f.applyAsDouble(b) &gt;= <span class="hljs-number">0</span>) {
            System.out.println(<span class="hljs-string">"Error: f(a) y f(b) deben tener signos opuestos."</span>);
            <span class="hljs-keyword">return</span>;
        }

        <span class="hljs-keyword">double</span> raiz = biseccion(f, a, b, tol, maxIter);
        System.out.println(<span class="hljs-string">"Raíz aproximada: "</span> + raiz);
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">double</span> <span class="hljs-title">biseccion</span><span class="hljs-params">(DoubleUnaryOperator f, <span class="hljs-keyword">double</span> a, <span class="hljs-keyword">double</span> b, <span class="hljs-keyword">double</span> tol, <span class="hljs-keyword">int</span> maxIter)</span> </span>{
        <span class="hljs-keyword">double</span> c = a;
        <span class="hljs-keyword">int</span> iter = <span class="hljs-number">0</span>;

        <span class="hljs-keyword">while</span> ((b - a) / <span class="hljs-number">2</span> &gt; tol &amp;&amp; iter &lt; maxIter) {
            c = (a + b) / <span class="hljs-number">2</span>;
            <span class="hljs-keyword">double</span> fc = f.applyAsDouble(c);

            <span class="hljs-keyword">if</span> (fc == <span class="hljs-number">0.0</span>) <span class="hljs-keyword">break</span>;
            <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (f.applyAsDouble(a) * fc &lt; <span class="hljs-number">0</span>) b = c;
            <span class="hljs-keyword">else</span> a = c;

            iter++;
        }

        System.out.printf(<span class="hljs-string">"Iteraciones realizadas: %d%n"</span>, iter);
        <span class="hljs-keyword">return</span> (a + b) / <span class="hljs-number">2</span>;
    }
}
</code></pre>
<hr />
<h3 id="heading-explicacion-linea-por-linea">🔍 Explicación línea por línea</h3>
<pre><code class="lang-java">Scanner permite al usuario ingresar valores desde consola.

<span class="hljs-function">DoubleUnaryOperator define una función de tipo <span class="hljs-title">f</span><span class="hljs-params">(x)</span>

Se usa Math.<span class="hljs-title">pow</span><span class="hljs-params">(x, <span class="hljs-number">3</span>)</span> - x - 2 como función <span class="hljs-title">ejemplo</span> <span class="hljs-params">(cuya raíz real es ≈ <span class="hljs-number">1.52138</span>)</span>.

Se validan los signos de <span class="hljs-title">f</span><span class="hljs-params">(a)</span> y <span class="hljs-title">f</span><span class="hljs-params">(b)</span> antes de iniciar.

En el ciclo <span class="hljs-keyword">while</span>, el programa reduce el intervalo hasta cumplir la tolerancia o alcanzar el número máximo de iteraciones.

El método devuelve el punto medio del último intervalo como la raíz aproximada.</span>
</code></pre>
<hr />
<h3 id="heading-ejemplo-de-ejecucion">🧩 Ejemplo de ejecución</h3>
<pre><code class="lang-java">Método de Bisección
Función fija: f(x) = x^<span class="hljs-number">3</span> - x - <span class="hljs-number">2</span>
<span class="hljs-function">Ingrese el límite <span class="hljs-title">inferior</span> <span class="hljs-params">(a)</span>: 1
Ingrese el límite <span class="hljs-title">superior</span> <span class="hljs-params">(b)</span>: 2
Ingrese la <span class="hljs-title">tolerancia</span> <span class="hljs-params">(ej. <span class="hljs-number">1e-6</span>)</span>: 1e-6
Ingrese el número máximo de iteraciones: 100
Iteraciones realizadas: 20
Raíz aproximada: 1.52138</span>
</code></pre>
<hr />
<h3 id="heading-ventajas-y-limitaciones">📈 Ventajas y limitaciones</h3>
<p><strong>Ventajas:</strong></p>
<ul>
<li><p>Convergencia garantizada si f(a)f(a)f(a) y f(b)f(b)f(b) tienen signos opuestos.</p>
</li>
<li><p>Implementación simple y estable.</p>
</li>
</ul>
<p><strong>Limitaciones:</strong></p>
<ul>
<li><p>Lento en comparación con métodos derivados (Newton, Secante).</p>
</li>
<li><p>Solo encuentra una raíz por intervalo.</p>
</li>
<li><p>Requiere conocer dos puntos iniciales donde la función cambie de signo.</p>
</li>
</ul>
<hr />
<h3 id="heading-conclusion">🧪 Conclusión</h3>
<p>El <strong>método de bisección</strong> es ideal para introducirse en los algoritmos de búsqueda de raíces. Aunque no es el más rápido, su certeza de convergencia lo convierte en una herramienta confiable para cualquier ingeniero, matemático o desarrollador que trabaje con problemas numéricos.</p>
]]></content:encoded></item></channel></rss>