# File lib/backports/1.9.2/stdlib/matrix.rb, line 806
  def *(m) # m is matrix or vector or number
    case(m)
    when Numeric
      rows = @rows.collect {|row|
        row.collect {|e| e * m }
      }
      return new_matrix(rows, column_size)
    when Vector
      m = self.class.column_vector(m)
      r = self * m
      return r.column(0)
    when Matrix
      Matrix.Raise ErrDimensionMismatch if column_size != m.row_size

      rows = Array.new(row_size) {|i|
        Array.new(m.column_size) {|j|
          (0 ... column_size).inject(0) do |vij, k|
            vij + self[i, k] * m[k, j]
          end
        }
      }
      return new_matrix(rows, m.column_size)
    else
      return apply_through_coercion(m, __method__)
    end
  end