$A$ and $B$ are $n \times n$ matrices and $v$ is a vector with $n$ elements. $Av$ has $\approx 2n^2$ flops and $A+B$ has $n^2$ flops. Following this logic, $(A+B)v$ should be faster than $Av+Bv$.
Yet, when I run the following code in matlab
```A = rand(2000,2000);
B = rand(2000,2000);
v = rand(2000,1);
tic
D=zeros(size(A));
D = A;
for i =1:100
    D = A + B;
    (D)*v;
end
toc
tic
for i =1:100
    (A*v+B*v);
end
toc
```
The opposite is true. Av+Bv is over twice as fast. Any explanations?
The difference in flop count might not be the only factor affecting the execution time. Other factors like cache locality, memory access patterns, compiler optimizations, and matrix structure could also contribute to the observed performance difference.
In the given example, the loop that computes $(A+B)v$ has an additional step of adding matrices $A$ and $B$ before multiplying with $v$. This matrix addition might have a larger cache footprint compared to the vector multiplication
First, let's clarify some terminology and assumptions. In your description, you stated that multiplying a matrix with a vector has approximately 2n^2 flops, which is inconsistent with the information you provided about A + B having n^2 flops. If we assume that both A and B are dense matrices and that the flop count for multiplying a matrix with a vector (Ax) is O(n^2), then Ax requires n^