Changeset 7682:6747edea46a8


Ignore:
Timestamp:
11/20/07 02:42:48 (6 years ago)
Author:
Robert Bradshaw <robertwb@…>
Branch:
default
Message:

n-th root for complex numbers, integer divisors

Location:
sage/rings
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • sage/rings/complex_double.pyx

    r7284 r7682  
    727727        """ 
    728728        return RealDoubleElement(gsl_complex_abs(self._complex)) 
     729         
     730    def argument(self): 
     731        return RealDoubleElement(gsl_complex_arg(self._complex)) 
    729732     
    730733    def abs2(self): 
     
    848851                 return [z, -z] 
    849852        return z 
     853         
     854    def nth_root(self, n, all=False): 
     855        """ 
     856        The n-th root function. 
     857                 
     858        INPUT: 
     859            all -- bool (default: False); if True, return a list 
     860                of all n-th roots. 
     861                 
     862        EXAMPLES:  
     863            sage: a = CDF(125) 
     864            sage: a.nth_root(3) 
     865            5.0 
     866            sage: a = CDF(10, 2) 
     867            sage: [r^5 for r in a.nth_root(5, all=True)] 
     868            [10.0 + 2.0*I, 10.0 + 2.0*I, 10.0 + 2.0*I, 10.0 + 2.0*I, 10.0 + 2.0*I] 
     869            sage: abs(sum(a.nth_root(111, all=True))) # random but close to zero 
     870            6.00659385991e-14 
     871        """ 
     872        if not self: 
     873            return [self] if all else self 
     874        arg = self.argument() / n 
     875        abs = self.abs().nth_root(n) 
     876        z = ComplexDoubleElement(abs * arg.cos(), abs*arg.sin()) 
     877        if all: 
     878            zeta = self._parent.zeta(n) 
     879            return [z * zeta**k for k in range(n)] 
     880        else: 
     881            return z 
     882 
    850883         
    851884    def is_square(self): 
  • sage/rings/complex_number.pyx

    r5809 r7682  
    830830                return [z, -z] 
    831831        return z 
     832         
     833    def nth_root(self, n, all=False): 
     834        """ 
     835        The n-th root function. 
     836                 
     837        INPUT: 
     838            all -- bool (default: False); if True, return a list 
     839                of all n-th roots. 
     840                 
     841        EXAMPLES:  
     842            sage: a = CC(27) 
     843            sage: a.nth_root(3) 
     844            3.00000000000000 
     845            sage: a.nth_root(3, all=True) 
     846            [3.00000000000000, -1.50000000000000 + 2.59807621135332*I, -1.50000000000000 - 2.59807621135332*I] 
     847            sage: a = ComplexField(20)(2,1) 
     848            sage: [r^7 for r in a.nth_root(7, all=True)] 
     849            [2.0000 + 1.0000*I, 2.0000 + 1.0000*I, 2.0000 + 1.0000*I, 2.0000 + 1.0000*I, 2.0000 + 1.0000*I, 2.0000 + 1.0000*I, 2.0000 + 1.0000*I] 
     850        """ 
     851        if not self: 
     852            return [self] if all else self 
     853        arg = self.argument() / n 
     854        abs = self.abs().nth_root(n) 
     855        z = ComplexNumber(self._parent, abs * arg.cos(), abs*arg.sin()) 
     856        if all: 
     857            zeta = self._parent.zeta(n) 
     858            return [z * zeta**k for k in range(n)] 
     859        else: 
     860            return z 
    832861     
    833862    def is_square(self): 
  • sage/rings/integer.pyx

    r7317 r7682  
    14711471        import sage.rings.integer_ring 
    14721472        return sage.rings.integer_ring.factor(self, algorithm=algorithm, proof=proof) 
     1473         
     1474    def prime_divisors(self, **kwds): 
     1475        return [p for p,e in self.factor(**kwds)] 
    14731476         
    14741477    def coprime_integers(self, m): 
  • sage/rings/real_double.pyx

    r7319 r7682  
    891891            raise ValueError, "negative number %s does not have a square root in the real field"%self 
    892892        return self._complex_double_(sage.rings.complex_double.CDF).sqrt(all=all) 
    893          
    894          
     893                 
    895894    def is_square(self): 
    896895        """ 
Note: See TracChangeset for help on using the changeset viewer.