function f = flops_solve(a,b,c)
% FLOPS_SOLVE    Flops for matrix left division.
% FLOPS_SOLVE(a,b) returns the number of flops for a\b.
% FLOPS_SOLVE(n,m,c) returns the number of flops for ones(n,m)\ones(m,c).

if nargin == 2
  f = flops_solve(rows(a),cols(a),cols(b));
  return;
end
if a == b
  if a == 1
    % scalar division
    f = c*flops_div;
    return;
  end
  f = flops_chol(a) + 2*flops_solve_tri(a,b,c);
elseif a > b
  % this comes from Ax=b, x = (A'*A)\(A'*b)
  f = flops_mul(b,a,b) + flops_mul(b,a,c) + flops_solve(b,b,c);
else
  % this comes from Ax=b, x = A'*(A*A')\b
  f = flops_mul(a,b,a) + flops_mul(b,a,c) + flops_solve(a,a,c);
end
