Changeset 5575:c186846c332a


Ignore:
Timestamp:
08/01/07 19:50:02 (6 years ago)
Author:
William Stein <wstein@…>
Branch:
default
Message:

code from Didier.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sage/rings/polynomial/multi_polynomial_ring_generic.pyx

    r4747 r5575  
    55import multi_polynomial_ideal 
    66from term_order import TermOrder 
     7from sage.rings.integer_ring import ZZ 
     8from sage.rings.polynomial.polydict import PolyDict 
     9import multi_polynomial_element 
    710 
    811def is_MPolynomialRing(x): 
     
    250253 
    251254 
     255    def random_element(self,degree,terms=5,*args,**kwds): 
     256        """ 
     257        Generate a random polynomial in this ring 
     258        INPUT: 
     259            degree -- maximum total degree of resulting polynomial 
     260            terms  -- maximum number of terms to generate 
     261 
     262        OUTPOUT: a random polynomial of total degree \code{degree} 
     263                and with \code{term} terms in it 
     264 
     265        EXAMPLES: 
     266        sage: R = MPolynomialRing(ZZ, 'x,y',2 ); 
     267        sage: R.random_element(2) #random 
     268        -1*x*y + x + 15*y - 2 
     269  
     270        sage: R.random_element(12) #random 
     271        x^4*y^5 + x^3*y^5 + 6*x^2*y^2 - x^2 
     272 
     273        sage: R.random_element(12,3) #random 
     274        -3*x^4*y^2 - x^5 - x^4*y 
     275 
     276        sage: R.random_element(3) # random 
     277        2*y*z + 2*x + 2*y 
     278 
     279        sage:  R = MPolynomialRing(RR, 'x,y',2 ); 
     280        sage: R.random_element(2) # random 
     281        -0.645358174399450*x*y + 0.572655401740132*x + 0.197478565033010 
     282 
     283        sage: R.random_element(41) # random 
     284        -4*x^6*y^4*z^4*a^6*b^3*c^6*d^5 + 1/2*x^4*y^3*z^5*a^4*c^5*d^6 - 5*x^3*z^3*a^6*b^4*c*d^5 + 10*x^2*y*z^5*a^4*b^2*c^3*d^4 - 5*x^3*y^5*z*b^2*c^5*d 
     285 
     286        AUTHOR: 
     287            -- didier deshommes 
     288        """ 
     289        # General strategy: 
     290        # generate n-tuples of numbers with each element in the tuple 
     291        # not greater than  (degree/n) so that the degree  
     292        # (ie, the sum of the elements in the tuple) does not exceed 
     293        # their total degree 
     294         
     295        n = self.__ngens         # length of the n-tuple 
     296        max_deg = int(degree/n)  # max degree for each term 
     297        R = self.base_ring() 
     298         
     299        # restrict exponents to positive integers only 
     300        _exponents = [ tuple([ZZ.random_element(0,max_deg+1) for _ in range(n)]) 
     301                       for _ in range(terms) ] 
     302        _coeffs = [R.random_element(*args,**kwds) for _ in range(terms)] 
     303 
     304        d = dict( zip(tuple(_exponents),_coeffs) )  
     305        return self(multi_polynomial_element.MPolynomial_polydict(self, PolyDict(d))) 
     306         
     307         
    252308#################### 
    253309# Leave *all* old versions! 
Note: See TracChangeset for help on using the changeset viewer.