Uploaded image for project: 'Commons Math'
  1. Commons Math
  2. MATH-326

getLInfNorm() uses wrong formula in both ArrayRealVector and OpenMapRealVector (in different ways)

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.0
    • Fix Version/s: 2.1
    • Labels:
      None
    • Environment:

      all

      Description

      the L_infinity norm of a finite dimensional vector is just the max of the absolute value of its entries.

      The current implementation in ArrayRealVector has a typo:

          public double getLInfNorm() {
              double max = 0;
              for (double a : data) {
                  max += Math.max(max, Math.abs(a));
              }
              return max;
          }
      

      the += should just be an =.

      There is sadly a unit test assuring us that this is the correct behavior (effectively a regression-only test, not a test for correctness).

      Worse, the implementation in OpenMapRealVector is not even positive semi-definite:

         
          public double getLInfNorm() {
              double max = 0;
              Iterator iter = entries.iterator();
              while (iter.hasNext()) {
                  iter.advance();
                  max += iter.value();
              }
              return max;
          }
      

      I would suggest that this method be moved up to the AbstractRealVector superclass and implemented using the sparseIterator():

        public double getLInfNorm() {
          double norm = 0;
          Iterator<Entry> it = sparseIterator();
          Entry e;
          while(it.hasNext() && (e = it.next()) != null) {
            norm = Math.max(norm, Math.abs(e.getValue()));
          }
          return norm;
        }
      

      Unit tests with negative valued vectors would be helpful to check for this kind of thing in the future.

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              jake.mannix Jake Mannix
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: