<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Arturo Sanjuán</title>
<link>https://arturosanjuan.xyz/cursos/numerico/</link>
<atom:link href="https://arturosanjuan.xyz/cursos/numerico/index.xml" rel="self" type="application/rss+xml"/>
<description>.</description>
<image>
<url>https://arturosanjuan.xyz/lorenz.png</url>
<title>Arturo Sanjuán</title>
<link>https://arturosanjuan.xyz/cursos/numerico/</link>
</image>
<generator>quarto-1.10.18</generator>
<lastBuildDate>Fri, 11 Sep 2026 05:00:00 GMT</lastBuildDate>
<item>
  <title>Sistemas lineales e interpolación</title>
  <dc:creator>Arturo Sanjuán</dc:creator>
  <link>https://arturosanjuan.xyz/cursos/numerico/matrices/</link>
  <description><![CDATA[ 




<p>Antes de hacer los ejercicios de las secciones 2.1–2.3 familiarícese con la manipulación matricial y los comandos básicos de Polynomials y Plots en Julia.</p>
<section id="problema-de-demografía-ejercicio-2.1.3" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="problema-de-demografía-ejercicio-2.1.3"><span class="header-section-number">1</span> Problema de demografía (ejercicio 2.1.3)</h2>
<p>Los datos son poblaciones (en millones) de tres países en cuatro censos:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th></th>
<th>1990</th>
<th>2000</th>
<th>2010</th>
<th>2020</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Estados Unidos</td>
<td>252,120</td>
<td>281,711</td>
<td>309,011</td>
<td>331,003</td>
</tr>
<tr class="even">
<td>India</td>
<td>873,278</td>
<td>1.056,576</td>
<td>1.234,281</td>
<td>1.380,004</td>
</tr>
<tr class="odd">
<td>Polonia</td>
<td>37,960</td>
<td>38,557</td>
<td>38,330</td>
<td>37,847</td>
</tr>
</tbody>
</table>
<p>Con cuatro puntos por país buscamos, en cada caso, el único polinomio cúbico que pasa por ellos. Como ya vimos con los datos de población de China en la sección 2.1, conviene no trabajar directamente con los años (1990, 2000, …) como variable independiente, porque las potencias de números tan grandes producen una matriz de Vandermonde con columnas de magnitudes muy dispares y mal condicionada. En su lugar usamos</p>
<p><img src="https://latex.codecogs.com/png.latex?t%20=%20%5Cfrac%7B%5Ctext%7Ba%C3%B1o%7D-1990%7D%7B10%7D,%20%5Cqquad%20t=0,1,2,3"></p>
<p>con lo que la matriz de Vandermonde queda con entradas entre <img src="https://latex.codecogs.com/png.latex?0"> y <img src="https://latex.codecogs.com/png.latex?27">, mucho más manejable.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb1-1">year <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1990</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2010</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2020</span>]</span>
<span id="cb1-2">t <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (year <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">.-</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1990</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">./</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span></span>
<span id="cb1-3">V <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [ t[i]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span>j for i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, j <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> ]</span></code></pre></div></div>
<p><strong>(a) Estados Unidos en 2005.</strong> Resolviendo <img src="https://latex.codecogs.com/png.latex?Vc%20=%20y"> con los datos de Estados Unidos se obtiene el polinomio, en la variable <img src="https://latex.codecogs.com/png.latex?t">,</p>
<p><img src="https://latex.codecogs.com/png.latex?p(t)%20=%20252%7B,%7D120%20+%2029%7B,%7D730833%5C,t%20+%200%7B,%7D363%5C,t%5E2%20-%200%7B,%7D502833%5C,t%5E3"></p>
<p>El año 2005 corresponde a <img src="https://latex.codecogs.com/png.latex?t=1%7B,%7D5">. Evaluando,</p>
<p><img src="https://latex.codecogs.com/png.latex?p(1%7B,%7D5)%20%5Capprox%20295%7B,%7D836%20%5Ctext%7B%20millones%7D"></p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb2-1">c <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> V <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\</span> usa</span>
<span id="cb2-2">p <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Polynomial</span>(c)</span>
<span id="cb2-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">p</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>)   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># 295.83593750000006</span></span></code></pre></div></div>
<p><strong>(b) El pico de Polonia.</strong> Con los mismos nodos y los datos de Polonia se obtiene</p>
<p><img src="https://latex.codecogs.com/png.latex?q(t)%20=%2037%7B,%7D960%20+%201%7B,%7D198333%5C,t%20-%200%7B,%7D696%5C,t%5E2%20+%200%7B,%7D094667%5C,t%5E3"></p>
<p>Un máximo de <img src="https://latex.codecogs.com/png.latex?q"> en el intervalo cumple <img src="https://latex.codecogs.com/png.latex?q'(t)=0">. Derivando,</p>
<p><img src="https://latex.codecogs.com/png.latex?q'(t)%20=%201%7B,%7D198333%20-%201%7B,%7D392%5C,t%20+%200%7B,%7D284%5C,t%5E2"></p>
<p>y resolviendo la cuadrática salen dos raíces, <img src="https://latex.codecogs.com/png.latex?t%5Capprox1%7B,%7D114"> y <img src="https://latex.codecogs.com/png.latex?t%5Capprox3%7B,%7D787">. Solo la primera cae dentro de la ventana de datos (<img src="https://latex.codecogs.com/png.latex?0%5Cle%20t%5Cle3">, entre 1990 y 2020); la segunda corresponde a un año fuera de esa ventana (2028) y es un artefacto de extrapolar el comportamiento algebraico del polinomio más allá de donde hay datos, no algo en lo que debamos confiar (el mismo tipo de advertencia que discutimos sobre no usar un interpolante para predecir fuera del rango observado).</p>
<p>Revisando el signo de <img src="https://latex.codecogs.com/png.latex?q''"> en cada raíz se confirma que <img src="https://latex.codecogs.com/png.latex?t%5Capprox1%7B,%7D114"> es efectivamente un máximo y la otra raíz es un mínimo. Entonces el pico ocurre en</p>
<p><img src="https://latex.codecogs.com/png.latex?t%5Capprox1%7B,%7D114%20%5C;%5CLongrightarrow%5C;%20%5Ctext%7Ba%C3%B1o%7D%5Capprox2001,%20%5Cqquad%20q(1%7B,%7D114)%5Capprox38%7B,%7D562%5Ctext%7B%20millones%7D"></p>
<p>Es decir, según esta interpolación la población de Polonia alcanzó su máximo alrededor del año 2001, con algo más de 38,5 millones de habitantes, y descendió de forma sostenida en la década siguiente.</p>
<p><strong>(c) La curva de India.</strong> El mismo procedimiento con los datos de India da un polinomio cúbico que, graficado junto con los cuatro puntos originales, se ve así:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://arturosanjuan.xyz/cursos/numerico/matrices/india.png" class="img-fluid figure-img"></p>
<figcaption>Interpolación cúbica de la población de India</figcaption>
</figure>
</div>
<p>La curva es suave y estrictamente creciente en todo el intervalo, sin ningún vaivén: con solo cuatro puntos y un cúbico no hay espacio para que aparezcan las oscilaciones que sí se ven con interpolantes de grado mucho más alto (el fenómeno de Runge, que se estudia más adelante en el capítulo 9). Aquí el interpolante se comporta como uno esperaría de una curva real de crecimiento poblacional.</p>
</section>
<section id="sistemas-con-matrices-triangulares-inferiores-algoritmo-2.3.1-forwardsub" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="sistemas-con-matrices-triangulares-inferiores-algoritmo-2.3.1-forwardsub"><span class="header-section-number">2</span> Sistemas con matrices triangulares inferiores (algoritmo 2.3.1 (forwardsub))</h2>
<p>El problema que resuelve este algoritmo es un sistema <img src="https://latex.codecogs.com/png.latex?L%5Cmathbf%7Bx%7D=%5Cmathbf%7Bb%7D"> donde <img src="https://latex.codecogs.com/png.latex?L"> es triangular inferior, es decir, todas las entradas por encima de la diagonal son cero. La idea es que la primera ecuación del sistema involucra solamente a <img src="https://latex.codecogs.com/png.latex?x_1">:</p>
<p><img src="https://latex.codecogs.com/png.latex?L_%7B11%7Dx_1%20=%20b_1%20%5C;%5CLongrightarrow%5C;%20x_1%20=%20%5Cfrac%7Bb_1%7D%7BL_%7B11%7D%7D"></p>
<p>La segunda ecuación involucra a <img src="https://latex.codecogs.com/png.latex?x_1"> y <img src="https://latex.codecogs.com/png.latex?x_2">, pero <img src="https://latex.codecogs.com/png.latex?x_1"> ya lo conocemos del paso anterior, así que despejamos <img src="https://latex.codecogs.com/png.latex?x_2">:</p>
<p><img src="https://latex.codecogs.com/png.latex?L_%7B21%7Dx_1%20+%20L_%7B22%7Dx_2%20=%20b_2%20%5C;%5CLongrightarrow%5C;%20x_2%20=%20%5Cfrac%7Bb_2%20-%20L_%7B21%7Dx_1%7D%7BL_%7B22%7D%7D"></p>
<p>y así sucesivamente: la ecuación <img src="https://latex.codecogs.com/png.latex?i"> involucra a <img src="https://latex.codecogs.com/png.latex?x_1,%5Cldots,x_i">, pero los primeros <img src="https://latex.codecogs.com/png.latex?i-1"> ya se calcularon en pasos anteriores, de modo que solo queda una incógnita por despejar. En general,</p>
<p><img src="https://latex.codecogs.com/png.latex?x_i%20=%20%5Cfrac%7Bb_i%20-%20%5Csum_%7Bj=1%7D%5E%7Bi-1%7D%20L_%7Bij%7Dx_j%7D%7BL_%7Bii%7D%7D"></p>
<p>Este proceso, de avanzar calculando un componente a la vez, es lo que le da el nombre de sustitución hacia adelante. Su implementación en Julia sigue la fórmula al pie de la letra:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb3-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">forwardsub</span>(L, b)</span>
<span id="cb3-2">    n <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">size</span>(L, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-3">    x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">zeros</span>(n)</span>
<span id="cb3-4">    x[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> b[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> L[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb3-5">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span>n</span>
<span id="cb3-6">        s <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(L[i, j] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> x[j] <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> j <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span>i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-7">        x[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (b[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> s) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> L[i, i]</span>
<span id="cb3-8">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span>
<span id="cb3-9">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> x</span>
<span id="cb3-10"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span></code></pre></div></div>
<p>El primer componente se calcula aparte porque la suma vacía (de <img src="https://latex.codecogs.com/png.latex?j=1"> a <img src="https://latex.codecogs.com/png.latex?0">) le daría problemas al <code>sum</code> de Julia. Dentro del ciclo, <code>s</code> acumula exactamente la parte ya conocida de la ecuación <img src="https://latex.codecogs.com/png.latex?i">, y la línea siguiente despeja <img src="https://latex.codecogs.com/png.latex?x_i">.</p>
<p>Vale la pena notar el costo: cada paso <img src="https://latex.codecogs.com/png.latex?i"> hace <img src="https://latex.codecogs.com/png.latex?i-1"> multiplicaciones para formar la suma, así que el total en todo el algoritmo es del orden de <img src="https://latex.codecogs.com/png.latex?n%5E2/2"> operaciones, muy por debajo de las <img src="https://latex.codecogs.com/png.latex?O(n%5E3)"> que cuesta resolver un sistema arbitrario por eliminación gaussiana completa. Esta es la razón por la que triangularizar un sistema primero (mediante la factorización LU de la siguiente sección) resulta tan valioso: una vez triangular, resolverlo es barato.</p>
<p>El algoritmo solo falla si algún <img src="https://latex.codecogs.com/png.latex?L_%7Bii%7D"> es cero, porque ahí aparecería una división por cero; y por el Teorema 2.3.1 del libro, eso ocurre exactamente cuando <img src="https://latex.codecogs.com/png.latex?L"> es singular.</p>
<section id="caso-particular-ejercicio-2.3.3" class="level3" data-number="2.1">
<h3 data-number="2.1" class="anchored" data-anchor-id="caso-particular-ejercicio-2.3.3"><span class="header-section-number">2.1</span> Caso particular (ejercicio 2.3.3)</h3>
<p>El sistema (a) del ejercicio 2.3.2 es</p>
<p><img src="https://latex.codecogs.com/png.latex?%0A%5Cbegin%7Baligned%7D%0A-2x_1%20&amp;=%20-4%20%5C%5C%0Ax_1%20-%20x_2%20&amp;=%202%20%5C%5C%0A3x_1%20+%202x_2%20+%20x_3%20&amp;=%201%0A%5Cend%7Baligned%7D%0A"></p>
<p>que en forma matricial es <img src="https://latex.codecogs.com/png.latex?L%5Cmathbf%7Bx%7D=%5Cmathbf%7Bb%7D"> con</p>
<p><img src="https://latex.codecogs.com/png.latex?%0AL%20=%20%5Cbegin%7Bbmatrix%7D%20-2%20&amp;%200%20&amp;%200%20%5C%5C%201%20&amp;%20-1%20&amp;%200%20%5C%5C%203%20&amp;%202%20&amp;%201%20%5Cend%7Bbmatrix%7D,%20%5Cqquad%0A%5Cmathbf%7Bb%7D%20=%20%5Cbegin%7Bbmatrix%7D%20-4%20%5C%5C%202%20%5C%5C%201%20%5Cend%7Bbmatrix%7D%0A"></p>
<p><img src="https://latex.codecogs.com/png.latex?L"> es triangular inferior, así que aplica directamente la sustitución hacia adelante de la sección anterior.</p>
<p><img src="https://latex.codecogs.com/png.latex?x_1%20=%20%5Cfrac%7B-4%7D%7B-2%7D%20=%202"></p>
<p><img src="https://latex.codecogs.com/png.latex?x_2%20=%20%5Cfrac%7B2%20-%201%5Ccdot2%7D%7B-1%7D%20=%20%5Cfrac%7B0%7D%7B-1%7D%20=%200"></p>
<p><img src="https://latex.codecogs.com/png.latex?x_3%20=%20%5Cfrac%7B1%20-%203%5Ccdot2%20-%202%5Ccdot0%7D%7B1%7D%20=%20%5Cfrac%7B1-6-0%7D%7B1%7D%20=%20-5"></p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cmathbf%7Bx%7D%20=%20%5Cbegin%7Bbmatrix%7D%202%20%5C%5C%200%20%5C%5C%20-5%20%5Cend%7Bbmatrix%7D"></p>
<p>El ejercicio 2.3.3 pide además verificar la solución calculando el residuo <img src="https://latex.codecogs.com/png.latex?%5Cmathbf%7Bb%7D-L%5Cmathbf%7Bx%7D">:</p>
<p><img src="https://latex.codecogs.com/png.latex?%0A%5Cmathbf%7Bb%7D%20-%20L%5Cmathbf%7Bx%7D%20=%0A%5Cbegin%7Bbmatrix%7D%20-4%20%5C%5C%202%20%5C%5C%201%20%5Cend%7Bbmatrix%7D%20-%0A%5Cbegin%7Bbmatrix%7D%20-2%5Ccdot2%20%5C%5C%201%5Ccdot2-1%5Ccdot0%20%5C%5C%203%5Ccdot2+2%5Ccdot0+1%5Ccdot(-5)%20%5Cend%7Bbmatrix%7D%20=%0A%5Cbegin%7Bbmatrix%7D%20-4-(-4)%20%5C%5C%202-2%20%5C%5C%201-1%20%5Cend%7Bbmatrix%7D%20=%0A%5Cbegin%7Bbmatrix%7D%200%5C%5C0%5C%5C0%20%5Cend%7Bbmatrix%7D%0A"></p>
<p>El residuo es cero: como todas las entradas son enteras y las operaciones son exactas (nunca aparece una división que no dé un resultado exacto), no hay ningún error de redondeo que reportar aquí.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb4-1">L <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>; <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>; <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb4-2">b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb4-3">x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">forwardsub</span>(L, b)   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># [2.0, 0.0, -5.0]</span></span>
<span id="cb4-4">b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> L<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>x                 <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># [0.0, 0.0, 0.0]</span></span></code></pre></div></div>
</section>
</section>
<section id="mal-condicionamiento-o-inestabilidad-ejercicio-2.3.7" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="mal-condicionamiento-o-inestabilidad-ejercicio-2.3.7"><span class="header-section-number">3</span> ¿Mal condicionamiento o inestabilidad? (ejercicio 2.3.7)</h2>
<p>El sistema es <img src="https://latex.codecogs.com/png.latex?A%5Cmathbf%7Bx%7D=%5Cmathbf%7Bb%7D"> con</p>
<p><img src="https://latex.codecogs.com/png.latex?%0AA%20=%20%5Cbegin%7Bbmatrix%7D%0A1%20&amp;%20-1%20&amp;%200%20&amp;%20%5Calpha-%5Cbeta%20&amp;%20%5Cbeta%20%5C%5C%0A0%20&amp;%201%20&amp;%20-1%20&amp;%200%20&amp;%200%20%5C%5C%0A0%20&amp;%200%20&amp;%201%20&amp;%20-1%20&amp;%200%20%5C%5C%0A0%20&amp;%200%20&amp;%200%20&amp;%201%20&amp;%20-1%20%5C%5C%0A0%20&amp;%200%20&amp;%200%20&amp;%200%20&amp;%201%0A%5Cend%7Bbmatrix%7D,%20%5Cqquad%0A%5Cmathbf%7Bb%7D%20=%20%5Cbegin%7Bbmatrix%7D%20%5Calpha%20%5C%5C%200%20%5C%5C%200%20%5C%5C%200%20%5C%5C%201%20%5Cend%7Bbmatrix%7D%0A"></p>
<p><img src="https://latex.codecogs.com/png.latex?A"> es triangular superior, así que se resuelve con sustitución hacia atrás (el análogo de forwardsub, pero empezando por <img src="https://latex.codecogs.com/png.latex?x_5">). Aplicando la fórmula fila por fila:</p>
<p><img src="https://latex.codecogs.com/png.latex?x_5%20=%201,%20%5Cquad%20x_4%20=%201,%20%5Cquad%20x_3%20=%201,%20%5Cquad%20x_2%20=%201"></p>
<p>y en la primera fila,</p>
<p><img src="https://latex.codecogs.com/png.latex?x_1%20=%20%5Calpha%20-%20(-1)%5Ccdot1%20-%200%5Ccdot1%20-%20(%5Calpha-%5Cbeta)%5Ccdot1%20-%20%5Cbeta%5Ccdot1%20=%20%5Calpha%20+%201%20-%20(%5Calpha-%5Cbeta)%20-%20%5Cbeta%20=%201"></p>
<p>Con aritmética exacta, entonces, <img src="https://latex.codecogs.com/png.latex?x_1=1"> sin importar los valores de <img src="https://latex.codecogs.com/png.latex?%5Calpha"> y <img src="https://latex.codecogs.com/png.latex?%5Cbeta">: los términos <img src="https://latex.codecogs.com/png.latex?-%5Cbeta"> y <img src="https://latex.codecogs.com/png.latex?+%5Cbeta"> se cancelan algebraicamente y desaparecen del resultado. El problema, visto así, es completamente inofensivo.</p>
<p>Pero eso es cierto solo en el papel. El algoritmo de sustitución hacia atrás no ve esa cancelación de antemano: primero calcula y guarda el número <img src="https://latex.codecogs.com/png.latex?U_%7B14%7D=%5Calpha-%5Cbeta"> como una entrada de la matriz, y cuando <img src="https://latex.codecogs.com/png.latex?%5Cbeta"> es mucho más grande que <img src="https://latex.codecogs.com/png.latex?%5Calpha">, esa resta ya pierde casi todas las cifras significativas de <img src="https://latex.codecogs.com/png.latex?%5Calpha"> antes de que el cálculo de <img src="https://latex.codecogs.com/png.latex?x_1"> siquiera empiece. Es la misma cancelación catastrófica de la nota de condicionamiento, aquí escondida dentro de una sola entrada de la matriz en vez de en la ecuación final.</p>
<p>Resolviendo con <img src="https://latex.codecogs.com/png.latex?%5Calpha=0%7B,%7D1"> y <img src="https://latex.codecogs.com/png.latex?%5Cbeta=10,100,10%5E3,%5Cldots,10%5E%7B12%7D"> en aritmética de doble precisión:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th><img src="https://latex.codecogs.com/png.latex?%5Cbeta"></th>
<th><img src="https://latex.codecogs.com/png.latex?x_1"> calculado</th>
<th><img src="https://latex.codecogs.com/png.latex?%7Cx_1-1%7C"></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B1%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000000000000"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D44%5Ctimes10%5E%7B-16%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B2%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000000000006"></td>
<td><img src="https://latex.codecogs.com/png.latex?5%7B,%7D77%5Ctimes10%5E%7B-15%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B3%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D999999999999977"></td>
<td><img src="https://latex.codecogs.com/png.latex?2%7B,%7D28%5Ctimes10%5E%7B-14%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B4%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D999999999999636"></td>
<td><img src="https://latex.codecogs.com/png.latex?3%7B,%7D64%5Ctimes10%5E%7B-13%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B5%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D999999999994179"></td>
<td><img src="https://latex.codecogs.com/png.latex?5%7B,%7D82%5Ctimes10%5E%7B-12%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B6%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000000023283"></td>
<td><img src="https://latex.codecogs.com/png.latex?2%7B,%7D33%5Ctimes10%5E%7B-11%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B7%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000000372529"></td>
<td><img src="https://latex.codecogs.com/png.latex?3%7B,%7D73%5Ctimes10%5E%7B-10%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B8%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000005960465"></td>
<td><img src="https://latex.codecogs.com/png.latex?5%7B,%7D96%5Ctimes10%5E%7B-9%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B9%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D999999976158142"></td>
<td><img src="https://latex.codecogs.com/png.latex?2%7B,%7D38%5Ctimes10%5E%7B-8%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B10%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D999999618530273"></td>
<td><img src="https://latex.codecogs.com/png.latex?3%7B,%7D82%5Ctimes10%5E%7B-7%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B11%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D999993896484375"></td>
<td><img src="https://latex.codecogs.com/png.latex?6%7B,%7D10%5Ctimes10%5E%7B-6%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B12%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000024414062500"></td>
<td><img src="https://latex.codecogs.com/png.latex?2%7B,%7D44%5Ctimes10%5E%7B-5%7D"></td>
</tr>
</tbody>
</table>
<div class="callout callout-style-default callout-important callout-titled" title="Qué muestra esta tabla">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Importante</span>Qué muestra esta tabla
</div>
</div>
<div class="callout-body-container callout-body">
<p>El error crece de forma prácticamente proporcional a <img src="https://latex.codecogs.com/png.latex?%5Cbeta">: cada vez que <img src="https://latex.codecogs.com/png.latex?%5Cbeta"> se multiplica por <img src="https://latex.codecogs.com/png.latex?10">, el error también se multiplica aproximadamente por <img src="https://latex.codecogs.com/png.latex?10">. Esto es justo lo que se espera cuando la cancelación ocurre entre <img src="https://latex.codecogs.com/png.latex?%5Calpha-%5Cbeta"> y <img src="https://latex.codecogs.com/png.latex?%5Cbeta">: el error absoluto que introduce el redondeo al formar <img src="https://latex.codecogs.com/png.latex?%5Calpha-%5Cbeta"> es del orden de <img src="https://latex.codecogs.com/png.latex?%5Cbeta%5Ccdot%5Cepsilon_%7B%5Ctext%7Bmach%7D%7D">, y ese error queda atrapado en <img src="https://latex.codecogs.com/png.latex?x_1"> sin que ninguna operación posterior lo corrija.</p>
<p>Es el mismo mensaje de siempre. El problema (calcular <img src="https://latex.codecogs.com/png.latex?x_1"> a partir de <img src="https://latex.codecogs.com/png.latex?A"> y <img src="https://latex.codecogs.com/png.latex?%5Cmathbf%7Bb%7D">) tiene una respuesta exacta, <img src="https://latex.codecogs.com/png.latex?x_1=1">, que no depende de <img src="https://latex.codecogs.com/png.latex?%5Cbeta"> en absoluto. Lo que falla es el orden en el que el algoritmo hace las operaciones: construir primero <img src="https://latex.codecogs.com/png.latex?%5Calpha-%5Cbeta"> como un número aparte es una elección de implementación, no una necesidad matemática, y es esa elección la que expone el cálculo a la cancelación.</p>
</div>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb5-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">backsub</span>(U, b)</span>
<span id="cb5-2">    n <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">size</span>(U, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb5-3">    x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">zeros</span>(n)</span>
<span id="cb5-4">    x[n] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> b[n] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> U[n, n]</span>
<span id="cb5-5">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> n<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb5-6">        s <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(U[i, j] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> x[j] <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> j <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span>n)</span>
<span id="cb5-7">        x[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (b[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> s) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> U[i, i]</span>
<span id="cb5-8">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span>
<span id="cb5-9">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> x</span>
<span id="cb5-10"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span>
<span id="cb5-11"></span>
<span id="cb5-12">α <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span></span>
<span id="cb5-13"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> k <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span></span>
<span id="cb5-14">    β <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">10.0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span>k</span>
<span id="cb5-15">    U <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> (α<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>β) β; <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>; <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>; <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>; <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb5-16">    b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [α, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb5-17">    x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">backsub</span>(U, b)</span>
<span id="cb5-18">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">println</span>(β, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  "</span>, x[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"  "</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(x[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb5-19"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span></code></pre></div></div>


</section>

 ]]></description>
  <guid>https://arturosanjuan.xyz/cursos/numerico/matrices/</guid>
  <pubDate>Fri, 11 Sep 2026 05:00:00 GMT</pubDate>
</item>
<item>
  <title>Complejidad</title>
  <dc:creator>Arturo Sanjuán</dc:creator>
  <link>https://arturosanjuan.xyz/cursos/numerico/complejidad/</link>
  <description><![CDATA[ 




<section id="notación-de-landau-la-o-pequeña" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="notación-de-landau-la-o-pequeña"><span class="header-section-number">1</span> Notación de Landau: la <img src="https://latex.codecogs.com/png.latex?o"> pequeña</h2>
<p>Hasta ahora hemos medido el tamaño de un error con normas y números de condición. Para comparar el costo de dos algoritmos necesitamos otro lenguaje: la notación asintótica de Landau, la misma que se usa para describir el comportamiento local de una función cerca de un punto y también el comportamiento de un algoritmo cuando el tamaño del problema crece.</p>
<p>Decimos que <img src="https://latex.codecogs.com/png.latex?f(x)%20=%20o(g(x))"> cuando <img src="https://latex.codecogs.com/png.latex?x%20%5Cto%20a"> si <img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bx%5Cto%20a%7D%20%5Cfrac%7Bf(x)%7D%7Bg(x)%7D%20=%200,"> suponiendo que <img src="https://latex.codecogs.com/png.latex?g(x)%20%5Cneq%200"> cerca de <img src="https://latex.codecogs.com/png.latex?a">. Cuando no se especifica <img src="https://latex.codecogs.com/png.latex?a">, en esta notación se sobreentiende <img src="https://latex.codecogs.com/png.latex?x%20%5Cto%200">: la <img src="https://latex.codecogs.com/png.latex?o"> pequeña se usa casi siempre para describir comportamiento local cerca de un punto, y conviene fijar ese punto en el origen salvo que se diga lo contrario.</p>
<p>Por ejemplo, <img src="https://latex.codecogs.com/png.latex?f(x)%20=%20o(1)"> cuando <img src="https://latex.codecogs.com/png.latex?x%20%5Cto%20a"> dice simplemente que <img src="https://latex.codecogs.com/png.latex?f(x)%20%5Cto%200">; y <img src="https://latex.codecogs.com/png.latex?f(x)%20=%20o(x)"> dice que <img src="https://latex.codecogs.com/png.latex?f(x)/x%20%5Cto%200">.</p>
<p>La derivada misma se puede definir en este lenguaje. Si <img src="https://latex.codecogs.com/png.latex?f"> es derivable en <img src="https://latex.codecogs.com/png.latex?a">, <img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bh%5Cto%200%7D%20%5Cfrac%7Bf(a+h)%20-%20f(a)%7D%7Bh%7D%20=%20f'(a),"> lo cual equivale a decir que <img src="https://latex.codecogs.com/png.latex?%5Cfrac%7Bf(a+h)%20-%20f(a)%20-%20f'(a)h%7D%7Bh%7D%20%5Cto%200%20%5Cquad%20%5Ctext%7Bcuando%20%7D%20h%20%5Cto%200,"> es decir, <img src="https://latex.codecogs.com/png.latex?f(a+h)%20=%20f(a)%20+%20f'(a)h%20+%20o(h).%20%5Cqquad%20(%5Cast)"> El término <img src="https://latex.codecogs.com/png.latex?o(h)"> se interpreta como una función que se va a cero más rápido que <img src="https://latex.codecogs.com/png.latex?h"> cuando <img src="https://latex.codecogs.com/png.latex?h%20%5Cto%200"> (por ejemplo, <img src="https://latex.codecogs.com/png.latex?h%5E2">). Así, la derivada en <img src="https://latex.codecogs.com/png.latex?a"> queda definida por la fórmula <img src="https://latex.codecogs.com/png.latex?(%5Cast)">.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Tarea">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Nota</span>Tarea
</div>
</div>
<div class="callout-body-container callout-body">
<ol type="a">
<li><p>Use la fórmula <img src="https://latex.codecogs.com/png.latex?(%5Cast)"> con <img src="https://latex.codecogs.com/png.latex?f(x)%20=%20x%5E2"> para identificar explícitamente quién es la función <img src="https://latex.codecogs.com/png.latex?o(h)"> en ese caso.</p></li>
<li><p>Reescriba el teorema de Taylor de orden <img src="https://latex.codecogs.com/png.latex?p"> usando la notación <img src="https://latex.codecogs.com/png.latex?o">, completando <img src="https://latex.codecogs.com/png.latex?f(a+h)%20=%20f(a)%20+%20f'(a)h%20+%20%5Ccdots%20+%20%5Cfrac%7Bf%5E%7B(p)%7D(a)%7D%7Bp!%7Dh%5Ep%20+%20%5Cunderline%7B%5Cqquad%7D."></p></li>
<li><p>Demuestre que <img src="https://latex.codecogs.com/png.latex?x%5Ep%20=%20o(e%5Ex)"> cuando <img src="https://latex.codecogs.com/png.latex?x%20%5Cto%20%5Cinfty">, para todo entero <img src="https://latex.codecogs.com/png.latex?p%20%5Cge%200"> (esto dice que la exponencial crece más rápido que cualquier polinomio). Demuestre también que <img src="https://latex.codecogs.com/png.latex?e%5E%7B-x%7D%20=%20o(x%5E%7B-p%7D)"> cuando <img src="https://latex.codecogs.com/png.latex?x%20%5Cto%20%5Cinfty">, para todo <img src="https://latex.codecogs.com/png.latex?p">. ¿Qué quiere decir esto en palabras?</p></li>
</ol>
</div>
</div>
</section>
<section id="la-o-grande-y-la-equivalencia-asintótica" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="la-o-grande-y-la-equivalencia-asintótica"><span class="header-section-number">2</span> La <img src="https://latex.codecogs.com/png.latex?O"> grande y la equivalencia asintótica</h2>
<p>La <img src="https://latex.codecogs.com/png.latex?o"> pequeña sirve para decir que algo es despreciable frente a otra cantidad. Para decir que algo está acotado por otra cantidad, sin ser necesariamente despreciable, se usa la <img src="https://latex.codecogs.com/png.latex?O"> grande.</p>
<p>Decimos que <img src="https://latex.codecogs.com/png.latex?f(x)%20=%20O(g(x))"> cuando <img src="https://latex.codecogs.com/png.latex?x%20%5Cto%20a"> (la misma definición sirve para sucesiones, con <img src="https://latex.codecogs.com/png.latex?n%20%5Cto%20%5Cinfty">) si <img src="https://latex.codecogs.com/png.latex?f(x)/g(x)"> permanece acotado cerca de <img src="https://latex.codecogs.com/png.latex?a">. Aquí la convención por defecto es distinta a la de la <img src="https://latex.codecogs.com/png.latex?o"> pequeña: si no se especifica <img src="https://latex.codecogs.com/png.latex?a">, se sobreentiende <img src="https://latex.codecogs.com/png.latex?x%20%5Cto%20%5Cinfty"> (o <img src="https://latex.codecogs.com/png.latex?n%20%5Cto%20%5Cinfty"> para sucesiones), porque la <img src="https://latex.codecogs.com/png.latex?O"> grande es la que usamos para describir cuánto crece un algoritmo cuando el tamaño del problema crece, no el comportamiento local cerca de un punto.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Tarea">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Nota</span>Tarea
</div>
</div>
<div class="callout-body-container callout-body">
<p>Demuestre que la definición anterior es equivalente a pedir <img src="https://latex.codecogs.com/png.latex?%5Climsup_%7Bx%20%5Cto%20a%7D%20%5Cleft%7C%20%5Cfrac%7Bf(x)%7D%7Bg(x)%7D%20%5Cright%7C%20%3C%20%5Cinfty."></p>
</div>
</div>
<p>Un tercer símbolo, más fino que la <img src="https://latex.codecogs.com/png.latex?O">, es la equivalencia asintótica: decimos que <img src="https://latex.codecogs.com/png.latex?f%20%5Csim%20g"> cuando <img src="https://latex.codecogs.com/png.latex?x%20%5Cto%20a"> si <img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bx%5Cto%20a%7D%20%5Cfrac%7Bf(x)%7D%7Bg(x)%7D%20=%201."> Por ejemplo, <img src="https://latex.codecogs.com/png.latex?%5Coperatorname%7Bsen%7D(x)%20%5Csim%20x"> cuando <img src="https://latex.codecogs.com/png.latex?x%20%5Cto%200">, y <img src="https://latex.codecogs.com/png.latex?%5Coperatorname%7Bsen%7D(1/n)%20%5Csim%201/n"> cuando <img src="https://latex.codecogs.com/png.latex?n%20%5Cto%20%5Cinfty">.</p>
<p>Veamos con cuidado, directamente desde la definición, que <img src="https://latex.codecogs.com/png.latex?2n%5E3%20-%203n%5E2%20+%201%20=%20O(n%5E3)">. El cociente <img src="https://latex.codecogs.com/png.latex?%5Cfrac%7B2n%5E3%20-%203n%5E2%20+%201%7D%7Bn%5E3%7D%20=%202%20-%20%5Cfrac%7B3%7D%7Bn%7D%20+%20%5Cfrac%7B1%7D%7Bn%5E3%7D"> tiende a <img src="https://latex.codecogs.com/png.latex?2"> cuando <img src="https://latex.codecogs.com/png.latex?n%20%5Cto%20%5Cinfty">, así que existe <img src="https://latex.codecogs.com/png.latex?n_0"> tal que para todo <img src="https://latex.codecogs.com/png.latex?n%20%5Cge%20n_0"> ese cociente es menor que, digamos, <img src="https://latex.codecogs.com/png.latex?2%7B,%7D1">: en particular está acotado, que es justamente lo que pide la definición de <img src="https://latex.codecogs.com/png.latex?O">.</p>
<p>Este argumento se generaliza de inmediato: si <img src="https://latex.codecogs.com/png.latex?f"> y <img src="https://latex.codecogs.com/png.latex?g"> son positivas y el límite <img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bn%5Cto%5Cinfty%7D%20f(n)/g(n)"> existe y es finito, entonces automáticamente <img src="https://latex.codecogs.com/png.latex?f(n)%20=%20O(g(n))">, porque un cociente convergente en particular está acotado.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Tarea">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Nota</span>Tarea
</div>
</div>
<div class="callout-body-container callout-body">
<p>Demuestre con cuidado la afirmación anterior, y úsela para mostrar que cualquier polinomio de grado <img src="https://latex.codecogs.com/png.latex?p"> es <img src="https://latex.codecogs.com/png.latex?O(n%5Ep)">.</p>
</div>
</div>
<p>Con esta observación es fácil clasificar sumas que aparecen todo el tiempo al contar operaciones. Por ejemplo, <img src="https://latex.codecogs.com/png.latex?%5Csum_%7Bk=1%7D%5En%20k%20=%20%5Cfrac%7Bn(n+1)%7D%7B2%7D%20=%20%5Cfrac%7Bn%5E2%7D%7B2%7D%20+%20%5Cfrac%7Bn%7D%7B2%7D%20%5Csim%20%5Cfrac%7Bn%5E2%7D%7B2%7D,"> así que <img src="https://latex.codecogs.com/png.latex?%5Csum_%7Bk=1%7D%5En%20k%20=%20O(n%5E2)">. Técnicamente también es cierto que <img src="https://latex.codecogs.com/png.latex?%5Csum_%7Bk=1%7D%5En%20k%20=%20O(n%5E3)">, o de cualquier potencia mayor, pero esa afirmación, aunque verdadera, casi no dice nada: en la práctica siempre buscamos la función <img src="https://latex.codecogs.com/png.latex?g"> más pequeña posible para la cual <img src="https://latex.codecogs.com/png.latex?f=O(g)"> se cumple, porque es ahí donde la notación aporta información útil. El mismo argumento con la suma de cuadrados da <img src="https://latex.codecogs.com/png.latex?%5Csum_%7Bk=1%7D%5En%20k%5E2%20%5Csim%20n%5E3/3%20=%20O(n%5E3)">, y en general <img src="https://latex.codecogs.com/png.latex?%5Csum_%7Bk=1%7D%5En%20k%5Ep%20%5Csim%20n%5E%7Bp+1%7D/(p+1)%20=%20O(n%5E%7Bp+1%7D)">.</p>
</section>
<section id="conteo-de-flops" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="conteo-de-flops"><span class="header-section-number">3</span> Conteo de flops</h2>
<p>Un <strong>flop</strong> (<em>floating point operation</em>) es una suma, resta, multiplicación, división o raíz cuadrada entre números de punto flotante. <strong>FLOPS</strong> (con S final) son flops por segundo, la unidad con la que se mide la capacidad de cómputo de una máquina. Se usan los prefijos usuales de potencias de mil:</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: center;">Prefijo</th>
<th style="text-align: center;">Símbolo</th>
<th style="text-align: center;">Factor</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: center;">kilo</td>
<td style="text-align: center;">K</td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?10%5E3"></td>
</tr>
<tr class="even">
<td style="text-align: center;">mega</td>
<td style="text-align: center;">M</td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?10%5E6"></td>
</tr>
<tr class="odd">
<td style="text-align: center;">giga</td>
<td style="text-align: center;">G</td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?10%5E9"></td>
</tr>
<tr class="even">
<td style="text-align: center;">tera</td>
<td style="text-align: center;">T</td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?10%5E%7B12%7D"></td>
</tr>
<tr class="odd">
<td style="text-align: center;">peta</td>
<td style="text-align: center;">P</td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?10%5E%7B15%7D"></td>
</tr>
</tbody>
</table>
<p>Para dar un par de puntos de referencia: el supercomputador Lonestar6 (TACC) tiene una capacidad de cómputo del orden de <img src="https://latex.codecogs.com/png.latex?3"> PFLOPS, es decir, unas <img src="https://latex.codecogs.com/png.latex?3%5Ctimes10%5E%7B15%7D"> operaciones de punto flotante por segundo. Un computador portátil corriente, como los que usamos en clase, es menor que un 1 TFLOPS.</p>
<p>En Julia, <code>LinearAlgebra.peakflops()</code> mide directamente la capacidad de tu propia máquina, y <code>BenchmarkTools.jl</code> (para medir tiempos), junto con alguna herramienta de conteo de flops, permite estimar cuántas operaciones de punto flotante consume una función específica.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Tarea">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Nota</span>Tarea
</div>
</div>
<div class="callout-body-container callout-body">
<p>Corra <code>LinearAlgebra.peakflops()</code> en su propia máquina y reporte el resultado en GFLOPS o MFLOPS, según corresponda. Después compare ese número contra dos referencias más: un datacenter grande (del orden de <img src="https://latex.codecogs.com/png.latex?10%5E%7B20%7D"> FLOPS) y una estimación de cuántos flops equivalentes podría hacer un ser humano. ¿Qué tan lejos está su máquina de cada extremo?</p>
</div>
</div>
</section>
<section id="ejemplo-flops-del-producto-matriz-vector" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="ejemplo-flops-del-producto-matriz-vector"><span class="header-section-number">4</span> Ejemplo: flops del producto matriz-vector</h2>
<p>Supongamos que <img src="https://latex.codecogs.com/png.latex?A%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bn%5Ctimes%20n%7D"> y <img src="https://latex.codecogs.com/png.latex?x%20%5Cin%20%5Cmathbb%7BR%7D%5En">, y queremos calcular <img src="https://latex.codecogs.com/png.latex?y%20=%20Ax">. Cada componente de <img src="https://latex.codecogs.com/png.latex?y"> es <img src="https://latex.codecogs.com/png.latex?y_i%20=%20%5Csum_%7Bj=1%7D%5En%20a_%7Bij%7D%20x_j,"> que cuesta <img src="https://latex.codecogs.com/png.latex?n"> productos y <img src="https://latex.codecogs.com/png.latex?n-1"> sumas: unas <img src="https://latex.codecogs.com/png.latex?2n"> operaciones si no nos preocupamos por el término de orden inferior. En código, el patrón para calcular una sola fila <img src="https://latex.codecogs.com/png.latex?i"> se ve así:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb1-1"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> j <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span>n</span>
<span id="cb1-2">    y[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> A[i, j] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> x[j]</span>
<span id="cb1-3"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span></code></pre></div></div>
<div class="callout callout-style-default callout-note callout-titled" title="Tarea">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Nota</span>Tarea
</div>
</div>
<div class="callout-body-container callout-body">
<p>Complete el programa repitiendo este patrón para cada fila <img src="https://latex.codecogs.com/png.latex?i=1,%5Cdots,n">, sin ver el texto guía o esta nota.</p>
</div>
</div>
<p>Ese bucle interno tiene dos operaciones de punto flotante (una suma y un producto) repetidas <img src="https://latex.codecogs.com/png.latex?n"> veces, y hay que repetirlo para cada una de las <img src="https://latex.codecogs.com/png.latex?n"> filas. El total es <img src="https://latex.codecogs.com/png.latex?%5Csum_%7Bi=1%7D%5En%20(2n)%20=%202n%20%5Ccdot%20n%20=%202n%5E2,"> es decir, la cuenta crece del orden de <img src="https://latex.codecogs.com/png.latex?n%5E2"> operaciones de punto flotante: el algoritmo es <img src="https://latex.codecogs.com/png.latex?O(n%5E2)">.</p>
<p>Vale la pena ser precisos sobre qué mide esto. Cuando decimos que un algoritmo tiene complejidad computacional (temporal) <img src="https://latex.codecogs.com/png.latex?O(n%5E2)">, estamos contando exclusivamente el número de operaciones aritméticas en función del tamaño de la entrada, sin tener en cuenta todavía los recursos concretos de la máquina donde corre: acceso a memoria, caché, paralelismo. Esa es una capa adicional, real e importante en la práctica, que dejamos de lado por ahora para quedarnos con la pregunta puramente matemática de cuántas operaciones exige el algoritmo.</p>
<section id="un-aparte-las-clases-p-y-np" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="un-aparte-las-clases-p-y-np"><span class="header-section-number">4.1</span> Un aparte: las clases P y NP</h3>
<p>La misma notación <img src="https://latex.codecogs.com/png.latex?O(n%5Ek)"> que acabamos de usar para clasificar un algoritmo es también el lenguaje con el que se define una de las distinciones más importantes de las ciencias de la computación. Se dice que un problema está en la clase <strong>P</strong> si existe un algoritmo que lo resuelve en tiempo <img src="https://latex.codecogs.com/png.latex?O(n%5Ek)"> para algún <img src="https://latex.codecogs.com/png.latex?k"> fijo, es decir, en tiempo polinomial en el tamaño <img src="https://latex.codecogs.com/png.latex?n"> de la entrada: el producto matriz vector que acabamos de contar, con su <img src="https://latex.codecogs.com/png.latex?O(n%5E2)">, es un ejemplo perfectamente ordinario de un problema en P.</p>
<p>La clase <strong>NP</strong> es más sutil, y la diferencia está en qué es lo que se pide que sea polinomial. Un problema está en NP si, dado un candidato a solución, existe un algoritmo que verifica esa solución en tiempo <img src="https://latex.codecogs.com/png.latex?O(n%5Ek)">, aunque no se conozca ningún algoritmo que encuentre esa solución en tiempo polinomial. El ejemplo clásico es un rompecabezas combinatorio: comprobar que un subconjunto dado de números suma exactamente el valor pedido, o que una asignación dada de valores de verdad satisface una fórmula lógica, toma tiempo polinomial. Pero encontrar ese subconjunto o esa asignación, si no se tiene mejor idea que probar todas las combinaciones posibles, exige recorrer un número de candidatos que crece como <img src="https://latex.codecogs.com/png.latex?2%5En">. Ya demostramos arriba, en la tarea sobre <img src="https://latex.codecogs.com/png.latex?x%5Ep=o(e%5Ex)">, que una exponencial termina superando a cualquier polinomio, sin importar qué tan grande sea el exponente <img src="https://latex.codecogs.com/png.latex?k">; por eso <img src="https://latex.codecogs.com/png.latex?O(2%5En)"> es, en la práctica, una barrera mucho más severa que cualquier <img src="https://latex.codecogs.com/png.latex?O(n%5Ek)">, aun para <img src="https://latex.codecogs.com/png.latex?k"> grande.</p>
<p>Todo problema en P está también en NP: si se puede resolver en tiempo polinomial, en particular se puede verificar una solución en tiempo polinomial (basta con resolverlo uno mismo y comparar). La pregunta de si esa inclusión es en realidad una igualdad, es decir, si <strong>P = NP</strong>, si todo problema cuya solución se puede verificar rápido también se puede encontrar rápido, sigue abierta. Es uno de los siete problemas del milenio del Instituto Clay, y a pesar de varios anuncios de solución a lo largo de los años (ninguno resistió la revisión de la comunidad), hasta la fecha nadie ha demostrado ni que P = NP ni que P ≠ NP.</p>
</section>
</section>
<section id="comparando-teoría-y-práctica-gráficas-log-log" class="level2" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="comparando-teoría-y-práctica-gráficas-log-log"><span class="header-section-number">5</span> Comparando teoría y práctica: gráficas log-log</h2>
<p>El conteo de flops da una predicción teórica de cómo debería crecer el tiempo de ejecución de un algoritmo, pero conviene contrastarla con mediciones reales (por ejemplo, con <code>@time</code> o <code>BenchmarkTools.jl</code>). Si el tiempo de un algoritmo obedece <img src="https://latex.codecogs.com/png.latex?t%20%5Capprox%20Cn%5Ep"> para alguna constante <img src="https://latex.codecogs.com/png.latex?C"> y algún exponente <img src="https://latex.codecogs.com/png.latex?p"> (el mismo <img src="https://latex.codecogs.com/png.latex?p"> que predice el conteo de flops), tomando logaritmo en ambos lados se obtiene <img src="https://latex.codecogs.com/png.latex?%5Clog(t)%20%5Capprox%20%5Clog(C)%20+%20p%5C,%5Clog(n)."> Esta es la ecuación de una recta en el plano <img src="https://latex.codecogs.com/png.latex?(%5Clog%20n,%5Clog%20t)">, con pendiente <img src="https://latex.codecogs.com/png.latex?p">. Por eso, al graficar tiempos medidos contra <img src="https://latex.codecogs.com/png.latex?n"> en escala log-log, un algoritmo de complejidad <img src="https://latex.codecogs.com/png.latex?O(n%5Ep)"> debería verse como una línea recta de pendiente aproximadamente <img src="https://latex.codecogs.com/png.latex?p">: la pendiente medida en la gráfica se compara directamente contra el exponente que predijo el conteo de flops, y una discrepancia entre ambos es indicio de que la implementación real no se comporta como el conteo teórico predice (acceso a memoria, alojamiento innecesario de arreglos, etc.).</p>
<div class="callout callout-style-default callout-note callout-titled" title="Tarea">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Nota</span>Tarea
</div>
</div>
<div class="callout-body-container callout-body">
<p>Haga todos los ejercicios de la sección eficiencia computacional de matrices del libro de Driscoll y Braun.</p>
</div>
</div>


</section>

 ]]></description>
  <guid>https://arturosanjuan.xyz/cursos/numerico/complejidad/</guid>
  <pubDate>Sun, 06 Sep 2026 05:00:00 GMT</pubDate>
</item>
<item>
  <title>Taller 1</title>
  <dc:creator>Arturo Sanjuán</dc:creator>
  <link>https://arturosanjuan.xyz/cursos/numerico/taller-1/</link>
  <description><![CDATA[ 




<p>Un sistema de navegación reporta que, después de mucho tiempo de vuelo, su corrección de rumbo se “congela” en cero. La corrección se calcula con la función <img src="https://latex.codecogs.com/png.latex?f(x)=%5Csqrt%7Bx+1%7D-%5Csqrt%7Bx%7D">, donde <img src="https://latex.codecogs.com/png.latex?x"> es el tiempo transcurrido de misión. El equipo de ingeniería sospecha del modelo matemático; en este taller ustedes actúan como peritos numéricos y deben determinar si la culpa es del problema o del algoritmo usado para calcularlo. Cada equipo recibió un valor <img src="https://latex.codecogs.com/png.latex?x_0"> distinto entre <img src="https://latex.codecogs.com/png.latex?10%5E2"> y <img src="https://latex.codecogs.com/png.latex?10%5E6">; la solución de esta hoja cubre esos valores.</p>
<section id="la-rejilla-de-la-máquina" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="la-rejilla-de-la-máquina"><span class="header-section-number">1</span> La rejilla de la máquina</h2>
<p>Trabajando en precisión doble de IEEE 754 (52 bits de mantisa), la distancia entre dos números de punto flotante consecutivos cerca de un valor <img src="https://latex.codecogs.com/png.latex?x"> (la unidad en el último lugar, o ULP) es aproximadamente</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Ctext%7BULP%7D(x)%20%5Capprox%202%5E%7B%5Clfloor%20%5Clog_2%20x%20%5Crfloor%20-%2052%7D"></p>
<p>Con su <img src="https://latex.codecogs.com/png.latex?x_0"> asignado, calculen <img src="https://latex.codecogs.com/png.latex?%5Ctext%7BULP%7D(x_0)">, determinen si <img src="https://latex.codecogs.com/png.latex?x_0"> y <img src="https://latex.codecogs.com/png.latex?x_0+1"> se almacenan como el mismo número de punto flotante o son distinguibles, y si son distinguibles calculen cuántos números representables existen estrictamente entre <img src="https://latex.codecogs.com/png.latex?x_0"> y <img src="https://latex.codecogs.com/png.latex?x_0+1">. Antes de tocar Julia, con base en esto, predigan si esperan que el algoritmo ingenuo para <img src="https://latex.codecogs.com/png.latex?f(x_0)"> sea preciso o falle catastróficamente, y por qué.</p>
<div class="callout callout-style-default callout-tip callout-titled" title="Solución">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Solución
</div>
</div>
<div class="callout-body-container callout-body">
<p>Si <img src="https://latex.codecogs.com/png.latex?h=%5Ctext%7BULP%7D(x_0)"> es el espaciado entre flotantes consecutivos, un intervalo de longitud 1 contiene <img src="https://latex.codecogs.com/png.latex?1/h"> huecos iguales entre marcas; por conteo de postes de cerca, eso deja <img src="https://latex.codecogs.com/png.latex?1/h-1"> representables estrictamente adentro (sin contar los dos extremos):</p>
<p><img src="https://latex.codecogs.com/png.latex?%5C#%5C%7B%5Ctext%7Brepresentables%20en%20%7D(x_0,x_0+1)%5C%7D%20=%202%5E%7B52-%5Clfloor%5Clog_2%20x_0%5Crfloor%7D-1"></p>
<p>siempre un entero exacto, porque <img src="https://latex.codecogs.com/png.latex?2%5E%7B52-e%7D"> es potencia de 2.</p>
<table class="caption-top table">
<colgroup>
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
</colgroup>
<thead>
<tr class="header">
<th><img src="https://latex.codecogs.com/png.latex?x_0"></th>
<th><img src="https://latex.codecogs.com/png.latex?%5Clfloor%5Clog_2%20x_0%5Crfloor"></th>
<th><img src="https://latex.codecogs.com/png.latex?%5Ctext%7BULP%7D(x_0)"></th>
<th><img src="https://latex.codecogs.com/png.latex?x_0+1=x_0">?</th>
<th># representables entre <img src="https://latex.codecogs.com/png.latex?x_0"> y <img src="https://latex.codecogs.com/png.latex?x_0+1"></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E2"></td>
<td>6</td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D42%5Ctimes10%5E%7B-14%7D"></td>
<td>No</td>
<td><img src="https://latex.codecogs.com/png.latex?%5Capprox%207%7B,%7D0%5Ctimes10%5E%7B13%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E3"></td>
<td>9</td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D14%5Ctimes10%5E%7B-13%7D"></td>
<td>No</td>
<td><img src="https://latex.codecogs.com/png.latex?%5Capprox%208%7B,%7D8%5Ctimes10%5E%7B12%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E4"></td>
<td>13</td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D82%5Ctimes10%5E%7B-12%7D"></td>
<td>No</td>
<td><img src="https://latex.codecogs.com/png.latex?%5Capprox%205%7B,%7D5%5Ctimes10%5E%7B11%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E5"></td>
<td>16</td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D46%5Ctimes10%5E%7B-11%7D"></td>
<td>No</td>
<td><img src="https://latex.codecogs.com/png.latex?%5Capprox%206%7B,%7D9%5Ctimes10%5E%7B10%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E6"></td>
<td>19</td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D16%5Ctimes10%5E%7B-10%7D"></td>
<td>No</td>
<td><img src="https://latex.codecogs.com/png.latex?%5Capprox%208%7B,%7D6%5Ctimes10%5E%7B9%7D"></td>
</tr>
</tbody>
</table>
<p>En ninguno de estos valores <img src="https://latex.codecogs.com/png.latex?x_0"> y <img src="https://latex.codecogs.com/png.latex?x_0+1"> colapsan al mismo flotante (eso solo ocurre desde <img src="https://latex.codecogs.com/png.latex?x_0=2%5E%7B53%7D%5Capprox9%7B,%7D007%5Ctimes10%5E%7B15%7D">), así que en este rango se predice degradación progresiva del algoritmo ingenuo, pero no un colapso total.</p>
</div>
</div>
</section>
<section id="el-expediente-del-condicionamiento" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="el-expediente-del-condicionamiento"><span class="header-section-number">2</span> El expediente del condicionamiento</h2>
<p>Deriven el número de condición relativo <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x)"> de <img src="https://latex.codecogs.com/png.latex?f(x)=%5Csqrt%7Bx+1%7D-%5Csqrt%20x">, calculen <img src="https://latex.codecogs.com/png.latex?%5Cdisplaystyle%5Clim_%7Bx%5Cto%5Cinfty%7D%5Ckappa_f(x)">, y evalúen <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x_0)"> para su valor asignado. Con esta evidencia sola, sin haber corrido nada todavía, ¿el problema <img src="https://latex.codecogs.com/png.latex?f"> es responsable de un eventual fallo? Justifiquen.</p>
<div class="callout callout-style-default callout-tip callout-titled" title="Solución">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Solución
</div>
</div>
<div class="callout-body-container callout-body">
<p>Con <img src="https://latex.codecogs.com/png.latex?f'(x)=%5Cdfrac%7B1%7D%7B2%5Csqrt%7Bx+1%7D%7D-%5Cdfrac1%7B2%5Csqrt%20x%7D">, factorizando por diferencia de raíces se obtiene <img src="https://latex.codecogs.com/png.latex?f'(x)=-%5Cdfrac%7Bf(x)%7D%7B2%5Csqrt%20x%5Csqrt%7Bx+1%7D%7D">, así que</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x)=%5Cleft%7C%5Cfrac%7Bxf'(x)%7D%7Bf(x)%7D%5Cright%7C%20=%20%5Cfrac%7Bx%7D%7B2%5Csqrt%20x%5Csqrt%7Bx+1%7D%7D%20=%20%5Cfrac12%5Csqrt%7B%5Cfrac%7Bx%7D%7Bx+1%7D%7D"></p>
<p>Como <img src="https://latex.codecogs.com/png.latex?x/(x+1)%5Cto%201">, <img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bx%5Cto%5Cinfty%7D%5Ckappa_f(x)=%5Cfrac12"></p>
<p>y como <img src="https://latex.codecogs.com/png.latex?x/(x+1)%3C1"> para todo <img src="https://latex.codecogs.com/png.latex?x%3E0">, de hecho <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x)%3C1/2"> siempre: el problema nunca amplifica el error relativo de entrada más de la mitad, en ningún punto de su dominio.</p>
<table class="caption-top table">
<thead>
<tr class="header">
<th><img src="https://latex.codecogs.com/png.latex?x_0"></th>
<th><img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x_0)"></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E2"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D4975186"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E3"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D4997502"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E4"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D4999750"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E5"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D4999975"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E6"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D49999975"></td>
</tr>
</tbody>
</table>
<p>El problema está óptimamente condicionado en todo el rango asignado (<img src="https://latex.codecogs.com/png.latex?%5Ckappa_f%3C1/2"> siempre): si el algoritmo ingenuo falla, la responsabilidad es exclusivamente del algoritmo, no de <img src="https://latex.codecogs.com/png.latex?f">.</p>
</div>
</div>
</section>
<section id="el-interrogatorio-en-julia" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="el-interrogatorio-en-julia"><span class="header-section-number">3</span> El interrogatorio en Julia</h2>
<p>Implementen el algoritmo ingenuo <code>sqrt(x+1) - sqrt(x)</code> y evalúenlo en <img src="https://latex.codecogs.com/png.latex?x_0">. Encuentren, mediante racionalización, una forma equivalente de <img src="https://latex.codecogs.com/png.latex?f"> que evite restar cantidades casi iguales, e impleméntenla. Usando <code>BigFloat</code> como referencia de alta precisión, construyan una tabla comparando ambos algoritmos en un barrido que incluya su <img src="https://latex.codecogs.com/png.latex?x_0">. Escriban su veredicto forense en 4 o 5 líneas: si el problema está bien o mal condicionado, en qué paso exacto entra la inestabilidad, y cuál algoritmo recomiendan.</p>
<div class="callout callout-style-default callout-tip callout-titled" title="Solución">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Solución
</div>
</div>
<div class="callout-body-container callout-body">
<p>La racionalización multiplica y divide por el conjugado:</p>
<p><img src="https://latex.codecogs.com/png.latex?f(x)=%5Csqrt%7Bx+1%7D-%5Csqrt%20x%20=%20%5Cfrac%7B(%5Csqrt%7Bx+1%7D-%5Csqrt%20x)(%5Csqrt%7Bx+1%7D+%5Csqrt%20x)%7D%7B%5Csqrt%7Bx+1%7D+%5Csqrt%20x%7D%20=%20%5Cfrac%7B1%7D%7B%5Csqrt%7Bx+1%7D+%5Csqrt%20x%7D"></p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">f_ingenuo</span>(x)    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(x)</span>
<span id="cb1-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">f_estable</span>(x)    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(x))</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">f_referencia</span>(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Float64</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">BigFloat</span>(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">BigFloat</span>(x)))</span></code></pre></div></div>
<p><code>f_estable</code> solo suma cantidades positivas, así que no hay cancelación posible en ningún paso.</p>
<table class="caption-top table">
<colgroup>
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
</colgroup>
<thead>
<tr class="header">
<th><img src="https://latex.codecogs.com/png.latex?x_0"></th>
<th>ingenuo</th>
<th>estable</th>
<th>error rel. ingenuo</th>
<th>error rel. estable</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E2"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D987562112089%5Ctimes10%5E%7B-2%7D"></td>
<td>igual</td>
<td><img src="https://latex.codecogs.com/png.latex?6%7B,%7D5%5Ctimes10%5E%7B-15%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E3"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D580743742896%5Ctimes10%5E%7B-2%7D"></td>
<td>igual</td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D1%5Ctimes10%5E%7B-13%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E4"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D999875006249%5Ctimes10%5E%7B-3%7D"></td>
<td>igual</td>
<td><img src="https://latex.codecogs.com/png.latex?2%7B,%7D1%5Ctimes10%5E%7B-13%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E5"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D581134877256%5Ctimes10%5E%7B-3%7D"></td>
<td>igual</td>
<td><img src="https://latex.codecogs.com/png.latex?6%7B,%7D4%5Ctimes10%5E%7B-13%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D4%5Ctimes10%5E%7B-16%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E6"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D999998750463%5Ctimes10%5E%7B-4%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D999998750001%5Ctimes10%5E%7B-4%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?9%7B,%7D3%5Ctimes10%5E%7B-11%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0"></td>
</tr>
</tbody>
</table>
<p>En este rango el error del algoritmo ingenuo nunca supera <img src="https://latex.codecogs.com/png.latex?%5Csim10%5E%7B-10%7D">: todavía está lejos del colapso, pero ya muestra degradación consistente y medible frente al estable, que se mantiene en <img src="https://latex.codecogs.com/png.latex?0"> o en el orden de <img src="https://latex.codecogs.com/png.latex?%5Cepsilon_%7B%5Ctext%7Bmach%7D%7D"> en todos los casos.</p>
<p>Veredicto modelo: <em>“El problema en <img src="https://latex.codecogs.com/png.latex?x_0"> tiene <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x_0)%5Capprox%200%7B,%7D5">: bien condicionado, y de hecho <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x)%3C1/2"> para todo <img src="https://latex.codecogs.com/png.latex?x">. El algoritmo ingenuo pierde precisión progresivamente porque en el paso <img src="https://latex.codecogs.com/png.latex?%5Csqrt%7Bx+1%7D-%5Csqrt%7Bx%7D"> se restan dos cantidades cada vez más parecidas a medida que <img src="https://latex.codecogs.com/png.latex?x_0"> crece; aunque en este rango no llega a colapsar del todo, la tendencia ya es clara y se vuelve catastrófica para <img src="https://latex.codecogs.com/png.latex?x_0"> mucho mayores (a partir de <img src="https://latex.codecogs.com/png.latex?x_0=2%5E%7B53%7D">, donde <img src="https://latex.codecogs.com/png.latex?x_0"> y <img src="https://latex.codecogs.com/png.latex?x_0+1"> dejan de ser distinguibles). La causa es inestabilidad algorítmica, no mal condicionamiento. La forma racionalizada, al no restar cantidades parecidas, mantiene precisión de máquina en todo el rango probado.”</em></p>
</div>
</div>


</section>

 ]]></description>
  <guid>https://arturosanjuan.xyz/cursos/numerico/taller-1/</guid>
  <pubDate>Fri, 04 Sep 2026 05:00:00 GMT</pubDate>
</item>
<item>
  <title>Estabilidad</title>
  <dc:creator>Arturo Sanjuán</dc:creator>
  <link>https://arturosanjuan.xyz/cursos/numerico/estabilidad/</link>
  <description><![CDATA[ 




<section id="problemas-vs.-algoritmos" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="problemas-vs.-algoritmos"><span class="header-section-number">1</span> Problemas vs.&nbsp;algoritmos</h2>
<p>Un problema matemático idealizado se puede representar como una función <img src="https://latex.codecogs.com/png.latex?a%20%5Cmapsto%20f(a)">: a partir de un dato <img src="https://latex.codecogs.com/png.latex?a">, se produce exactamente el resultado <img src="https://latex.codecogs.com/png.latex?f(a)">. En la práctica, casi nunca podemos calcular <img src="https://latex.codecogs.com/png.latex?f(a)"> de manera exacta con un número finito de pasos aritméticos; en su lugar, construimos un <strong>algoritmo</strong>, otra función <img src="https://latex.codecogs.com/png.latex?a%20%5Cmapsto%20%5Ctilde%20f(a)">, que aproxima a <img src="https://latex.codecogs.com/png.latex?f"> mediante una sucesión finita de operaciones elementales.</p>
<p>Un mismo problema <img src="https://latex.codecogs.com/png.latex?f"> puede tener muchos algoritmos <img src="https://latex.codecogs.com/png.latex?%5Ctilde%20f"> distintos que lo aproximan — y, como veremos, no todos son igual de buenos, incluso cuando matemáticamente (con aritmética exacta) producen el mismo resultado.</p>
</section>
<section id="estudio-de-caso-evaluación-de-un-polinomio-el-método-de-horner" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="estudio-de-caso-evaluación-de-un-polinomio-el-método-de-horner"><span class="header-section-number">2</span> Estudio de caso: evaluación de un polinomio — el método de Horner</h2>
<p>Antes de hablar de estabilidad numérica, vale la pena ver un ejemplo de que “distintos algoritmos para el mismo problema” no es solo una cuestión de precisión: también puede ser una cuestión de <strong>eficiencia</strong>.</p>
<p>Consideremos <img src="https://latex.codecogs.com/png.latex?p(x)%20=%205x%5E3%20+%204x%5E2%20+%203x%20+%202."></p>
<p><strong>Evaluación directa.</strong> Calculamos <img src="https://latex.codecogs.com/png.latex?x%5E2"> (1 producto), luego <img src="https://latex.codecogs.com/png.latex?x%5E3%20=%20x%5E2%5Ccdot%20x"> (1 producto más), y finalmente los tres productos <img src="https://latex.codecogs.com/png.latex?5x%5E3">, <img src="https://latex.codecogs.com/png.latex?4x%5E2">, <img src="https://latex.codecogs.com/png.latex?3x"> (3 productos). En total: <strong>5 productos</strong> y <strong>3 sumas</strong> — 8 operaciones aritméticas.</p>
<p><strong>Método de Horner.</strong> Reescribimos <img src="https://latex.codecogs.com/png.latex?p"> anidando la variable: <img src="https://latex.codecogs.com/png.latex?p(x)%20=%20((5x+4)x+3)x+2."> Cada uno de los tres paréntesis cuesta exactamente 1 producto y 1 suma: <strong>3 productos</strong> y <strong>3 sumas</strong> — 6 operaciones en total.</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac%7B8-6%7D%7B8%7D%20=%200%7B,%7D25"></p>
<p>El método de Horner ahorra el <strong>25%</strong> del esfuerzo computacional respecto a la evaluación directa, y esta ventaja crece con el grado del polinomio: para grado <img src="https://latex.codecogs.com/png.latex?n">, la evaluación directa requiere <img src="https://latex.codecogs.com/png.latex?O(n%5E2)"> productos (si no se reutiliza <img src="https://latex.codecogs.com/png.latex?x%5Ek">) o al menos <img src="https://latex.codecogs.com/png.latex?2n-1"> productos y <img src="https://latex.codecogs.com/png.latex?n"> sumas incluso reutilizando potencias, mientras que Horner siempre usa exactamente <img src="https://latex.codecogs.com/png.latex?n"> productos y <img src="https://latex.codecogs.com/png.latex?n"> sumas.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb1-1"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"""</span></span>
<span id="cb1-2"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">    horner(coefs, x)</span></span>
<span id="cb1-3"></span>
<span id="cb1-4"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">Evalúa el polinomio con coeficientes `coefs = [a_n, a_{n-1}, ..., a_1, a_0]`</span></span>
<span id="cb1-5"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">(de mayor a menor grado) en el punto `x`, usando el método de Horner.</span></span>
<span id="cb1-6"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"""</span></span>
<span id="cb1-7"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">horner</span>(coefs, x)</span>
<span id="cb1-8">    resultado <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> coefs[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb1-9">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> c <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> coefs[<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span>]</span>
<span id="cb1-10">        resultado <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> resultado <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> c</span>
<span id="cb1-11">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span>
<span id="cb1-12">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> resultado</span>
<span id="cb1-13"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span>
<span id="cb1-14"></span>
<span id="cb1-15"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@show</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">horner</span>([<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>], <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.0</span>)   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># p(2) = 5·8 + 4·4 + 3·2 + 2 = 64</span></span></code></pre></div></div>
<pre><code>horner([5, 4, 3, 2], 2.0) = 64.0</code></pre>
<div class="callout callout-style-default callout-note callout-titled" title="Tarea">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Nota</span>Tarea
</div>
</div>
<div class="callout-body-container callout-body">
<p>Estudiar el algoritmo de Horner en Julia (por ejemplo, comparándolo contra <code>Polynomials.jl</code> o contra la evaluación directa con <code>@time</code>/<code>@allocated</code> para verificar el ahorro) y resolver los ejercicios y estudiar la sección 1.3 (“Algorithms”) del FNC. Diga en sus palabras qué es condicionamiento, qué es estabilidad, cómo se relacionan. Ejemplifique. Diga en sus palabras qué entiende por hacia atrás y estabilidad. Ejemplifique.</p>
</div>
</div>
</section>
<section id="ejercicio-1.4.2-fx-dfracex-1x" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="ejercicio-1.4.2-fx-dfracex-1x"><span class="header-section-number">3</span> Ejercicio 1.4.2 — <img src="https://latex.codecogs.com/png.latex?f(x)%20=%20%5Cdfrac%7Be%5Ex-1%7D%7Bx%7D"></h2>
<section id="a-número-de-condición-y-su-máximomínimo-en--11" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="a-número-de-condición-y-su-máximomínimo-en--11"><span class="header-section-number">3.1</span> (a) Número de condición y su máximo/mínimo en <img src="https://latex.codecogs.com/png.latex?%5B-1,1%5D"></h3>
<p>Con <img src="https://latex.codecogs.com/png.latex?f(x)=(e%5Ex-1)/x"> (extendida por continuidad, <img src="https://latex.codecogs.com/png.latex?f(0)=1">): <img src="https://latex.codecogs.com/png.latex?f'(x)%20=%20%5Cfrac%7Bxe%5Ex%20-%20(e%5Ex-1)%7D%7Bx%5E2%7D%20=%20%5Cfrac%7B(x-1)e%5Ex+1%7D%7Bx%5E2%7D"> <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x)%20=%20%5Cleft%7Cx%5Ccdot%5Cfrac%7Bf'(x)%7D%7Bf(x)%7D%5Cright%7C%20=%20%5Cleft%7C%5Cfrac%7B(x-1)e%5Ex+1%7D%7Be%5Ex-1%7D%5Cright%7C"></p>
<p>Derivando <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f"> (tratando el signo del numerador y denominador con cuidado, como en la nota de condicionamiento), se encuentra que el signo de <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f'(x)"> está gobernado por <img src="https://latex.codecogs.com/png.latex?x(e%5Ex-x-1)">, y como <img src="https://latex.codecogs.com/png.latex?e%5Ex-x-1%5Cge0"> para todo <img src="https://latex.codecogs.com/png.latex?x"> real (con igualdad solo en <img src="https://latex.codecogs.com/png.latex?x=0">), <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f"> es <strong>decreciente en <img src="https://latex.codecogs.com/png.latex?(-1,0)"> y creciente en <img src="https://latex.codecogs.com/png.latex?(0,1)"></strong>: tiene forma de “V”, con mínimo en <img src="https://latex.codecogs.com/png.latex?x=0"> y máximo en uno de los dos extremos del intervalo.</p>
<p>Evaluando en los extremos: <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(1)%20=%20%5Cleft%7C%5Cfrac%7B(1-1)e+1%7D%7Be-1%7D%5Cright%7C%20=%20%5Cfrac%7B1%7D%7Be-1%7D%20%5Capprox%200%7B,%7D5820,%20%5Cqquad%20%5Ckappa_f(-1)%20=%20%5Cleft%7C%5Cfrac%7B-2e%5E%7B-1%7D+1%7D%7Be%5E%7B-1%7D-1%7D%5Cright%7C%20%5Capprox%200%7B,%7D4180"></p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cboxed%7B%5Cmax_%7B%5B-1,1%5D%7D%5Ckappa_f%20=%20%5Ckappa_f(1)%20=%20%5Cdfrac%7B1%7D%7Be-1%7D%5Capprox%200%7B,%7D582,%20%5Cqquad%20%5Cmin_%7B%5B-1,1%5D%7D%5Ckappa_f%20=%20%5Ckappa_f(0)%20=%200%7D"></p>
<p>Verificación en Julia (evaluando <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f"> numéricamente en una malla fina, sin depender de la simplificación simbólica — también se puede hacer con <code>Symbolics.jl</code> derivando <code>f</code> automáticamente):</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb3-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">using</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">ForwardDiff</span></span>
<span id="cb3-2"></span>
<span id="cb3-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">f</span>(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> ? <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.0</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">exp</span>(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>x</span>
<span id="cb3-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">κ</span>(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(x <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> ForwardDiff.<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">derivative</span>(f, x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">f</span>(x))</span>
<span id="cb3-5"></span>
<span id="cb3-6">xs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">range</span>(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, length<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">20001</span>)</span>
<span id="cb3-7">kmax, imax <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">findmax</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">κ</span>.(xs))</span>
<span id="cb3-8">kmin, imin <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">findmin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">κ</span>.(xs))</span>
<span id="cb3-9"></span>
<span id="cb3-10"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@show</span> xs[imax], kmax   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># (1.0, 0.5819767068693265)</span></span>
<span id="cb3-11"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@show</span> xs[imin], kmin   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># (0.0, 0.0)</span></span>
<span id="cb3-12"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">@show</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">exp</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># 0.5819767068693265  -- coincide exactamente</span></span></code></pre></div></div>
<pre><code>(xs[imax], kmax) = (1.0, 0.5819767068693265)
(xs[imin], kmin) = (0.0, 0.0)
1 / (exp(1) - 1) = 0.5819767068693265</code></pre>
<p>Confirmado: <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(0)=0"> (el problema está <strong>óptimamente condicionado</strong> cerca de cero) y <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f"> crece muy poco en <img src="https://latex.codecogs.com/png.latex?%5B-1,1%5D">, alcanzando apenas <img src="https://latex.codecogs.com/png.latex?%5Capprox0%7B,%7D58">. Este es exactamente el mismo problema bien condicionado que ya vimos en la nota de condicionamiento — aquí lo confirmamos cuantitativamente en todo el intervalo <img src="https://latex.codecogs.com/png.latex?%5B-1,1%5D">, no solo en el límite <img src="https://latex.codecogs.com/png.latex?x%5Cto0">.</p>
</section>
<section id="bd-dos-algoritmos-para-el-mismo-problema" class="level3" data-number="3.2">
<h3 data-number="3.2" class="anchored" data-anchor-id="bd-dos-algoritmos-para-el-mismo-problema"><span class="header-section-number">3.2</span> (b)–(d) Dos algoritmos para el mismo problema</h3>
<p><strong>Algoritmo ingenuo:</strong> evaluar <img src="https://latex.codecogs.com/png.latex?f(x)"> tal cual, con la resta explícita.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb5-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">f_ingenuo</span>(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">exp</span>(x) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>x</span></code></pre></div></div>
<p><strong>Algoritmo por serie de Maclaurin (8 términos):</strong> <img src="https://latex.codecogs.com/png.latex?f(x)%20%5Capprox%20p(x)%20=%201%20+%20%5Cfrac%7Bx%7D%7B2!%7D%20+%20%5Cfrac%7Bx%5E2%7D%7B3!%7D%20+%20%5Ccdots%20+%20%5Cfrac%7Bx%5E7%7D%7B8!%7D"></p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb6-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">p_maclaurin</span>(x)</span>
<span id="cb6-2">    s <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.0</span></span>
<span id="cb6-3">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> k <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span></span>
<span id="cb6-4">        s <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span>k <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factorial</span>(k<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb6-5">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span>
<span id="cb6-6">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> s</span>
<span id="cb6-7"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">end</span></span></code></pre></div></div>
<p>Evaluando ambos en <img src="https://latex.codecogs.com/png.latex?x=10%5E%7B-2%7D,10%5E%7B-3%7D,%5Cldots,10%5E%7B-11%7D"> y comparando contra un valor de referencia de alta precisión:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
</colgroup>
<thead>
<tr class="header">
<th><img src="https://latex.codecogs.com/png.latex?x"></th>
<th>ingenuo</th>
<th>Maclaurin (8 términos)</th>
<th>error rel. ingenuo</th>
<th>error rel. Maclaurin</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-2%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D005016708416795"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D005016708416806"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D08%5Ctimes10%5E%7B-14%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D8%5Ctimes10%5E%7B-16%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-3%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000500166708385"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000500166708342"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D29%5Ctimes10%5E%7B-14%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?7%7B,%7D5%5Ctimes10%5E%7B-17%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-4%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000050001667141"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000050001666708"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D33%5Ctimes10%5E%7B-13%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?9%7B,%7D8%5Ctimes10%5E%7B-17%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-5%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000005000006965"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000005000016667"></td>
<td><img src="https://latex.codecogs.com/png.latex?9%7B,%7D70%5Ctimes10%5E%7B-12%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?7%7B,%7D5%5Ctimes10%5E%7B-18%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-6%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000499962184"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000500000167"></td>
<td><img src="https://latex.codecogs.com/png.latex?3%7B,%7D80%5Ctimes10%5E%7B-11%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D6%5Ctimes10%5E%7B-16%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-7%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000049433680"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000050000002"></td>
<td><img src="https://latex.codecogs.com/png.latex?5%7B,%7D66%5Ctimes10%5E%7B-10%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?2%7B,%7D8%5Ctimes10%5E%7B-17%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-8%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?0%7B,%7D999999993922529"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000005000000"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D11%5Ctimes10%5E%7B-8%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D7%5Ctimes10%5E%7B-17%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-9%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000082740371"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000000500000"></td>
<td><img src="https://latex.codecogs.com/png.latex?8%7B,%7D22%5Ctimes10%5E%7B-8%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D1%5Ctimes10%5E%7B-17%7D"></td>
</tr>
<tr class="odd">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-10%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000082740371"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000000050000"></td>
<td><img src="https://latex.codecogs.com/png.latex?8%7B,%7D27%5Ctimes10%5E%7B-8%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D1%5Ctimes10%5E%7B-18%7D"></td>
</tr>
<tr class="even">
<td><img src="https://latex.codecogs.com/png.latex?10%5E%7B-11%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000082740371"></td>
<td><img src="https://latex.codecogs.com/png.latex?1%7B,%7D000000000005000"></td>
<td><img src="https://latex.codecogs.com/png.latex?8%7B,%7D27%5Ctimes10%5E%7B-8%7D"></td>
<td><img src="https://latex.codecogs.com/png.latex?4%7B,%7D1%5Ctimes10%5E%7B-19%7D"></td>
</tr>
</tbody>
</table>
<div class="callout callout-style-default callout-important callout-titled" title="¿Cuál es más preciso, y por qué?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Importante</span>¿Cuál es más preciso, y por qué?
</div>
</div>
<div class="callout-body-container callout-body">
<p>El algoritmo de Maclaurin es dramáticamente más preciso: mantiene error relativo cercano a <img src="https://latex.codecogs.com/png.latex?%5Cepsilon_%7B%5Ctext%7Bmach%7D%7D"> (<img src="https://latex.codecogs.com/png.latex?%5Csim10%5E%7B-16%7D">–<img src="https://latex.codecogs.com/png.latex?10%5E%7B-17%7D">) en <strong>todo</strong> el rango, mientras que el ingenuo se degrada progresivamente — de <img src="https://latex.codecogs.com/png.latex?10%5E%7B-14%7D"> en <img src="https://latex.codecogs.com/png.latex?x=10%5E%7B-2%7D"> a <img src="https://latex.codecogs.com/png.latex?%5Csim10%5E%7B-8%7D"> en <img src="https://latex.codecogs.com/png.latex?x%5Cle10%5E%7B-9%7D">, donde el error deja de crecer porque toca el límite de lo que la representación de <img src="https://latex.codecogs.com/png.latex?x"> misma permite distinguir.</p>
<p>La razón es exactamente la del Ejemplo 1.4.1: el algoritmo ingenuo calcula <img src="https://latex.codecogs.com/png.latex?e%5Ex"> (que para <img src="https://latex.codecogs.com/png.latex?x"> pequeño está muy cerca de <img src="https://latex.codecogs.com/png.latex?1">) y luego <strong>resta <img src="https://latex.codecogs.com/png.latex?1"></strong>, cancelando los primeros dígitos compartidos y dejando expuesto el ruido de redondeo de <img src="https://latex.codecogs.com/png.latex?e%5Ex"> como si fuera señal. El polinomio de Maclaurin, en cambio, <strong>nunca resta cantidades parecidas</strong>: todos sus términos <img src="https://latex.codecogs.com/png.latex?x%5Ek/(k%7B+%7D1)!"> para <img src="https://latex.codecogs.com/png.latex?x%3E0"> son positivos y decrecientes, así que solo hay sumas de cantidades del mismo signo — sin cancelación posible.</p>
<p>Nótese que <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x)%5Cto0"> cuando <img src="https://latex.codecogs.com/png.latex?x%5Cto0">: el <strong>problema</strong> se vuelve más fácil, no más difícil, cerca de cero. La degradación del algoritmo ingenuo no tiene nada que ver con el condicionamiento — es pura <strong>inestabilidad algorítmica</strong>, el mismo fenómeno ya documentado para <img src="https://latex.codecogs.com/png.latex?(e%5Ex-1)/x"> en la nota de condicionamiento, ahora cuantificado en todo el intervalo <img src="https://latex.codecogs.com/png.latex?%5B-1,1%5D"> y comparado explícitamente contra una alternativa estable.</p>
</div>
</div>
</section>
</section>
<section id="conexión-con-la-nota-de-condicionamiento" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="conexión-con-la-nota-de-condicionamiento"><span class="header-section-number">4</span> Conexión con la nota de condicionamiento</h2>
<p>Este ejercicio es la contraparte natural de lo visto en la nota anterior: allí establecimos que <img src="https://latex.codecogs.com/png.latex?(e%5Ex-1)/x"> es un problema bien condicionado cerca de cero (<img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(0)=0">); aquí confirmamos que esa buena condición se sostiene en todo <img src="https://latex.codecogs.com/png.latex?%5B-1,1%5D"> (máximo <img src="https://latex.codecogs.com/png.latex?%5Capprox0%7B,%7D582">), y mostramos <strong>dos algoritmos concretos</strong> para el mismo problema — uno inestable (cancelación explícita) y uno estable (serie de Maclaurin, sin resta de cantidades parecidas) — cuantificando la brecha entre ellos. Es exactamente el mismo patrón del Ejemplo 1.4.1: problema bien condicionado, algoritmo mal elegido, error inexplicable por el condicionamiento — y una alternativa que lo resuelve sin cambiar el problema, solo la ruta de cálculo.</p>


</section>

 ]]></description>
  <guid>https://arturosanjuan.xyz/cursos/numerico/estabilidad/</guid>
  <pubDate>Sun, 23 Aug 2026 05:00:00 GMT</pubDate>
</item>
<item>
  <title>Condicionamiento</title>
  <dc:creator>Arturo Sanjuán</dc:creator>
  <link>https://arturosanjuan.xyz/cursos/numerico/condicionamiento/</link>
  <description><![CDATA[ 




<section id="cancelación-catastrófica-o-pérdida-de-significancia" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="cancelación-catastrófica-o-pérdida-de-significancia"><span class="header-section-number">1</span> Cancelación catastrófica o pérdida de significancia</h2>
<p>Consideremos la sucesión</p>
<p><img src="https://latex.codecogs.com/png.latex?x_%7Bn+1%7D%20=%2010x_n%20-%209"></p>
<p>Desde el punto de vista del análisis matemático puro, si <img src="https://latex.codecogs.com/png.latex?x_0=1"> entonces <img src="https://latex.codecogs.com/png.latex?x_n=1"> para todo <img src="https://latex.codecogs.com/png.latex?n">: es la sucesión constante, porque <img src="https://latex.codecogs.com/png.latex?x=1"> es el único punto fijo de <img src="https://latex.codecogs.com/png.latex?g(x)=10x-9">.</p>
<p>Supongamos ahora que en punto flotante solo tenemos <img src="https://latex.codecogs.com/png.latex?d=2"> cifras significativas, y que el dato <img src="https://latex.codecogs.com/png.latex?x_0=1"> se representa como <img src="https://latex.codecogs.com/png.latex?%5Ctilde%20x_0=0%7B,%7D99"> — un error relativo de apenas el <img src="https://latex.codecogs.com/png.latex?1%5C%25">, del orden de cualquier redondeo típico. Aplicamos la recurrencia tal cual, redondeando a 2 cifras en cada paso:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
<col style="width: 20%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?n"></th>
<th style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?%5Ctilde%20x_n"></th>
<th style="text-align: center;">error absoluto <img src="https://latex.codecogs.com/png.latex?e_n=%5Ctilde%20x_n-1"></th>
<th style="text-align: center;">error relativo</th>
<th style="text-align: center;">dígitos perdidos</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: center;">0</td>
<td style="text-align: center;">0,99</td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?-0%7B,%7D01=-1%5Ctimes10%5E%7B-2%7D"></td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?1%5C%25"></td>
<td style="text-align: center;">0</td>
</tr>
<tr class="even">
<td style="text-align: center;">1</td>
<td style="text-align: center;">0,90</td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?-0%7B,%7D10=-1%5Ctimes10%5E%7B-1%7D"></td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?10%5C%25"></td>
<td style="text-align: center;">1</td>
</tr>
<tr class="odd">
<td style="text-align: center;">2</td>
<td style="text-align: center;">0,00</td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?-1%7B,%7D00=-1%5Ctimes10%5E%7B0%7D"></td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?100%5C%25"></td>
<td style="text-align: center;">2</td>
</tr>
<tr class="even">
<td style="text-align: center;">3</td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?-9%7B,%7D00"></td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?-10%7B,%7D00=-1%5Ctimes10%5E%7B1%7D"></td>
<td style="text-align: center;"><img src="https://latex.codecogs.com/png.latex?1000%5C%25"></td>
<td style="text-align: center;">3</td>
</tr>
</tbody>
</table>
<p>En tres pasos el error relativo pasó de <img src="https://latex.codecogs.com/png.latex?1%5C%25"> a <img src="https://latex.codecogs.com/png.latex?1000%5C%25"> — la respuesta calculada (<img src="https://latex.codecogs.com/png.latex?-9">) no tiene <strong>ninguna</strong> relación con el valor verdadero (<img src="https://latex.codecogs.com/png.latex?1">).</p>
<div class="callout callout-style-default callout-important callout-titled" title="Por qué ocurre esto">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Importante</span>Por qué ocurre esto
</div>
</div>
<div class="callout-body-container callout-body">
<p>Escribiendo <img src="https://latex.codecogs.com/png.latex?%5Ctilde%20x_n%20=%201+e_n"> y sustituyendo en la recurrencia:</p>
<p><img src="https://latex.codecogs.com/png.latex?1+e_%7Bn+1%7D=10(1+e_n)-9=1+10e_n%20%5C;%5CLongrightarrow%5C;%20e_%7Bn+1%7D=10%5C,e_n%20%5C;%5CLongrightarrow%5C;%20e_n=10%5En%20e_0"></p>
<p>El error se <strong>multiplica por 10 en cada paso</strong>, sin importar qué tan pequeño sea <img src="https://latex.codecogs.com/png.latex?e_0">. Tomar un dato más aproximado, como <img src="https://latex.codecogs.com/png.latex?x_0=0%7B,%7D99999">, <strong>no resuelve el problema, solo lo retrasa</strong>: el problema está mal condicionado. El algoritmo y el computador dan una respuesta, pero esa respuesta no está cerca de “la realidad”.</p>
</div>
</div>
<p>Este es exactamente el mecanismo que hace <em>silenciosa</em> la pérdida de significancia: ninguna operación individual (multiplicar por 10, restar 9) tiene nada de alarmante — el resultado final simplemente deja de tener sentido, sin ningún símbolo de error que lo anuncie.</p>
<p>El mismo fenómeno aparece cuando restamos dos números cercanos:</p>
<p><img src="https://latex.codecogs.com/png.latex?2%7B,%7D1357%20-%202%7B,%7D1356%20=%200%7B,%7D0001%20=%201%5Ctimes10%5E%7B-4%7D"></p>
<p>Cada operando tiene 5 cifras significativas, pero el resultado solo tiene 1 — <strong>perdimos 4 cifras significativas</strong> en una sola resta.</p>
</section>
<section id="el-número-de-condición-relativo" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="el-número-de-condición-relativo"><span class="header-section-number">2</span> El número de condición relativo</h2>
<p>La pregunta natural es: <strong>¿qué tan sensible es un problema, independientemente del algoritmo o la máquina que se use para resolverlo?</strong></p>
<section id="un-ejemplo-de-calentamiento" class="level3" data-number="2.1">
<h3 data-number="2.1" class="anchored" data-anchor-id="un-ejemplo-de-calentamiento"><span class="header-section-number">2.1</span> Un ejemplo de calentamiento</h3>
<p>Sea <img src="https://latex.codecogs.com/png.latex?f(x)=x+1">. En la máquina, <img src="https://latex.codecogs.com/png.latex?x"> se representa como <img src="https://latex.codecogs.com/png.latex?%5Ctext%7Bfl%7D(x)=x(1+%5Cepsilon)"> con <img src="https://latex.codecogs.com/png.latex?%7C%5Cepsilon%7C%5Cle%20%5Cepsilon_%7B%5Ctext%7Bmach%7D%7D/2">. Si la suma se hace exacta:</p>
<p><img src="https://latex.codecogs.com/png.latex?y%20=%20%5Ctext%7Bfl%7D(x)+1%20=%20x(1+%5Cepsilon)+1"></p>
<p>El error relativo del resultado es</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac%7B%7Cy-f(x)%7C%7D%7B%7Cf(x)%7C%7D%20=%20%5Cfrac%7B%7Cx(1+%5Cepsilon)+1-(x+1)%7C%7D%7B%7Cx+1%7C%7D%20=%20%5Cfrac%7B%7C%5Cepsilon%20x%7C%7D%7B%7Cx+1%7C%7D"></p>
<p>Este error puede ser arbitrariamente grande si <img src="https://latex.codecogs.com/png.latex?x%5Capprox%20-1"> — aunque <img src="https://latex.codecogs.com/png.latex?%5Cepsilon"> sea minúsculo. El problema “sumar 1” es benigno lejos de <img src="https://latex.codecogs.com/png.latex?x=-1">, mal condicionado cerca de ahí.</p>
</section>
<section id="definición-formal" class="level3" data-number="2.2">
<h3 data-number="2.2" class="anchored" data-anchor-id="definición-formal"><span class="header-section-number">2.2</span> Definición formal</h3>
<p>Queremos generalizar esta idea: dado un problema <img src="https://latex.codecogs.com/png.latex?f"> y un dato <img src="https://latex.codecogs.com/png.latex?a">, ¿cuánto se amplifica el error relativo de <img src="https://latex.codecogs.com/png.latex?a"> al pasar por <img src="https://latex.codecogs.com/png.latex?f">?</p>
<div class="callout callout-style-default callout-important callout-titled" title="Definición — número de condición relativo">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Importante</span>Definición — número de condición relativo
</div>
</div>
<div class="callout-body-container callout-body">
<p><img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(a)%20=%20%5Clim_%7B%5Cepsilon%5Cto%200%7D%20%5Cfrac%7B%5Cleft%7Cf(a)-f(a(1+%5Cepsilon))%5Cright%7C/%7Cf(a)%7C%7D%7B%7C%5Cepsilon%7C%7D"></p>
<p>Es la razón entre el cambio relativo en el resultado y el cambio relativo en el dato, en el límite de perturbaciones pequeñas. Si <img src="https://latex.codecogs.com/png.latex?f"> es diferenciable en <img src="https://latex.codecogs.com/png.latex?a">:</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(a)%20=%20%5Cleft%7C%5Cfrac%7Ba%5C,f'(a)%7D%7Bf(a)%7D%5Cright%7C"></p>
</div>
</div>
<p>Si <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(a)"> es muy grande, el problema está <strong>mal condicionado</strong> en <img src="https://latex.codecogs.com/png.latex?a">: cualquier perturbación de los datos — así sea del tamaño de <img src="https://latex.codecogs.com/png.latex?%5Cepsilon_%7B%5Ctext%7Bmach%7D%7D"> — se amplifica hasta volver el resultado inútil. Esto <strong>no depende del algoritmo ni de la máquina</strong>: es una propiedad del problema mismo.</p>
</section>
<section id="ejemplos-elementales" class="level3" data-number="2.3">
<h3 data-number="2.3" class="anchored" data-anchor-id="ejemplos-elementales"><span class="header-section-number">2.3</span> Ejemplos elementales</h3>
<p><img src="https://latex.codecogs.com/png.latex?f(x)=x-c%20%5C;%5CLongrightarrow%5C;%20%5Ckappa_f(x)=%5Cleft%7C%5Cfrac%7Bx%7D%7Bx-c%7D%5Cright%7C"></p>
<p>Puede ser muy grande si <img src="https://latex.codecogs.com/png.latex?%7Cx%7C%5Cgg%7Cx-c%7C">, por ejemplo si <img src="https://latex.codecogs.com/png.latex?x%5Capprox%20c"> — esta es exactamente la resta cancelante de la sección anterior.</p>
<p><img src="https://latex.codecogs.com/png.latex?f(x)=cx%20%5C;%5CLongrightarrow%5C;%20%5Ckappa_f(x)=1"></p>
<p>La multiplicación por una constante nunca amplifica el error relativo: siempre funciona bien.</p>
<p><img src="https://latex.codecogs.com/png.latex?f(x)=x%5Ep%20%5C;%5CLongrightarrow%5C;%20%5Ckappa_f(x)=%7Cp%7C"></p>
<p><img src="https://latex.codecogs.com/png.latex?f(x)=%5Ccos(x)%20%5C;%5CLongrightarrow%5C;%20%5Ckappa_f(x)=%7Cx%5Ctan(x)%7C"></p>
<p>Puede ser grande si <img src="https://latex.codecogs.com/png.latex?x"> está cerca de un múltiplo impar de <img src="https://latex.codecogs.com/png.latex?%5Cpi/2"> (ahí <img src="https://latex.codecogs.com/png.latex?f(x)%5Capprox%200">) o si <img src="https://latex.codecogs.com/png.latex?%7Cx%7C%5Cgg%201">.</p>
</section>
</section>
<section id="ejercicio-1.2.3-fxdfracex-1x" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="ejercicio-1.2.3-fxdfracex-1x"><span class="header-section-number">3</span> Ejercicio 1.2.3 — <img src="https://latex.codecogs.com/png.latex?f(x)=%5Cdfrac%7Be%5Ex-1%7D%7Bx%7D"></h2>
<section id="el-límite-en-x0-vía-lhôpital" class="level3" data-number="3.1">
<h3 data-number="3.1" class="anchored" data-anchor-id="el-límite-en-x0-vía-lhôpital"><span class="header-section-number">3.1</span> El límite en <img src="https://latex.codecogs.com/png.latex?x=0"> vía L’Hôpital</h3>
<p><img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bx%5Cto%200%7D%5Cfrac%7Be%5Ex-1%7D%7Bx%7D%20%5C;=%5C;%20%5Cfrac%7B0%7D%7B0%7D%20%5Cquad%5Ctext%7B(indeterminado)%7D"></p>
<p>Aplicando L’Hôpital (derivando numerador y denominador por separado):</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bx%5Cto%200%7D%5Cfrac%7Be%5Ex-1%7D%7Bx%7D%20=%20%5Clim_%7Bx%5Cto%200%7D%5Cfrac%7B%5Cdfrac%7Bd%7D%7Bdx%7D(e%5Ex-1)%7D%7B%5Cdfrac%7Bd%7D%7Bdx%7D(x)%7D%20=%20%5Clim_%7Bx%5Cto%200%7D%5Cfrac%7Be%5Ex%7D%7B1%7D%20=%20e%5E0%20=%201"></p>
<p>Esto confirma, sin usar series de Taylor, que <img src="https://latex.codecogs.com/png.latex?f(0)=1"> es la extensión continua correcta.</p>
</section>
</section>
<section id="comportamiento-de-kappa_f-en-pminfty" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="comportamiento-de-kappa_f-en-pminfty"><span class="header-section-number">4</span> Comportamiento de <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f"> en <img src="https://latex.codecogs.com/png.latex?%5Cpm%5Cinfty"></h2>
<p>Ya sabemos que <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(0)=0">. Para completar el panorama, veamos qué le pasa a <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x)=%5Cleft%7C%5Cdfrac%7BN(x)%7D%7BD(x)%7D%5Cright%7C">, con <img src="https://latex.codecogs.com/png.latex?N(x)=(x-1)e%5Ex+1"> y <img src="https://latex.codecogs.com/png.latex?D(x)=e%5Ex-1">, en los dos extremos.</p>
<p>Cuando <img src="https://latex.codecogs.com/png.latex?x%5Cto+%5Cinfty">: tanto <img src="https://latex.codecogs.com/png.latex?N(x)"> como <img src="https://latex.codecogs.com/png.latex?D(x)"> divergen (<img src="https://latex.codecogs.com/png.latex?e%5Ex"> domina en ambos), así que es indeterminado <img src="https://latex.codecogs.com/png.latex?%5Cinfty/%5Cinfty"> y L’Hôpital aplica:</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bx%5Cto+%5Cinfty%7D%5Cfrac%7BN(x)%7D%7BD(x)%7D%20=%20%5Clim_%7Bx%5Cto+%5Cinfty%7D%5Cfrac%7BN'(x)%7D%7BD'(x)%7D%20=%20%5Clim_%7Bx%5Cto+%5Cinfty%7D%5Cfrac%7Bxe%5Ex%7D%7Be%5Ex%7D%20=%20%5Clim_%7Bx%5Cto+%5Cinfty%7D%20x%20=%20+%5Cinfty"></p>
<p>(se usó <img src="https://latex.codecogs.com/png.latex?N'(x)=e%5Ex+(x-1)e%5Ex=xe%5Ex"> y <img src="https://latex.codecogs.com/png.latex?D'(x)=e%5Ex">; tras una sola aplicación de L’Hôpital el cociente ya se simplifica sin quedar indeterminado). Entonces <img src="https://latex.codecogs.com/png.latex?%5Cdisplaystyle%5Clim_%7Bx%5Cto+%5Cinfty%7D%5Ckappa_f(x)=+%5Cinfty">: el problema se vuelve arbitrariamente mal condicionado para <img src="https://latex.codecogs.com/png.latex?x"> grande — aunque de forma “mansa”, porque <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(x)%5Capprox%20x"> crece solo linealmente (no exponencialmente).</p>
<p>Cuando <img src="https://latex.codecogs.com/png.latex?x%5Cto-%5Cinfty">: aquí no hay indeterminación, porque <img src="https://latex.codecogs.com/png.latex?e%5Ex%5Cto0"> y ambos, numerador y denominador, convergen a valores finitos directamente:</p>
<p><img src="https://latex.codecogs.com/png.latex?N(x)=(x-1)e%5Ex+1%20%5C;%5Clongrightarrow%5C;%200+1=1"></p>
<p>(<img src="https://latex.codecogs.com/png.latex?(x-1)e%5Ex%5Cto0"> porque la exponencial decae más rápido de lo que cualquier polinomio crece)</p>
<p><img src="https://latex.codecogs.com/png.latex?D(x)=e%5Ex-1%20%5C;%5Clongrightarrow%5C;%200-1=-1"></p>
<p><img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bx%5Cto-%5Cinfty%7D%5Ckappa_f(x)%20=%20%5Cleft%7C%5Cfrac%7B1%7D%7B-1%7D%5Cright%7C%20=%201"></p>
<p>En resumen</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Clim_%7Bx%5Cto-%5Cinfty%7D%5Ckappa_f(x)=1%20%5Cqquad%20%5Ckappa_f(0)=0%20%5Cqquad%20%5Clim_%7Bx%5Cto+%5Cinfty%7D%5Ckappa_f(x)=+%5Cinfty"></p>
<p>Para <img src="https://latex.codecogs.com/png.latex?x%5Cle0">, <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f"> queda <strong>acotado entre 0 y 1</strong>: el problema está uniformemente bien condicionado en todo el semieje negativo. Para <img src="https://latex.codecogs.com/png.latex?x"> positivo y grande, el problema se vuelve mal condicionado, pero solo linealmente (consistente con los valores numéricos: <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(10%5E%7B-6%7D)%5Capprox5%5Ctimes10%5E%7B-7%7D">, <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(1)%5Capprox0%7B,%7D58">, <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(10)%5Capprox9">, <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(20)%5Capprox19">).</p>
</section>
<section id="ejercicio-1.2.5-condición-del-inverso" class="level2" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="ejercicio-1.2.5-condición-del-inverso"><span class="header-section-number">5</span> Ejercicio 1.2.5 — condición del inverso</h2>
<p>Sea <img src="https://latex.codecogs.com/png.latex?f"> con número de condición <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f">, y <img src="https://latex.codecogs.com/png.latex?f%5E%7B-1%7D"> su inversa. Queremos mostrar</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Ckappa_%7Bf%5E%7B-1%7D%7D(x)%20=%20%5Cfrac%7B1%7D%7B%5Ckappa_f%5Cbig(f%5E%7B-1%7D(x)%5Cbig)%7D"></p>
<p><strong>Demostración</strong>, sin invocar el teorema de la función inversa: sea <img src="https://latex.codecogs.com/png.latex?h%20=%20f%5Ccirc%20f%5E%7B-1%7D%20=%20%5Ctext%7Bid%7D">.</p>
<p>Primero, <img src="https://latex.codecogs.com/png.latex?%5Ckappa_%7B%5Ctext%7Bid%7D%7D(x)=1">: con <img src="https://latex.codecogs.com/png.latex?%5Ctext%7Bid%7D'(x)=1">, <img src="https://latex.codecogs.com/png.latex?%5Ckappa_%7B%5Ctext%7Bid%7D%7D(x)=%7Cx%5Ccdot%201/x%7C=1">.</p>
<p>Por la regla de la cadena para números de condición (ejercicio 1.2.4), aplicada a <img src="https://latex.codecogs.com/png.latex?h=f%5Ccirc%20f%5E%7B-1%7D">:</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Ckappa_h(x)%20=%20%5Ckappa_f%5Cbig(f%5E%7B-1%7D(x)%5Cbig)%5Ccdot%5Ckappa_%7Bf%5E%7B-1%7D%7D(x)"></p>
<p>Como <img src="https://latex.codecogs.com/png.latex?h=%5Ctext%7Bid%7D">, <img src="https://latex.codecogs.com/png.latex?%5Ckappa_h(x)=%5Ckappa_%7B%5Ctext%7Bid%7D%7D(x)=1">. Despejando:</p>
<p><img src="https://latex.codecogs.com/png.latex?1%20=%20%5Ckappa_f%5Cbig(f%5E%7B-1%7D(x)%5Cbig)%5Ccdot%5Ckappa_%7Bf%5E%7B-1%7D%7D(x)%20%5C;%5CLongrightarrow%5C;%20%5Ckappa_%7Bf%5E%7B-1%7D%7D(x)=%5Cfrac%7B1%7D%7B%5Ckappa_f%5Cbig(f%5E%7B-1%7D(x)%5Cbig)%7D%20%5Cqquad%20%5Cblacksquare"></p>
<p>Esta ruta es más corta que aplicar el teorema de la función inversa directamente, y no exige demostrar por separado que <img src="https://latex.codecogs.com/png.latex?f%5E%7B-1%7D"> es derivable.</p>
</section>
<section id="raíces-de-un-polinomio-cuadrático" class="level2" data-number="6">
<h2 data-number="6" class="anchored" data-anchor-id="raíces-de-un-polinomio-cuadrático"><span class="header-section-number">6</span> Raíces de un polinomio cuadrático</h2>
<p>Consideremos <img src="https://latex.codecogs.com/png.latex?ax%5E2+bx+c=0">. Los datos son los coeficientes <img src="https://latex.codecogs.com/png.latex?(a,b,c)">; el resultado son las raíces <img src="https://latex.codecogs.com/png.latex?r_1,r_2"> (posiblemente complejas). Formalmente, <img src="https://latex.codecogs.com/png.latex?f(a,b,c)=(r_1,r_2)">.</p>
<p>Fijamos <img src="https://latex.codecogs.com/png.latex?b,c"> y perturbamos solo el coeficiente principal <img src="https://latex.codecogs.com/png.latex?a">, para ver cómo responde <img src="https://latex.codecogs.com/png.latex?r_1">: <img src="https://latex.codecogs.com/png.latex?f(a)=r_1">. Partiendo de la identidad <img src="https://latex.codecogs.com/png.latex?ar_1%5E2+br_1+c=0"> y derivando implícitamente respecto a <img src="https://latex.codecogs.com/png.latex?a"> (con <img src="https://latex.codecogs.com/png.latex?b,c"> fijos):</p>
<p><img src="https://latex.codecogs.com/png.latex?r_1%5E2+2ar_1%5Cfrac%7Bdr_1%7D%7Bda%7D+b%5C,%5Cfrac%7Bdr_1%7D%7Bda%7D=0%20%5C;%5CLongrightarrow%5C;%20%5Cfrac%7Bdr_1%7D%7Bda%7D=%5Cfrac%7B-r_1%5E2%7D%7B2ar_1+b%7D"></p>
<p><img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(a)%20=%20%5Cleft%7C%5Cfrac%7Ba%7D%7Br_1%7D%5Ccdot%5Cfrac%7Bdr_1%7D%7Bda%7D%5Cright%7C%20=%20%5Cleft%7C%5Cfrac%7Ba%5C,r_1%7D%7B2ar_1+b%7D%5Cright%7C"></p>
<p>Usando la fórmula cuadrática, <img src="https://latex.codecogs.com/png.latex?%7C2ar_1+b%7C=%5Cleft%7C%5Csqrt%7Bb%5E2-4ac%7D%5Cright%7C=%7Ca(r_1-r_2)%7C">:</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cboxed%7B%5Ckappa_f(a)%20=%20%5Cleft%7C%5Cfrac%7Br_1%7D%7Br_1-r_2%7D%5Cright%7C%7D"></p>
<p>El problema está mal condicionado exactamente cuando <img src="https://latex.codecogs.com/png.latex?%7Cr_1%7C%5Cgg%7Cr_1-r_2%7C"> — es decir, cuando las raíces están mucho más cerca entre sí que del origen. En el caso extremo de una raíz doble (<img src="https://latex.codecogs.com/png.latex?r_1=r_2">), <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f%5Cto%5Cinfty">.</p>
</section>
<section id="simulación-sensibilidad-de-las-raíces-de-pxax-cx-d" class="level2" data-number="7">
<h2 data-number="7" class="anchored" data-anchor-id="simulación-sensibilidad-de-las-raíces-de-pxax-cx-d"><span class="header-section-number">7</span> Simulación — sensibilidad de las raíces de <img src="https://latex.codecogs.com/png.latex?p(x)=a(x-c)(x-d)"></h2>
<p>Para hacer tangible la fórmula anterior, parametrizamos el polinomio directamente por sus raíces <img src="https://latex.codecogs.com/png.latex?c,d"> y su coeficiente principal <img src="https://latex.codecogs.com/png.latex?a">:</p>
<p><img src="https://latex.codecogs.com/png.latex?p(x)%20=%20a(x-c)(x-d)%20=%20a%5C,x%5E2%20%5Cunderbrace%7B-%5C,a(c+d)%7D_%7BB%7D%5C,x%20+%20%5Cunderbrace%7Ba%5C,c%5C,d%7D_%7BC%7D"></p>
<p>de modo que, en ausencia de redondeo, las raíces son exactamente <img src="https://latex.codecogs.com/png.latex?r_1=c"> y <img src="https://latex.codecogs.com/png.latex?r_2=d"> para cualquier <img src="https://latex.codecogs.com/png.latex?a%5Cne%200">. La simulación perturba <strong>solo</strong> el coeficiente <img src="https://latex.codecogs.com/png.latex?a%5Cto%20a(1+%5Cvarepsilon)">, mantiene <img src="https://latex.codecogs.com/png.latex?B,C"> fijos (tal como en la derivación de <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(a)">), recalcula las raíces con la fórmula cuadrática, y compara:</p>
<ul>
<li>el error relativo <strong>predicho</strong> por la teoría: <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f(a)%5Ccdot%7C%5Cvarepsilon%7C%20=%20%5Cleft%7C%5Cdfrac%7Br_1%7D%7Br_1-r_2%7D%5Cright%7C%5Ccdot%7C%5Cvarepsilon%7C"></li>
<li>el error relativo <strong>real</strong>, medido directamente sobre la raíz recalculada</li>
</ul>
<p>Mueve los controles y observa qué pasa con <img src="https://latex.codecogs.com/png.latex?%5Ckappa_f"> cuando <img src="https://latex.codecogs.com/png.latex?c"> y <img src="https://latex.codecogs.com/png.latex?d"> se acercan.</p>
<iframe src="notebooks/condicionamiento-simulacion.html" width="100%" height="1400px" style="border:none;">
</iframe>
</section>
<section id="tarea" class="level2" data-number="8">
<h2 data-number="8" class="anchored" data-anchor-id="tarea"><span class="header-section-number">8</span> Tarea</h2>
<p>Resolver los siguientes ejercicios de la sección 1.2 (“Exercises”) de <em>Fundamentals of Numerical Computation</em>, disponibles en <a href="https://fncbook.com/julia/conditioning/#exercises" class="uri">https://fncbook.com/julia/conditioning/#exercises</a>:</p>


</section>

 ]]></description>
  <guid>https://arturosanjuan.xyz/cursos/numerico/condicionamiento/</guid>
  <pubDate>Fri, 14 Aug 2026 05:00:00 GMT</pubDate>
</item>
<item>
  <title>Introducción</title>
  <dc:creator>Arturo Sanjuán</dc:creator>
  <link>https://arturosanjuan.xyz/cursos/numerico/introduccion/</link>
  <description><![CDATA[ 




<section id="breve-historia-de-los-sistemas-de-numeración" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="breve-historia-de-los-sistemas-de-numeración"><span class="header-section-number">1</span> Breve historia de los sistemas de numeración</h2>
<table class="caption-top table">
<colgroup>
<col style="width: 33%">
<col style="width: 33%">
<col style="width: 33%">
</colgroup>
<thead>
<tr class="header">
<th>Época</th>
<th>Sistema</th>
<th>Características</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>~30 000 a.C.</td>
<td>Sistemas de conteo primitivos (unarios)</td>
<td>Hueso de Lebombo y hueso de Ishango — muescas talladas en hueso</td>
</tr>
<tr class="even">
<td>~2500 a.C.</td>
<td>Babilonios</td>
<td>Base 60, <strong>posicional</strong> (avance decisivo)</td>
</tr>
<tr class="odd">
<td>~500 a.C.</td>
<td>Griegos</td>
<td>Numeración con letras</td>
</tr>
<tr class="even">
<td>500 a.C. – s. XIV</td>
<td>Romanos</td>
<td>Aditivo: <code>CXCIV = 194</code>, <code>XLVIII = 48</code></td>
</tr>
<tr class="odd">
<td>~s. VIII</td>
<td>Chinos</td>
<td>Multiplicativo, basado en potencias de 10: 一 二 三 四 五 六 七 八 九 十</td>
</tr>
<tr class="even">
<td>36 a.e.c. – ~350 a.e.c.</td>
<td>Mayas</td>
<td>Base 20, con un símbolo para el cero</td>
</tr>
<tr class="odd">
<td>628 d.C. → ~800 → s. XIII</td>
<td>Indo-arábigo</td>
<td>India (Brahmagupta) → Arabia (Al-Juarismi / Al-Khwarizmi) → Europa (Fibonacci)</td>
</tr>
<tr class="even">
<td>S. XVII</td>
<td>Pascal</td>
<td>Otras bases</td>
</tr>
<tr class="odd">
<td>S. XVII</td>
<td>Leibniz</td>
<td>Base 2</td>
</tr>
<tr class="even">
<td>S. XIX (finales)</td>
<td>Peano y Dedekind</td>
<td>Fundamentación formal</td>
</tr>
</tbody>
</table>
<p><strong>Ejemplo unario:</strong> <code>II + III = IIIII</code></p>
</section>
<section id="el-sistema-posicional-decimal" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="el-sistema-posicional-decimal"><span class="header-section-number">2</span> El sistema posicional decimal</h2>
<p><img src="https://latex.codecogs.com/png.latex?243%20=%202%5Ccdot100+4%5Ccdot10+3%20=%202%5Ccdot10%5E2+4%5Ccdot10%5E1+3%5Ccdot10%5E0"></p>
<p>Fracciones simples:</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac%7B3%7D%7B2%7D=%5Cfrac%7B6%7D%7B4%7D%20%5Cqquad%201%7B,%7D5%20=%201+%5Cfrac%7B5%7D%7B10%7D=1%5Cfrac%7B5%7D%7B10%7D=1%5Cfrac12"></p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac%7B7%7D%7B6%7D=1%7B,%7D1%5Coverline%7B6%7D=1%5Ccdot10%5E0+1%5Ccdot10%5E%7B-1%7D+6%5Ccdot10%5E%7B-2%7D+%5Ccdots"></p>
<p><strong>Forma general de un número posicional</strong>, con dígitos <img src="https://latex.codecogs.com/png.latex?a_i%20%5Cin%20%5C%7B0,1,%5Cldots,9%5C%7D">:</p>
<p><img src="https://latex.codecogs.com/png.latex?a_n%20a_%7Bn-1%7D%5Ccdots%20a_0,%5C,%20a_%7B-1%7D%5C,%20a_%7B-2%7D%5C,%20a_%7B-3%7D%5Ccdots"></p>
<p><img src="https://latex.codecogs.com/png.latex?=%20a_n%5Ccdot10%5En%20+%20a_%7Bn-1%7D%5Ccdot10%5E%7Bn-1%7D+%5Ccdots+a_0%5Ccdot10%5E0+a_%7B-1%7D%5Ccdot10%5E%7B-1%7D+a_%7B-2%7D%5Ccdot10%5E%7B-2%7D+%5Ccdots"></p>
<p><img src="https://latex.codecogs.com/png.latex?=%5Cunderbrace%7B%5Csum_%7Bk=0%7D%5E%7Bn%7D%20a_k%5C,10%5Ek%7D_%7B%5Ctext%7Bparte%20entera%7D%7D%20+%20%5Cunderbrace%7B%5Csum_%7Bk=1%7D%5E%7B%5Cinfty%7D%20a_%7B-k%7D%5C,10%5E%7B-k%7D%7D_%7B%5Ctext%7Bparte%20decimal%20o%20mantisa%7D%7D"></p>
</section>
<section id="otras-bases" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="otras-bases"><span class="header-section-number">3</span> Otras bases</h2>
<div class="callout callout-style-default callout-note callout-titled" title="Ejercicio">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Nota</span>Ejercicio
</div>
</div>
<div class="callout-body-container callout-body">
<p>Convertir <img src="https://latex.codecogs.com/png.latex?%5Cleft(%5Cdfrac13%5Cright)_%7B10%7D"> a base 3.</p>
</div>
</div>
<p><img src="https://latex.codecogs.com/png.latex?%5Cleft(%5Cfrac13%5Cright)_%7B(10)%7D%20=%20(0%7B,%7D1)_%7B(3)%7D"></p>
<p>la expansión termina exactamente, porque <img src="https://latex.codecogs.com/png.latex?3%5E%7B-1%7D=1/3">.</p>
<p>Para contraste, <img src="https://latex.codecogs.com/png.latex?(1/10)_%7B10%7D"> en base 3 <strong>no</strong> termina:</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cleft(%5Cfrac%7B1%7D%7B10%7D%5Cright)_%7B(10)%7D%20=%20(0%7B,%7D0%5Coverline%7B2%7D)_%7B(3)%7D"></p>
<p><strong>Alfabetos según la base:</strong></p>
<ul>
<li>Binario: <img src="https://latex.codecogs.com/png.latex?%5C%7B0,1%5C%7D"> → un dígito es un <strong>bit</strong></li>
<li>Octal: <img src="https://latex.codecogs.com/png.latex?%5C%7B0,1,%5Cldots,7%5C%7D"> → un dígito octal (byte) representa <strong>3 bits</strong></li>
<li>Hexadecimal: <img src="https://latex.codecogs.com/png.latex?%5C%7B0,1,%5Cldots,9,A,B,C,D,E,F%5C%7D"> → un dígito hexadecimal (<strong>nibble</strong>) representa <strong>4 bits</strong></li>
</ul>
<p><strong>Correspondencia binario ↔︎ octal (3 bits):</strong></p>
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: center;">Binario</th>
<th style="text-align: center;">Octal</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: center;">000</td>
<td style="text-align: center;">0</td>
</tr>
<tr class="even">
<td style="text-align: center;">001</td>
<td style="text-align: center;">1</td>
</tr>
<tr class="odd">
<td style="text-align: center;">010</td>
<td style="text-align: center;">2</td>
</tr>
<tr class="even">
<td style="text-align: center;">011</td>
<td style="text-align: center;">3</td>
</tr>
<tr class="odd">
<td style="text-align: center;">100</td>
<td style="text-align: center;">4</td>
</tr>
<tr class="even">
<td style="text-align: center;">101</td>
<td style="text-align: center;">5</td>
</tr>
<tr class="odd">
<td style="text-align: center;">110</td>
<td style="text-align: center;">6</td>
</tr>
<tr class="even">
<td style="text-align: center;">111</td>
<td style="text-align: center;">7</td>
</tr>
</tbody>
</table>
<div class="callout callout-style-default callout-tip callout-titled" title="Ejemplo — multiplicación en hexadecimal">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Ejemplo — multiplicación en hexadecimal
</div>
</div>
<div class="callout-body-container callout-body">
<p><img src="https://latex.codecogs.com/png.latex?12_%7B16%7D%20%5Ctimes%20F_%7B16%7D%20=%2010E_%7B16%7D"></p>
<p>Verificación pasando a decimal:</p>
<p><img src="https://latex.codecogs.com/png.latex?12_%7B16%7D=1%5Ccdot16+2=18%20%5Cqquad%20F_%7B16%7D=15%20%5Cqquad%2018%5Ctimes15=270"></p>
<p><img src="https://latex.codecogs.com/png.latex?270%20=%201%5Ccdot16%5E2+0%5Ccdot16+14%20%5C;%5CLongrightarrow%5C;%2010E_%7B16%7D%5C%20%5Ccheckmark"></p>
</div>
</div>
</section>
<section id="sec-def-F" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="sec-def-F"><span class="header-section-number">4</span> El conjunto 𝔽 de números de punto flotante</h2>
<p><img src="https://latex.codecogs.com/png.latex?%5Cmathbb%7BF%7D%20=%20%5C%7B%5C,0,%5C%20%5Cpm(1+f)%5C,2%5E%7B%5C,n%7D%5C,%5C%7D"></p>
<ul>
<li><img src="https://latex.codecogs.com/png.latex?n%5Cto"> <strong>exponente</strong></li>
<li><img src="https://latex.codecogs.com/png.latex?1+f%20%5Cto"> <strong>significando</strong> (mantisa)</li>
<li><img src="https://latex.codecogs.com/png.latex?%5Cdisplaystyle%20f=%5Csum_%7Bi=1%7D%5E%7Bd%7D%20b_i%5C,2%5E%7B-i%7D,%20%5Cquad%20b_i%5Cin%5C%7B0,1%5C%7D"></li>
<li><img src="https://latex.codecogs.com/png.latex?d"> se llama la <strong>precisión binaria</strong></li>
</ul>
<section id="ejemplos-de-normalización" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="ejemplos-de-normalización"><span class="header-section-number">4.1</span> Ejemplos de normalización</h3>
<p><img src="https://latex.codecogs.com/png.latex?4=(1+0)%5Ccdot2%5E2%20%5Cqquad%5Cqquad%204=(1+f)%5Ccdot2%5E1%20%5C;%5CRightarrow%5C;%201+f=2%20%5CRightarrow%20f=1%5C%20%5Ctext%7B%E2%9C%97%20(fuera%20de%20%7D%5B0,1))"></p>
<p><img src="https://latex.codecogs.com/png.latex?5=(1+x)%5Ccdot2%5E1%20%5CRightarrow%201+x=%5Ctfrac52=2%7B,%7D5%20%5CRightarrow%20x=%5Ctfrac32%5C%20%5Ctext%7B%E2%9C%97%20(fuera%20de%20%7D%5B0,1))"></p>
<p><img src="https://latex.codecogs.com/png.latex?5=(1+f)%5Ccdot2%5E2%20%5CRightarrow%201+f=%5Cfrac54%20%5CRightarrow%20f=%5Cfrac14=0%7B,%7D25=0%7B,%7D01_2%5C%20%5Ccheckmark"></p>
<div class="callout callout-style-default callout-important callout-titled" title="Por qué falla el primer intento">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Importante</span>Por qué falla el primer intento
</div>
</div>
<div class="callout-body-container callout-body">
<p>La normalización exige <img src="https://latex.codecogs.com/png.latex?1+f%5Cin%5B1,2)">; por eso el exponente correcto para 5 es <img src="https://latex.codecogs.com/png.latex?n=2">, no <img src="https://latex.codecogs.com/png.latex?n=1">.</p>
</div>
</div>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac13=(1+f)%5Ccdot2%5E%7B-1%7D%5CRightarrow%201+f=%5Cfrac23%5CRightarrow%20f=-%5Cfrac13%5C%20%5Ctext%7B%E2%9C%97%20(%7Df%3C0%5Ctext%7B)%7D"></p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac13=(1+f)%5Ccdot2%5E%7B-2%7D%5CRightarrow%201+f=%5Cfrac43%5CRightarrow%20f=%5Cfrac13%5C%20%5Ccheckmark"></p>
<p>En decimal, <img src="https://latex.codecogs.com/png.latex?f=0%7B,%7D%5Coverline%7B3%7D=%5Cdfrac%7B3%7D%7B10%7D+%5Cdfrac%7B3%7D%7B10%5E2%7D+%5Ccdots">. <strong>En binario</strong>, usando la serie geométrica:</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac13=%5Cfrac%7B1/4%7D%7B1-1/4%7D=%5Cfrac14%5Csum_%7Bk=0%7D%5E%7B%5Cinfty%7D%5Cleft(%5Cfrac14%5Cright)%5Ek=%5Csum_%7Bk=1%7D%5E%7B%5Cinfty%7D%5Cfrac%7B1%7D%7B4%5E%7Bk%7D%7D=%5Csum_%7Bk=1%7D%5E%7B%5Cinfty%7D%5Cfrac%7B1%7D%7B2%5E%7B2k%7D%7D=0%7B,%7D010101%5Cldots_2"></p>
<p>Por tanto se puede aproximar por un número de <img src="https://latex.codecogs.com/png.latex?%5Cmathbb%20%7BF%7D"> pero <img src="https://latex.codecogs.com/png.latex?%5Ctfrac13%5Cnotin%20%5Cmathbb%7BF%7D"> para ningunos <img src="https://latex.codecogs.com/png.latex?d"> y <img src="https://latex.codecogs.com/png.latex?n">.</p>
</section>
</section>
<section id="cuántos-elementos-de-𝔽-hay-por-binade" class="level2" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="cuántos-elementos-de-𝔽-hay-por-binade"><span class="header-section-number">5</span> Cuántos elementos de 𝔽 hay por binade</h2>
<p><img src="https://latex.codecogs.com/png.latex?f=%5Csum_%7Bi=1%7D%5E%7Bd%7Db_i%5C,2%5E%7B-i%7D=2%5E%7B-d%7D%5Csum_%7Bi=1%7D%5E%7Bd%7Db_i%5C,2%5E%7B%5C,d-i%7D=2%5E%7B-d%7Dz"></p>
<p><img src="https://latex.codecogs.com/png.latex?1+f%5Cin%5B1,2)%5Cquad%5Ctext%7Bpara%20%7D%20z%5Cin%5C%7B0,1,2,%5Cldots,2%5Ed-1%5C%7D"></p>
<div class="callout callout-style-default callout-important callout-titled" title="Resultado clave">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Importante</span>Resultado clave
</div>
</div>
<div class="callout-body-container callout-body">
<p>Entre <img src="https://latex.codecogs.com/png.latex?2%5En"> y <img src="https://latex.codecogs.com/png.latex?2%5E%7Bn+1%7D"> hay <img src="https://latex.codecogs.com/png.latex?2%5Ed"> números que pertenecen a <img src="https://latex.codecogs.com/png.latex?%5Cmathbb%7BF%7D">.</p>
</div>
</div>
<blockquote class="blockquote">
<p>Referencia de las notas: <code>float32/float</code> → <img src="https://latex.codecogs.com/png.latex?d=23">; <code>float64/double</code> → <img src="https://latex.codecogs.com/png.latex?d=52"> (IEEE 754).</p>
</blockquote>
<section id="caso-d0" class="level3" data-number="5.1">
<h3 data-number="5.1" class="anchored" data-anchor-id="caso-d0"><span class="header-section-number">5.1</span> Caso <img src="https://latex.codecogs.com/png.latex?d=0"></h3>
<p>Solo hay un valor de <img src="https://latex.codecogs.com/png.latex?f"> (<img src="https://latex.codecogs.com/png.latex?f=0">), así que cada binade aporta un único punto:</p>
<p><img src="https://latex.codecogs.com/png.latex?n=0:%5C%20%5Cpm(1+0)2%5E0=%5Cpm1%20%5Cqquad%20n=1:%5C%20%5Cpm2%20%5Cqquad%20n=2:%5C%20%5Cpm4%20%5Cqquad%20n=3:%5C%20%5Cpm8"></p>
<p><strong>Con <img src="https://latex.codecogs.com/png.latex?d=0">, los únicos números posibles son <img src="https://latex.codecogs.com/png.latex?%5Cpm2%5En">.</strong></p>
</section>
<section id="caso-d1" class="level3" data-number="5.2">
<h3 data-number="5.2" class="anchored" data-anchor-id="caso-d1"><span class="header-section-number">5.2</span> Caso <img src="https://latex.codecogs.com/png.latex?d=1"></h3>
<p>Con <img src="https://latex.codecogs.com/png.latex?b_1%5Cin%5C%7B0,1%5C%7D">: <img src="https://latex.codecogs.com/png.latex?1+f%5Cin%5C%7B1,%5C%203/2%5C%7D">. Tomando el valor <img src="https://latex.codecogs.com/png.latex?3/2"> como ejemplo representativo en cada exponente:</p>
<p><img src="https://latex.codecogs.com/png.latex?n=0:%5C%20%5Cpm%5Cleft(1+%5Ctfrac12%5Cright)2%5E0=%5Cpm%5Ctfrac32%20%5Cqquad%5Cqquad%20n=1:%5C%20%5Cpm%5Ctfrac32%5Ccdot2=%5Cpm3"></p>
<p><img src="https://latex.codecogs.com/png.latex?n=-1:%5C%20%5Cpm%5Ctfrac32%5Ccdot%5Ctfrac12=%5Cpm%5Ctfrac34%20%5Cqquad%5Cqquad%20n=2:%5C%20%5Cpm%5Ctfrac32%5Ccdot4=%5Cpm6%20%5Cqquad%5Cqquad%20n=-2:%5C%20%5Cpm%5Ctfrac32%5Ccdot%5Ctfrac14=%5Cpm%5Ctfrac38"></p>
</section>
<section id="simulación-de-mathbbf-en-julia" class="level3" data-number="5.3">
<h3 data-number="5.3" class="anchored" data-anchor-id="simulación-de-mathbbf-en-julia"><span class="header-section-number">5.3</span> Simulación de <img src="https://latex.codecogs.com/png.latex?%5Cmathbb%7BF%7D"> en Julia</h3>
<p><strong>Recta numérica</strong> (colores por exponente, simulación):</p>
<iframe src="notebooks/flotantes.html" width="100%" height="650px" style="border:none;">
</iframe>
<p><a href="notebooks/flotantes-codigo.html">Ver código fuente de la simulación de <img src="https://latex.codecogs.com/png.latex?%5Cmathbb%7BF%7D"></a></p>
<p><a href="notebooks/flotantes_F.jl">Descargar el código fuente la simulación de <img src="https://latex.codecogs.com/png.latex?%5Cmathbb%7BF%7D"></a></p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://arturosanjuan.xyz/cursos/numerico/introduccion/floatingpointline.webp" class="img-fluid figure-img"></p>
<figcaption>Representación de <img src="https://latex.codecogs.com/png.latex?%5Cmathbb%7BF%7D"> de Moise rushanika</figcaption>
</figure>
</div>
<div class="callout callout-style-default callout-tip callout-titled" title="Ejemplo motivador de lo que viene">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Ejemplo motivador de lo que viene
</div>
</div>
<div class="callout-body-container callout-body">
<p><img src="https://latex.codecogs.com/png.latex?0%7B,%7D1+0%7B,%7D2%5Cneq0%7B,%7D3"></p>
</div>
</div>
</section>
</section>
<section id="espaciado-dentro-de-un-binade" class="level2" data-number="6">
<h2 data-number="6" class="anchored" data-anchor-id="espaciado-dentro-de-un-binade"><span class="header-section-number">6</span> Espaciado dentro de un binade</h2>
<p>Retomando <img src="https://latex.codecogs.com/png.latex?f=2%5E%7B-d%7Dz"> con <img src="https://latex.codecogs.com/png.latex?z%5Cin%5C%7B0,%5Cldots,2%5Ed-1%5C%7D">, si <img src="https://latex.codecogs.com/png.latex?x_k=(1+2%5E%7B-d%7Dk)%5C,2%5En">:</p>
<p><img src="https://latex.codecogs.com/png.latex?x_%7Bk+1%7D-x_k=%5Cbig(1+2%5E%7B-d%7D(k+1)%5Cbig)2%5En-%5Cbig(1+2%5E%7B-d%7Dk%5Cbig)2%5En=2%5En%5C,2%5E%7B-d%7D=2%5E%7Bn-d%7D"></p>
<p><strong>— el mismo espacio; hay <img src="https://latex.codecogs.com/png.latex?2%5Ed"> números.</strong></p>
<p>El binade <strong>empieza</strong> en <img src="https://latex.codecogs.com/png.latex?f=0"> (es decir, en <img src="https://latex.codecogs.com/png.latex?2%5En">) y <strong>termina</strong> en <img src="https://latex.codecogs.com/png.latex?f_%7B%5Cmax%7D=%5Csum_%7Bi=1%7D%5E%7Bd%7D2%5E%7B-i%7D">:</p>
<p><img src="https://latex.codecogs.com/png.latex?(1+f)2%5En=%5Cbig(1+(2%5Ed-1)2%5E%7B-d%7D%5Cbig)2%5En=%5Cbig(1+1-2%5E%7B-d%7D%5Cbig)2%5En=2%5E%7B%5C,n+1%7D-2%5E%7B%5C,n-d%7D"></p>
</section>
<section id="machine-epsilon" class="level2" data-number="7">
<h2 data-number="7" class="anchored" data-anchor-id="machine-epsilon"><span class="header-section-number">7</span> Machine epsilon</h2>
<p>El número que le sigue a 1 es <img src="https://latex.codecogs.com/png.latex?1+2%5E%7B-d%7D">, entonces el <strong>épsilon de máquina</strong> es</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cvarepsilon_%7B%5Ctext%7Bmach%7D%7D=2%5E%7B-d%7D"></p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Nota
</div>
</div>
<div class="callout-body-container callout-body">
<p>En Julia, <code>eps()</code> para <code>Float64</code> da <img src="https://latex.codecogs.com/png.latex?2%5E%7B-52%7D">.</p>
</div>
</div>
<p><strong>Definimos</strong> <img src="https://latex.codecogs.com/png.latex?%5Ctext%7Bfl%7D(x)=%5Coperatorname*%7Bargmin%7D_%7By%5Cin%5Cmathbb%7BF%7D%7D%7Cx-y%7C">.</p>
<p>La distancia en cada binade <img src="https://latex.codecogs.com/png.latex?%5B2%5En,2%5E%7Bn+1%7D)"> es <img src="https://latex.codecogs.com/png.latex?2%5E%7Bn-d%7D=2%5En%5Cvarepsilon_%7B%5Ctext%7Bmach%7D%7D">.</p>
<p>Cada número real <img src="https://latex.codecogs.com/png.latex?x"> está a una distancia a lo más</p>
<p><img src="https://latex.codecogs.com/png.latex?2%5E%7B%5C,n-d-1%7D=%5Cfrac%7B2%5E%7Bn%7D%5Cvarepsilon_%7B%5Ctext%7Bmach%7D%7D%7D%7B2%7D%5Cqquad%5Ctext%7Bde%20%7D%5Cmathbb%7BF%7D,%20%5Cqquad%5Ctext%7Bes%20decir,%7D%5Cqquad%20%7C%5Ctext%7Bfl%7D(x)-x%7C%5Cle2%5E%7B%5C,n-d-1%7D"></p>
</section>
<section id="de-error-absoluto-a-error-relativo" class="level2" data-number="8">
<h2 data-number="8" class="anchored" data-anchor-id="de-error-absoluto-a-error-relativo"><span class="header-section-number">8</span> De error absoluto a error relativo</h2>
<p>Al dividir por <img src="https://latex.codecogs.com/png.latex?%7Cx%7C%5Cge2%5En">:</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac%7B%7C%5Ctext%7Bfl%7D(x)-x%7C%7D%7B%7Cx%7C%7D%5Cle%5Cfrac12%5C,%5Cvarepsilon_%7B%5Ctext%7Bmach%7D%7D"></p>
<p><img src="https://latex.codecogs.com/png.latex?%7C%5Ctext%7Bfl%7D(x)-x%7C%5Cle%5Cfrac12%5C,%5Cvarepsilon_%7B%5Ctext%7Bmach%7D%7D%5C,%7Cx%7C"></p>
<p><img src="https://latex.codecogs.com/png.latex?%5Ctext%7Bfl%7D(x)=x+%5Cfrac12%5C,%5Cvarepsilon_%7B%5Ctext%7Bmach%7D%7D%5C,%7Cx%7C=x%5Cleft(1+%5Cfrac12%5C,%5Cvarepsilon_%7B%5Ctext%7Bmach%7D%7D%5C,%5Coperatorname%7Bsgn%7D(x)%5Cright)=x(1+%5Cepsilon)%5Cquad%5Ctext%7Bcon%20%7D%7C%5Cepsilon%7C%5Cle%5Ctfrac12%5Cvarepsilon_%7B%5Ctext%7Bmach%7D%7D"></p>
<div class="callout callout-style-default callout-important callout-titled" title="Pregunta abierta de las notas">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Importante</span>Pregunta abierta de las notas
</div>
</div>
<div class="callout-body-container callout-body">
<p>¿Qué quiere decir que el error absoluto puede ser grande y el relativo no?</p>
</div>
</div>
</section>
<section id="precisión-y-exactitud" class="level2" data-number="9">
<h2 data-number="9" class="anchored" data-anchor-id="precisión-y-exactitud"><span class="header-section-number">9</span> Precisión y exactitud</h2>
<p>Si expresamos</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cpm(1+f)%5C,2%5En%20=%20%5Cpm%5Cleft(1+%5Csum_%7Bi=1%7D%5E%7Bd%7D%20b_i%5C,2%5E%7B-i%7D%5Cright)2%5En"></p>
<p>en base 10, se convierte en</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cpm(b_0+f_%7B10%7D)%5C,10%5En%20=%20%5Cpm%5Cleft(b_0+%5Csum_%7Bi=1%7D%5E%7Bd%7D%20b_i%5C,10%5E%7B-i%7D%5Cright)10%5En"></p>
<p>donde cada <img src="https://latex.codecogs.com/png.latex?b_i%5Cin%5C%7B0,%5Cldots,9%5C%7D"> y <img src="https://latex.codecogs.com/png.latex?b_0%5Cneq0">. Esto no es otra cosa que la <strong>notación científica</strong>, con <img src="https://latex.codecogs.com/png.latex?d+1"> cifras significativas.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Ejemplo — constante de Planck">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Nota</span>Ejemplo — constante de Planck
</div>
</div>
<div class="callout-body-container callout-body">
<p><img src="https://latex.codecogs.com/png.latex?h%20=%206.626068%5Ctimes10%5E%7B-34%7D%5C%20%5Cmathrm%7Bm%5E2%5C,kg/s%7D"></p>
<p>Supongamos que ajustamos el último dígito de 8 a 9. Entonces el cambio relativo es</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac%7B%7C%5Ctext%7Bvalor%20inicial%7D-%5Ctext%7Bvalor%20final%7D%7C%7D%7B%7C%5Ctext%7Bvalor%20inicial%7D%7C%7D=%5Cfrac%7B0%7B,%7D000001%5Ctimes10%5E%7B-34%7D%7D%7B6%7B,%7D626068%5Ctimes10%5E%7B-34%7D%7D%5Capprox1%7B,%7D51%5Ctimes10%5E%7B-7%7D"></p>
<p>Decimos entonces que la constante está dada con <strong>7 dígitos de precisión</strong>.</p>
</div>
</div>
<p><strong>La precisión</strong> de un número flotante son los <img src="https://latex.codecogs.com/png.latex?d"> dígitos binarios. <strong>La exactitud</strong> es qué tan lejos está la aproximación del resultado.</p>
<p>Si <img src="https://latex.codecogs.com/png.latex?%5Ctilde%7Bx%7D"> es la aproximación de <img src="https://latex.codecogs.com/png.latex?x">:</p>
<ul>
<li><strong>Exactitud absoluta:</strong> <img src="https://latex.codecogs.com/png.latex?%7C%5Ctilde%7Bx%7D-x%7C"> — mismas unidades que <img src="https://latex.codecogs.com/png.latex?x">.</li>
<li><strong>Exactitud relativa:</strong> <img src="https://latex.codecogs.com/png.latex?%5Cdfrac%7B%7C%5Ctilde%7Bx%7D-x%7C%7D%7B%7Cx%7C%7D"> — adimensional.</li>
</ul>
<p>Por ejemplo, si la exactitud de la aproximación anterior es <img src="https://latex.codecogs.com/png.latex?1%7B,%7D51%5Ctimes10%5E%7B-7%7D=0%7B,%7D0000001%5Cunderbrace%7B51%7D_%7B%5Ctext%7B7%20cifras%20signif.%7D%7D">, el entero más cercano a</p>
<p><img src="https://latex.codecogs.com/png.latex?-%5Clog_%7B10%7D%5Cleft%7C%5Cfrac%7B%5Ctilde%7Bx%7D-x%7D%7Bx%7D%5Cright%7C"></p>
<p>da la <strong>“cantidad de dígitos de exactitud”</strong>, sin necesidad de aproximarlo al entero:</p>
<p><img src="https://latex.codecogs.com/png.latex?-%5Clog_%7B10%7D(1%7B,%7D51%5Ctimes10%5E%7B-7%7D)%20=%20-%5Clog_%7B10%7D(1%7B,%7D51)+7%20%5Capprox%206%7B,%7D82"></p>
<p><em>(el logaritmo cuenta esa cadena inicial de ceros).</em> Ejemplo clásico: <img src="https://latex.codecogs.com/png.latex?%5Crho=22/7"> frente a <img src="https://latex.codecogs.com/png.latex?%5Cpi">.</p>
<section id="el-estándar-ieee-754" class="level3" data-number="9.1">
<h3 data-number="9.1" class="anchored" data-anchor-id="el-estándar-ieee-754"><span class="header-section-number">9.1</span> El estándar IEEE 754</h3>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Tipo</th>
<th><img src="https://latex.codecogs.com/png.latex?d"> (bits de significando)</th>
<th><img src="https://latex.codecogs.com/png.latex?n"> (bits de exponente)</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>Float32</code> (precisión sencilla)</td>
<td>23</td>
<td>8</td>
</tr>
<tr class="even">
<td><code>Float64</code> (precisión doble)</td>
<td>52</td>
<td>11</td>
</tr>
</tbody>
</table>
<p>Con las funciones <code>sign</code>, <code>exponent</code> y <code>significand</code> podemos extraer las partes de un <img src="https://latex.codecogs.com/png.latex?x%5Cin%5Cmathbb%7BF%7D">.</p>
</section>
</section>
<section id="aritmética-de-máquina" class="level2" data-number="10">
<h2 data-number="10" class="anchored" data-anchor-id="aritmética-de-máquina"><span class="header-section-number">10</span> Aritmética de máquina</h2>
<p>La aritmética se calcula de tal manera que si <img src="https://latex.codecogs.com/png.latex?x,y%5Cin%5Cmathbb%7BF%7D">, entonces <img src="https://latex.codecogs.com/png.latex?x%5Coplus%20y%5Cin%5Cmathbb%7BF%7D"> de tal manera que</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cfrac%7B%7C(x%5Coplus%20y)-(x+y)%7C%7D%7B%7Cx+y%7C%7D%5Cle%5Cfrac12%5C,%5Cvarepsilon_%7B%5Ctext%7Bmach%7D%7D"></p>
<div class="callout callout-style-default callout-tip callout-titled" title="Ejemplos">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Ejemplos
</div>
</div>
<div class="callout-body-container callout-body">
<p><img src="https://latex.codecogs.com/png.latex?(1%7B,%7D0+%5Ctexttt%7Beps()%7D/2)-1%20=%200"></p>
<p><img src="https://latex.codecogs.com/png.latex?1%7B,%7D0+(%5Ctexttt%7Beps()%7D/2-1)%20%5Cneq%200"></p>
<p><img src="https://latex.codecogs.com/png.latex?0%7B,%7D1+0%7B,%7D2%5Cneq0%7B,%7D3"></p>
</div>
</div>
<p>Estos ejemplos muestran que la <strong>ley asociativa de la suma se rompe</strong> en aritmética de punto flotante: el orden en que se agrupan las operaciones puede cambiar el resultado.</p>
</section>
<section id="tarea" class="level2" data-number="11">
<h2 data-number="11" class="anchored" data-anchor-id="tarea"><span class="header-section-number">11</span> Tarea</h2>
<p>Resolver <strong>todos los ejercicios de la sección 1.1.4</strong> (“Exercises”) de <em>Fundamentals of Numerical Computation</em>, disponibles en <a href="https://fncbook.com/julia/floating-point/#exercises" class="uri">https://fncbook.com/julia/floating-point/#exercises</a>: los ejercicios 1.1.1 a 1.1.5, sobre el conjunto <img src="https://latex.codecogs.com/png.latex?%5Cmathbb%7BF%7D">, la equivalencia de las cotas de error, aproximaciones racionales a <img src="https://latex.codecogs.com/png.latex?%5Cpi">, precisión sencilla IEEE 754, y <code>nextfloat</code>.</p>


</section>

 ]]></description>
  <guid>https://arturosanjuan.xyz/cursos/numerico/introduccion/</guid>
  <pubDate>Fri, 07 Aug 2026 05:00:00 GMT</pubDate>
</item>
</channel>
</rss>
