En este artículo voy a mostrar cómo resolver un ejercicio del tipo:
Ejercicio
- Dados los polinomios y . :
- Divide entre
- Calcula el valor numérico de en
- Factoriza:
- Resuelve la ecuación:
usando pythontex y el paquete polynom. La idea es crear una plantilla en formato LyX/LaTeX que permita crear y resolver cualquier ejercicio de ese tipo independientemente de los polinomios que pasemos como argumentos. Al final de este artículo tienes un enlace que te permite descargarla.
Con pythontex vamos a poder hacer el ejercicio parametrizado. Es decir, podemos obtener la solución de cualquier ejercicio de características similares al anterior. La parametrización realizada consiste en que en el código pyhton del inicio tendremos que definir:
#valores que podemos modificar #definimos los polinomios con los operar para el primer ejercicio p=8*x**3+4*x**2+1 q=3*x**2-1 #número en el que calcular el valor numérico #se trata de una fracción vn=Rational(-1,2) #establecemos las raíces (enteras) del polinomio a factorizar del 2º ejercicio raices=[8,1,-2,2,3,4]
- Polinomios y del primer ejercicio y número en el que calcular el valor numérico.
- Raíces del segundo polinomio. El ejercicio está preparado para raíces enteras incluyendo el . En ese caso, si el es una raíz, primero saca factor común. La factorización se realiza por el método de Ruffini.
Una vez introducidos los valores anteriores, pythontex se encarga de poner los polinomios en el enunciado a partir de los datos que hemos introducido y de hallar la solución de ejercicio.
El paquete polynom se usa para hacer las divisiones de polinomios a partir de los polinomios y raíces que se le pasan como argumento. De él uso los comandos:
- \polylongdivpara hacer la división de polinomios del primer ejercicio.
- \polyhornerschemepara hacer la división por Ruffini.
La solución obtenida del ejercicio con los datos que aparecen al inicio es:
El código python del fichero es:
\begin{sympycode} x=var('x') #valores que podemos modificar #definimos los polinomios con los operar para el primer ejercicio p=8*x**3+4*x**2+1 q=3*x**2-1 #número en el que calcular el valor numérico #se trata de una fracción vn=Rational(-1,2) #establecemos las raíces (enteras) del polinomio a factorizar del 2º ejercicio raices=[8,1,-2,2,3,4] #comenzamos a hacer las "operaciones" #construyo mis polinomios a partir de las raíces anteriores #el primero (pf) el polinomio a factorizar #el segundo (pfaux) con término independiente distinto de cero (para poder aplicar Ruffini) pf=pfaux=1 for i in raices: pf=pf*(x-i) if i != 0: pfaux= pfaux*(x-i) #Los expando pf=expand(pf) pfaux=expand(pfaux) #polinomio con las raíces igual a 0 pfx=simplify(pf/pfaux) #Función que si tenemos raíces iguales a 0 discrimina el #polinomio a factorizar y el texto a mostrar def impTexto(pol): if pol==1: print("Como su término independiente es distinto de $0$ no podemos sacar $x$ factor común:\n") print(r"$$p(x)="+latex(pfaux)+"$$") else: print("Como no tiene término independiente podemos sacar factor común y por tanto:\n") print(r"$$p(x)="+latex(pfx)+"\cdot"+"("+latex(pfaux)+")$$\n") print("El polinomio que ahora debemos factorizar es:\n") print(r"$$q(x)="+latex(pfaux)+"$$") #Función que obtiene una división por Ruffini #uso la función polyhornerscheme del paquete polynom def divRuffini(r,pol): div=x-r paux=latex(pol) cadena=r'\polyhornerscheme[x='+str(r)+',resultleftrule=true,resultbottomrule=true,resultstyle=\color{blue}]{'+ paux+ '}' print(cadena) #Función para hacer todos los pasos de Ruffini #ordeno las raíces de menor a mayor a partir del valor absoluto #se puede hacer más fácil a partir de la lista de raíces, pero es para que se conozca esa función def factR(pol): for i in sorted(real_roots(pol),key=abs): divRuffini(i,pol) pol=quo(pol,x-i,domain=QQ) print('\n') #Función que obtiene la división Euclidea de dos polinomios #uso polylongdiv del paquete de LateX polynom def divPol(dividendo,divisor): cadena=r'\polylongdiv[style=D]{'+latex(dividendo)+'}{'+latex(divisor)+ '}' print(cadena) \end{sympycode}