<jupyter_start><jupyter_text>Solución de ecuacionesPython en Jupyter NotebookCreado por <NAME> para el curso de Métodos Numéricos    .border {        display: inline-block;        border: solid 1px rgba(204, 204, 204, 0.4);        border-bottom-color: rgba(187, 187, 187, 0.4);        border-radius: 3px;        box-shadow: inset 0 -1px 0 rgba(187, 187, 187, 0.4);        background-color: inherit !important;        vertical-align: middle;        color: inherit !important;        font-size: 11px;        padding: 3px 5px;        margin: 0 2px;    } Raíces de ecuaciones Las raíces o ceros de una función continua, son los valores de $\color{a78a4d}{x}$ tal que $\color{a78a4d}{f(x) = 0}$; lo que es equivalente a resolver ecuaciones del tipo $\color{a78a4d}{g(x)=h(x)}$, ya que esta ecuación puede reescribirse como $\color{a78a4d}{f(x)=h(x)-g(x)=0}$. Los métodos numéricos de búsqueda de raíces son algoritmos que iteran sobre una solución aproximada, produciendo una secuencia de números que, con suerte, convergen hacia la raíz como límite. Agenda1. Tipos de ecuaciones1. Linealidad1. Puntos periódicos1. Solución de ecuaciones no lineales<jupyter_code># Importar módulos al cuaderno de jupyter
import math as m 
import numpy as np
import pylab as plt<jupyter_output><empty_output><jupyter_text>1. Tipos de Ecuaciones---En matemáticas una ecuación es una igualdad entre dos expresiones, separadas por el signo igual; tal que en las expresiones miembro aparecen variables independientes relacionadas mediante operaciones matemáticas.\begin{align}\tag{1} f(x_1, x_2, ... , x_n) &= g(x_1, x_2, ... , x_n) \\\tag{2} f(x_1, x_2, ... , x_n) &= 0 \\\end{align} a. Ecuaciones de una variableUna simplificación de $(2)$ sucede cuando solo existe una variable independiente y la ecuación se puede reescribir como:\begin{align}\tag{3} f(x) & = 0 \\\end{align} b. Ecuaciones algebraicas o polinómicasUna simplificación adicional de de $(2)$ sucede cuando sus miembros incluyen unicamente sumas y multiplicaciones de la variable independiente; en cuyo caso la expresión se conoce como polinomio y se puede reescribir como la suma de $\color{a78a4d}{n+1}$ monomios cuyos coeficientes o parámetros $\color{a78a4d}{a_0, a_1, a_2, ... , a_n}$ son constantes en el dominio de los reales:\begin{align}\tag{4} f(x) &= 0 \\\tag{5} f(x) &= \sum_{1}^n a_i x^i \\\tag{6} a_0 + a_1 x + a_2 x^2 + ... + a_n x^n & = 0, \quad a_n \neq 0 \\\end{align}> **NOTA:** El número n se denomina grado de la ecuación y es igual al numero raíces o ceros que son solución de la igualdad; estas soluciones pertenecen al dominio de los complejos y pueden ser reales o imaginarias; en el caso de soluciones imaginarias se dan en parejas de complejos conjugados. c. Ecuaciones trascendentesSi la ecuación no puede expresarse o reducirse a un polinomio como las ecuaciones algebraicas se denominan ecuaciones trascendentes y su resolución va más allá del álgebra (trascienden el álgebra); las ecuaciones trascendentes más simples son las trigonométricas, logarítmicas y exponenciales sencillas.> **NOTA:** La solución para x de estas ecuaciones puede no ser trivial y suelen ser objeto de estudio de los métodos numéricos.<jupyter_code>x = np.linspace(-20, 20, 1024, endpoint=True)
y1 = (-1/1e7)*(x**7 - 350*x**5 + 30_625*x**3 - 562_500*x)
y2 = np.sin(x)/x

# Gráficas
#-------------------
fig, ax = plt.subplots(1, 2)
fig.set_size_inches(16, 4)
fig.suptitle('Raíces de funciones algebraicas y trascendentes'.upper(), fontsize=14, fontweight="bold")

# Gráficas 1
ax[0].axhline(y = 0, linewidth=1, color="#ccc")
ax[0].plot(x, y1, label="$y_1(x)$")

ax[0].set_xlim(-20, 20)
ax[0].set_ylim(-1.5, 1.5)

ax[0].set_title("Función polinómica", fontsize=8)
ax[0].set_xlabel("Variable independiente")
ax[0].set_ylabel("variable dependiente")
ax[0].legend()

# Gráficas 2
ax[1].axhline(y = 0, linewidth=1, color="#ccc")
ax[1].plot(x, y2, label="$y_2(x)$")

ax[1].set_xlim(-20, 20)
ax[1].set_ylim(-1.5, 1.5)

ax[1].set_title("Función trascendentes", fontsize=8)
ax[1].set_xlabel("Variable independiente")
ax[1].set_ylabel("variable dependiente")
ax[1].legend()

plt.show()<jupyter_output><empty_output><jupyter_text>2. Linealidad--- a. Ecuaciones linealesUn caso particular de las ecuaciones algebraicas sucede cuando solo los dos primeros coeficientes son distintos de cero y la solución para $\color{a78a4d}{x}$ es única y trivial.\begin{align}\tag{7} a_0 + a_1 x & = 0, \quad a_1 \neq 0 \\\tag{8} x & = \frac{-a_0}{a_1} \\\end{align} b. Ecuaciones cuadráticasUn caso particular de las ecuaciones algebraicas sucede cuando solo los tres primeros coeficientes son distintos de cero y las 2 soluciones para $\color{a78a4d}{x}$ es un par de complejos conjugados.\begin{align}\tag{9} a_0 + a_1 x + a_2 x^2 & = 0, \quad a_1 \neq 0 \\\tag{10} x_1, x_2 & = \frac{-a_1 \pm \sqrt{a_1^2 - 4 a_2 a_0 }}{2 a_2} \\\end{align} b. Ecuaciones de orden superiorSucede que el número de soluciones es proporcional al orden de la ecuación; cuando más de tres coeficientes son distintos de cero en las ecuaciones algebraicas la solución puede ser más compleja; aunque la solución algebraica es posible debido a que existen métodos matemáticos para acotar la solución.<jupyter_code>y3 = (x - 10)
y4 = (x - 10) * (x + 10)
y5 = (x + 10) * (x - 10) * x 

# Gráficas
#-------------------
fig, ax = plt.subplots(1, 3)
fig.set_size_inches(16, 4)
fig.suptitle('Raíces de funciones algebraicas'.upper(), fontsize=14, fontweight="bold")

# Gráficas 1
ax[0].axhline(y = 0, linewidth=1.0, color="#ccc")
ax[0].plot(x, y3, label="$y_1(x)$")
ax[0].set_title("Función líneal", fontsize=8)
ax[0].set_xlabel("Variable independiente")
ax[0].set_ylabel("variable dependiente")
ax[0].legend()

# Gráficas 2
ax[1].axhline(y = 0, linewidth=1, color="#ccc")
ax[1].plot(x, y4, label="$y_2(x)$")
ax[1].set_title("Función cuadrática", fontsize=8)
ax[1].set_xlabel("Variable independiente")
ax[1].legend()

# Gráficas 3
ax[2].axhline(y = 0, linewidth=1, color="#ccc")
ax[2].plot(x, y5, label="$y_3(x)$")
ax[2].set_title("Función cubica", fontsize=8)
ax[2].set_xlabel("Variable independiente")
ax[2].legend()

plt.show()<jupyter_output><empty_output><jupyter_text>3. Puntos periódicos---En el estudio de sistemas dinámicos, un punto periódico de una función iterada es el punto al cual el sistema retorna luego de un cierto número de iteraciones, al cabo de un cierto tiempo.En matemáticas, los puntos periódicos vuelven al mismo valor después de un número finito de iteraciones de la función y un caso particular de ellos son los puntos fijos, donde el periodo $\color{a78a4d}{T=1}$.\begin{align}\tag{11} (f:x \to x) \wedge (p, \text{ es periódico}) \Rightarrow \exists \ n : f_n(p)=p\\\end{align} a. Punto fijoEn matemáticas, un punto fijo de una función real es un punto cuya imagen producida por la función es él mismo; esto que significa que si $\color{a78a4d}{p}$ es un número real, $\color{a78a4d}{p}$ es un punto fijo de la función $\color{a78a4d}{f(x)}$ si y sólo si $\color{a78a4d}{p = f(p)}$  > **NOTA:** En la gráfica (p, f(p)) pertenece a la recta $y=x$  Ejemplo: Puntos fijos de una función---Sea la función $f(x) = x^2$ los puntos fijos son números reales p tal que $p = p^2$; entonces 0 y 1 son los puntos fijos de $f(x)$, porque $f(0) = 0$ y $f(1) = 1$.<jupyter_code>x = np.linspace(-2, 2, 256, endpoint=True)
plt.figure(figsize=(5, 5))
plt.plot(x, x**2, linewidth=2, color="#00F" )
plt.plot(x, x, linestyle="--", color="gray")
plt.plot(0, 0, marker="o", markersize=7, markeredgecolor="black", color="#fc0")
plt.plot(1, 1, marker="o", markersize=7, markeredgecolor="black", color="#fc0")
plt.xlim(x.min(), x.max())
plt.ylim(-1, 3)
plt.text(-0.7, 2, f"Puntos fijos\n   $f(x)=x^2$", fontsize=17)
plt.grid()
plt.show()<jupyter_output><empty_output><jupyter_text>4. Solución de ecuaciones no lineales---Solucionar una ecuación es encontrar las raíces o ceros de una ecuación y aunque en algunos casos los métodos analíticos o exactos son posibles y sencillos; en otros casos es necesario recurrir a métodos numéricos. a. Métodos Numéricos Los métodos de la bisección y del punto fijo son los primeros métodos numéricos que se utilizaron para resolver ecuaciones algebraicas y trascendentes; estos representan el punto de partida para otros métodos más eficientes; del primer método o de la bisección derivan los métodos cerrados que se aproximan a la solución reduciendo intervalos y del segundo método o del punto fijo se derivan los métodos abiertos que se aproximan a la solución mediante una función auxiliar.Los métodos cerrados requieren dos valores iniciales que estén a ambos lados de la raíz, para acotarla. Este “acotamiento” se mantiene en tanto se aproxima a la solución; así, dichas técnicas son siempre convergentes; los métodos abiertos solo requieren de un valor, para aproximarse a la solución a través de la función auxiliar y son generalmente más rápidos; sin embargo, una mayor rapidez de convergencia se da cambio de una estabilidad menor.   b. Selección de un método numéricoPara seleccionar un método numérico que nos permita encontrar las raíces de una ecuación por aproximaciones sucesivas se requiere conocer información preliminar como:* Tipo de ecuación.* Número y tipo de las posibles raíces de la ecuación.* Información del dominio, rango, continuidad, derivadas, intervalos de crecimiento.* Ventajas y limitaciones que aporta cada algoritmo a la solución del problema.* Semilla o valoración inicial de la solución. c. Consideraciones generalesDel [teorema del valor intermedio](https://es.wikipedia.org/wiki/Teorema_del_valor_intermedio) se tiene que si $\color{a78a4d}{f(x)}$ es continua en un intervalo $\color{a78a4d}{(a, b)}$ y cambia de signo en ese intervalo existe al menos una raíz real de la ecuación asociada en ese intervalo; sin embargo, existen consideraciones particulares para cada uno de los tipos de ecuaciones estudiadas. d. Ecuaciones algebraicas* El número de raíces es igual al grado del polinomio asociado; por lo tanto, en una ecuación de grado $\color{a78a4d}{n}$, hay $\color{a78a4d}{n}$ raíces reales o complejas.* Las raíces pueden ser reales o complejas conjugadas; por lo tanto, si el grado del polinomio es impar hay al menos una raíz real.* La posible existencia de raíces múltiples complica el problema; pero si $\color{a78a4d}{f(x)}$ es derivable en $\color{a78a4d}{(a, b)}$ y $\color{a78a4d}{f'(x)}$ no cambia de signo en el ese intervalo, la raíz en ese intervalo es única.* Existen métodos como la [regla de Descartes](https://es.wikipedia.org/wiki/Regla_de_los_signos_de_Descartes), el [teorema de Budan]() y [teorema de Sturm](https://es.wikipedia.org/wiki/Teorema_de_Sturm) que nos permiten acotar convenientemente las raíces del polinomio. e. Ecuaciones trascendentes* Estas ecuaciones pueden tener cualquier número de posibles soluciones.* Pueden tener ninguna, una o más raíces en un intervalo.* Garantizar la existencia y unicidad de soluciones en estas ecuaciones es difícil de determinar y existe una mayor variedad de casos y comportamientos.* Pueden tener múltiples raíces, donde tanto la función $\color{a78a4d}{f(x)}$ como su derivada $\color{a78a4d}{f'(x)}$ son iguales a cero.* Algunas ecuaciones no pueden resolverse por métodos numéricos aún con un número muy grande de iteraciones.<jupyter_code>x = np.linspace(-3, 6, 256, endpoint=True)
y6 = np.exp(3*x - 12) + x * np.cos(3*x) - x**2 + 7.15

# Gráficas
#-------------------
fig, ax = plt.subplots(1, 1)
fig.set_size_inches(16, 4)
fig.suptitle('Búsqueda de raíces en funciones no lineales'.upper(), fontsize=14, fontweight="bold")

# Gráficas 1
ax.axhline(y = 0, linewidth=1, color="#ccc")
ax.plot(x, y6, label="$y_1(x)$")

ax.set_xlim(-3, 6)
ax.set_ylim(-11, 8)

ax.set_title("Función trascendente", fontsize=8)
ax.set_xlabel("Variable independiente")
ax.set_ylabel("variable dependiente")
ax.legend()

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12090129477047251, 'fraction_numerical': 0.03228518580797041, 'mean_word_length': 4.859605911330049, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 25, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '505690', 'license': 'MIT', 'n_tokens_mistral': 4580, 'n_tokens_neox': 4363, 'n_words': 1469, 'path': 'Jupyter/21_Ecuaciones.ipynb', 'repo_name': 'GiancarloBenavides/Metodos-Numericos', 'size': '11903'}