matrix mul max value estimate
Given matrix produ开发者_如何学编程ct C = A*B
, is there N^2
way to estimate max value in C? Or rather what is a good way to do so?
How about this:
- For each row in
A
and each column inB
, find the vector-norm squared (i.e. sum of squares). O(n^2) - For each combination of row from
A
and column fromB
, multiply the corresponding vector-norm squareds. O(n^2) - Find the maximum of these. O(n^2)
The square-root of this will be an upper-bound for max(abs(C))
. Why? Because, from the Cauchy-Schwartz inequality, we know that |<x,y>|^2 <= <x,x>.<y,y>
, where <>
denotes the inner-product. We have calculated the RHS of this relationship for each point in C
; we therefore know that the corresponding element of C
(the LHS) must be less.
Disclaimer: There may well be a method to give a tighter bound; this was the first thing that came to mind.
Obviously,
N * max(abs(A)) * max(abs(B))
is an upper bound (since each element of C is the sum of N products of two values from A and B).
this is my take:
A,B,C
a(i) = max(abs(A(i,:)))
b(j) = max(abs(B(j,:)))
c(i,j) = N*max(a(i)*b(j))
What you think? Gonna try Oli's answer and see what gives me best approximation/performance.
精彩评论