mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Sample sagews file, as requested
This commit is contained in:
		
							
								
								
									
										136
									
								
								samples/Sage/polinomios.sagews
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								samples/Sage/polinomios.sagews
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,136 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # | ||||
| #   Funciones en Python/Sage para el trabajo con polinomios con una | ||||
| #   incógnita (x). | ||||
| # | ||||
| #   Copyright (C) 2014-2015, David Abián <davidabian [at] davidabian.com> | ||||
| # | ||||
| #   This program is free software: you can redistribute it and/or modify it | ||||
| #   under the terms of the GNU General Public License as published by the Free | ||||
| #   Software Foundation, either version 3 of the License, or (at your option) | ||||
| #   any later version. | ||||
| # | ||||
| #   This program is distributed in the hope that it will be useful, but WITHOUT | ||||
| #   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
| #   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for | ||||
| #   more details. | ||||
| # | ||||
| #   You should have received a copy of the GNU General Public License along with | ||||
| #   this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  | ||||
| def pols (grado=-1, K=GF(2), mostrar=False): | ||||
|     """Devuelve la lista de polinomios constantes y no constantes de | ||||
|     coeficientes mónicos y grado igual o menor que el especificado. | ||||
|     Si el grado indicado no es válido, devuelve una lista vacía. | ||||
|     """ | ||||
|     lpols = [] | ||||
|     if not grado.is_integer(): | ||||
|         grado = grado.round() | ||||
|     if grado >= 0: | ||||
|         var('x') | ||||
|         xs = vector([(x^i) for i in range(grado+1)]) | ||||
|         V = VectorSpace(K,grado+1) | ||||
|         lpols = [cs*xs for cs in V] | ||||
|         if mostrar: | ||||
|             for pol in lpols: | ||||
|                 print pol | ||||
|     return lpols | ||||
|  | ||||
| def polsNoCtes (grado=-1, K=GF(2), mostrar=False): | ||||
|     """Devuelve la lista de polinomios no constantes de coeficientes mónicos y | ||||
|     grado igual o menor que el especificado. | ||||
|     Si el grado indicado no es válido, devuelve una lista vacía. | ||||
|     """ | ||||
|     lpols = [] | ||||
|     if not grado.is_integer(): | ||||
|         grado = grado.round() | ||||
|     if grado >= 0: | ||||
|         var('x') | ||||
|         xs = vector([(x^i) for i in range(grado+1)]) | ||||
|         for cs in K^(grado+1): | ||||
|             if cs[:grado] != vector(grado*[0]): # no constantes | ||||
|                 lpols += [cs*xs] | ||||
|         if mostrar: | ||||
|             for pol in lpols: | ||||
|                 print pol | ||||
|     return lpols | ||||
|  | ||||
| def polsMismoGrado (grado=-1, K=GF(2), mostrar=False): | ||||
|     """Devuelve la lista de polinomios de coeficientes mónicos del grado | ||||
|     especificado. | ||||
|     Si el grado indicado no es válido, devuelve una lista vacía. | ||||
|     """ | ||||
|     lpols = [] | ||||
|     if not grado.is_integer(): | ||||
|         grado = grado.round() | ||||
|     if grado >= 0: | ||||
|         var('x') | ||||
|         xs = vector([(x^(grado-i)) for i in [0..grado]]) | ||||
|         for cs in K^(grado+1): | ||||
|             if cs[0] != 0: # polinomios del mismo grado | ||||
|                 lpols += [cs*xs] | ||||
|         if mostrar: | ||||
|             for pol in lpols: | ||||
|                 print pol | ||||
|     return lpols | ||||
|  | ||||
| def excluirReducibles (lpols=[], mostrar=False): | ||||
|     """Filtra una lista dada de polinomios de coeficientes mónicos y devuelve | ||||
|     aquellos irreducibles. | ||||
|     """ | ||||
|     var('x') | ||||
|     irreds = [] | ||||
|     for p in lpols: | ||||
|         fp = (p.factor_list()) | ||||
|         if len(fp) == 1 and fp[0][1] == 1: | ||||
|             irreds += [p] | ||||
|     if mostrar: | ||||
|         for pol in irreds: | ||||
|             print pol | ||||
|     return irreds | ||||
|  | ||||
| def vecPol (vec=random_vector(GF(2),0)): | ||||
|     """Transforma los coeficientes dados en forma de vector en el polinomio | ||||
|     que representan. | ||||
|      | ||||
|     Por ejemplo, con vecPol(vector([1,0,3,1])) se obtiene x³ + 3*x + 1. | ||||
|      | ||||
|     Para la función opuesta, véase polVec(). | ||||
|     """ | ||||
|     var('x') | ||||
|     xs = vector([x^(len(vec)-1-i) for i in range(len(vec))]) | ||||
|     return vec*xs | ||||
|  | ||||
| def polVec (p=None): | ||||
|     """Devuelve el vector de coeficientes del polinomio dado que acompañan a la | ||||
|     incógnita x, de mayor a menor grado. | ||||
|      | ||||
|     Por ejemplo, con polVec(x^3 + 3*x + 1) se obtiene el vector (1, 0, 3, 1). | ||||
|      | ||||
|     Para la función opuesta, véase vecPol(). | ||||
|     """ | ||||
|     cs = [] | ||||
|     if p != None: | ||||
|         var('x') | ||||
|         p(x) = p | ||||
|         for i in [0..p(x).degree(x)]: | ||||
|             cs.append(p(x).coefficient(x,i)) | ||||
|         cs = list(reversed(cs)) | ||||
|     return vector(cs) | ||||
|  | ||||
| def completar2 (p=0): | ||||
|     """Aplica el método de completar cuadrados en parábolas al polinomio dado de | ||||
|     grado 2 y lo devuelve en su nueva forma. | ||||
|      | ||||
|     Si el polinomio dado no es válido, devuelve 0. | ||||
|      | ||||
|     Por ejemplo, con complCuad(3*x^2 + 12*x + 5) se obtiene 3*(x + 2)^2 - 7. | ||||
|     """ | ||||
|     var('x') | ||||
|     p(x) = p.expand() | ||||
|     if p(x).degree(x) != 2: | ||||
|         p(x) = 0 | ||||
|     else: | ||||
|         cs = polVec(p(x)) | ||||
|         p(x) = cs[0]*(x+(cs[1]/(2*cs[0])))^2+(4*cs[0]*cs[2]-cs[1]^2)/(4*cs[0]) | ||||
|     return p(x) | ||||
		Reference in New Issue
	
	Block a user