# HG changeset patch
# Parent 0f68eda0c74927c0761cd9ac93b962cd20d03bde
#10837: Fix doctest failures due to rounding errors and fix the 0norm for vectors.
diff r 0f68eda0c749 sage/matrix/matrix_double_dense.pyx
a

b


587  587  
588  588  \left(\sum_{i,j}\left\lvert{a_{i,j}}\right\rvert^2\right)^{1/2} 
589  589  
 590   ``p = 'sv'``: the quotient of the maximal and minimal singular value. 
590  591   ``p = Infinity`` or ``p = oo``: the maximum row sum. 
591  592   ``p = Infinity`` or ``p = oo``: the minimum column sum. 
592  593   ``p = 1``: the maximum column sum. 
… 
… 

653  654  
654  655  sage: A = matrix(RDF, 10, [1/(i+j+1) for i in range(10) for j in range(10)]) 
655  656  sage: A.condition() 
656   1.63346888329e+13 
 657  1.633...e+13 
657  658  sage: id = identity_matrix(CDF, 10) 
658  659  sage: id.condition(p=1) 
659  660  1.0 
… 
… 

664  665  sage: A.condition() in RDF 
665  666  True 
666  667  
667   Rectangular and singular matrices raise errors. :: 
 668  Rectangular and singular matrices raise errors if p is not 'sv'. :: 
668  669  
669  670  sage: A = matrix(RDF, 2, 3, range(6)) 
670  671  sage: A.condition() 
671  672  Traceback (most recent call last): 
672  673  ... 
673   TypeError: matrix must be square, not 2 x 3 
 674  TypeError: matrix must be square if p is not 'sv', not 2 x 3 
 675  
 676  sage: A.condition('sv') 
 677  7.34... 
674  678  
675  679  sage: A = matrix(QQ, 5, range(25)) 
676  680  sage: A.is_singular() 
… 
… 

687  691  sage: A.condition(p='bogus') 
688  692  Traceback (most recent call last): 
689  693  ... 
690   ValueError: condition number 'p' must be +/ infinity, 'frob' or an integer, not bogus 
 694  ValueError: condition number 'p' must be +/ infinity, 'frob', 'sv' or an integer, not bogus 
691  695  sage: A.condition(p=632) 
692  696  Traceback (most recent call last): 
693  697  ... 
… 
… 

708  712  sage: abs(cd) < 1.0e14 
709  713  True 
710  714  """ 
711   if not self.is_square(): 
712   raise TypeError("matrix must be square, not %s x %s" % (self.nrows(), self.ncols())) 
 715  if not self.is_square() and p != 'sv': 
 716  raise TypeError("matrix must be square if p is not 'sv', not %s x %s" % (self.nrows(), self.ncols())) 
713  717  global numpy 
714  718  if numpy is None: 
715  719  import numpy 
… 
… 

722  726  p = numpy.inf 
723  727  elif p == 'frob': 
724  728  p = 'fro' 
 729  elif p == 'sv' : 
 730  p = None 
725  731  else: 
726  732  try: 
727  733  p = sage.rings.integer.Integer(p) 
728  734  except: 
729   raise ValueError("condition number 'p' must be +/ infinity, 'frob' or an integer, not %s" % p) 
 735  raise ValueError("condition number 'p' must be +/ infinity, 'frob', 'sv' or an integer, not %s" % p) 
730  736  if p not in [2,1,1,2]: 
731  737  raise ValueError("condition number integer values of 'p' must be 2, 1, 1 or 2, not %s" % p) 
732  738  # may raise a LinAlgError if matrix is singular 
diff r 0f68eda0c749 sage/modules/vector_double_dense.pyx
a

b


626  626  sage: v.norm(p=oo) 
627  627  0.0 
628  628  sage: v.norm(p=0) 
629   8 
 629  8.0 
630  630  sage: v.norm(p=0.3) 
631  631  4099.153615... 
632  632  
… 
… 

638  638  sage: w.norm(p=2) 
639  639  13.9283882... 
640  640  sage: w.norm(p=0) 
641   2 
 641  2.0 
642  642  sage: w.norm(p=4.2) 
643  643  13.0555695... 
644  644  sage: w.norm(p=oo) 
… 
… 

688  688  raise ValueError("vector norm 'p' must be +/ infinity or a real number, not %s" % p) 
689  689  n = numpy.linalg.norm(self._vector_numpy, ord=p) 
690  690  # p = 0 returns integer *count* of nonzero entries 
691   if n.dtype == numpy.int64: 
692   return sage.rings.integer.Integer(n) 
693   else: 
694   return RDF(n) 
 691  return RDF(n) 
695  692  
696  693  
697  694  ############################# 