Last active
January 9, 2021 11:42
-
-
Save Asmilex/c631446304cfbc029055d0951a8967cc to your computer and use it in GitHub Desktop.
Calculadora para ecuaciones cúbicas y cuárticas
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 98, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import sympy as sym\n", | |
"x = sym.Symbol('x')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 99, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"n = 4\n", | |
"\n", | |
"b = -8\n", | |
"c = 24\n", | |
"d = -28\n", | |
"e = 11\n", | |
"\n", | |
"beta = b/n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 100, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def f(x):\n", | |
" return x**4 + b*x**3 + c*x**2 + d*x + e " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 101, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"1.0*x**4 + 4.0*x + 3.0" | |
], | |
"text/latex": "$\\displaystyle 1.0 x^{4} + 4.0 x + 3.0$" | |
}, | |
"metadata": {}, | |
"execution_count": 101 | |
} | |
], | |
"source": [ | |
"def red_f(x):\n", | |
" return f(x-beta).simplify()\n", | |
"red_f(x)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 102, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(0.0, 4.00000000000000, 3.00000000000000)" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 102 | |
} | |
], | |
"source": [ | |
"p = sym.poly_from_expr(red_f(x), x)[0].nth(2)\n", | |
"q = sym.poly_from_expr(red_f(x), x)[0].nth(1)\n", | |
"r = sym.poly_from_expr(red_f(x), x)[0].nth(0)\n", | |
"\n", | |
"p, q, r" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 103, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Queremos poner el polinomio anterior de la forma \n\tx^4 + px^2 + qx + r = (x^2 + kx + l)(x^2 - kx + m)\n\nPretendemos descomponer, asi que debemos resolver el sistema \n\t-k^2(l + m) = 0.0 \n\tk(m - l) = 4.00000000000000 \n\tlm = 3.00000000000000\n\neste sistema nos dice que \n\tm = (k**3 + pk + q) / (2k) \n\tl = (k**3 + pk - q) / (2k)\n(Nota: cambiar lo que vale p y q a mano donde sea necesario)\n\nPor lo que, sustituyendo, \n\tk**6 + 2pk**4 + (p**2 - 4r)k**2 - q**2 = 0 Así que k**2 es solución de la siguiente ecuación (igualando a 0):\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"x**3 - 12.0*x - 16.0" | |
], | |
"text/latex": "$\\displaystyle x^{3} - 12.0 x - 16.0$" | |
}, | |
"metadata": {}, | |
"execution_count": 103 | |
} | |
], | |
"source": [ | |
"print(\"Queremos poner el polinomio anterior de la forma \\n\\tx^4 + px^2 + qx + r = (x^2 + kx + l)(x^2 - kx + m)\")\n", | |
"print(\"\\nPretendemos descomponer, asi que debemos resolver el sistema \\n\\t-k^2(l + m) =\", p, \"\\n\\tk(m - l) =\", q, \"\\n\\tlm =\", r)\n", | |
"print(\"\\neste sistema nos dice que \\n\\tm = (k**3 + pk + q) / (2k) \\n\\tl = (k**3 + pk - q) / (2k)\\n(Nota: cambiar lo que vale p y q a mano donde sea necesario)\")\n", | |
"\n", | |
"print(\"\\nPor lo que, sustituyendo, \\n\\tk**6 + 2pk**4 + (p**2 - 4r)k**2 - q**2 = 0 Así que k**2 es solución de la siguiente ecuación (igualando a 0):\")\n", | |
"\n", | |
"def resol_f(x):\n", | |
" return (x**3 + 2*p*x**2 +(p**2 - 4*r)*x - q**2).simplify()\n", | |
"\n", | |
"\n", | |
"\n", | |
"resol_f(x)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 104, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Aplicamos ahora el método de las ecuaciones cúbicas. Si quieres ver la solución con más detalle, ve al archivo llamado Cúbicas.ipynb y pon ahí los coeficientes del anterior polinomio. De todas formas, aquí se da una solución\n", | |
"\n", | |
"\n", | |
"beta_ = sym.poly_from_expr(resol_f(x), x)[0].nth(2)/3" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 105, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"x**3 - 12.0*x - 16.0" | |
], | |
"text/latex": "$\\displaystyle x^{3} - 12.0 x - 16.0$" | |
}, | |
"metadata": {}, | |
"execution_count": 105 | |
} | |
], | |
"source": [ | |
"def red_resol_f(x):\n", | |
" return resol_f(x-beta_).simplify()\n", | |
"red_resol_f(x)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 106, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Debemos tomar un valor válido para k de forma que k^2 = una raíz de la cúbica anterior. Ve al anterior notebook y busca aquella raíz más cómoda, y pega su resultado en la casilla de abajo\n\nk^2 = raíz \t=>\t k = sqrt(raíz de la cúbica)\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"2" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 106 | |
} | |
], | |
"source": [ | |
"print(\"Debemos tomar un valor válido para k de forma que k^2 = una raíz de la cúbica anterior. Ve al anterior notebook y busca aquella raíz más cómoda, y pega su resultado en la casilla de abajo\")\n", | |
"\n", | |
"print(\"\\nk^2 = raíz \\t=>\\t k = sqrt(raíz de la cúbica)\")\n", | |
"k = 2\n", | |
"\n", | |
"k" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 107, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Por lo anterior, sabemos que l y m valen lo siguiente:\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(1.00000000000000, 3.00000000000000)" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 107 | |
} | |
], | |
"source": [ | |
"print(\"Por lo anterior, sabemos que l y m valen lo siguiente:\")\n", | |
"m = (k**3 + p*k + q) / (2*k)\n", | |
"l = (k**3 + p*k - q) / (2*k)\n", | |
"\n", | |
"l, m" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 108, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Por tanto, ahora sabemos que el polinomio\n\t 1.0*x**4 + 4.0*x + 3.0 = ( x**2 + 2*x + 1.0 ) * ( x**2 - 2*x + 3.0 )\nSus raíces son \n\t [-1.00000000000000] [1.0 - 1.4142135623731*I, 1.0 + 1.4142135623731*I]\nPor lo que solo queda sacara las raíces de nuestra ecuación original, para lo cual hacemos\n\talpha_i = Beta_i -b/4\nFinalmente estas son las soluciones:\n\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[1.00000000000000, 3.0 - 1.4142135623731*I, 3.0 + 1.4142135623731*I]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 108 | |
} | |
], | |
"source": [ | |
"\n", | |
"#Ahora podemos declarar los polinomios\n", | |
"\n", | |
"def pol_1(x):\n", | |
" return x**2 + k*x + l\n", | |
"def pol_2(x):\n", | |
" return x**2 - k*x + m\n", | |
"\n", | |
"print(\"Por tanto, ahora sabemos que el polinomio\\n\\t\", red_f(x), \" = (\", pol_1(x), \") * (\", pol_2(x), \")\")\n", | |
"\n", | |
"raices1 = sym.solve(pol_1(x),x)\n", | |
"raices2 = sym.solve(pol_2(x),x)\n", | |
"\n", | |
"print(\"Sus raíces son \\n\\t\", raices1, raices2)\n", | |
"print(\"Por lo que solo queda sacara las raíces de nuestra ecuación original, para lo cual hacemos\\n\\talpha_i = Beta_i -b/4\\nFinalmente estas son las soluciones:\\n\")\n", | |
"\n", | |
"raices\n", | |
"raices = raices1 \n", | |
"raices.extend(raices2)\n", | |
"\n", | |
"raices = [i - b/4 for i in raices]\n", | |
"raices" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3.7.0 32-bit", | |
"metadata": { | |
"interpreter": { | |
"hash": "ca88bab9ce8d9e4c3717e0c654e4f59b1c36aef4cbef335c62f6a9b2c686e4f2" | |
} | |
} | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.7.0-final" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment