Yes, you can.
There's a nice submission on the file exchange that allows you to do exactly that. It works by approximating your curve by a Chebychev polynomial, and then finding all real roots of that polynomial.
If you want you can use these estimates for the roots as initial values for fzero, but often (at least for smooth and otherwise well-behaved curves) the accuracy demands can already be met by using a higher-order Chebychev approximation.
For your example, using only 18 function evaluations (I have a slightly modified version of the file, but the essence is the same):
>> f = @(A) 17.7*sin(A).*cos(A)+87*sin(A).^2-9.65*cos(A)-47*sin(A);
>> R = FindRealRoots(f, -5,5, 17)
R =
-3.709993256346244
-3.345207732130925
-0.201929737187637
0.572382702285053
2.573423209113534
2.937157987217741
>> R2 = R;
>> funcCount = 0;
>> for ii = 1:numel(R)
[R2(ii), ~,~, output] = fzero(f,R2(ii));
funcCount = funcCount + output.funcCount;
end
>> max(abs(R2(:)-R(:)))
ans =
8.564253235401331e-004
>> funcCount
ans =
46
e.g., there is only 8 parts per ten thousand improvement for no less than 46 additional function evaluations.