# Getting 3 zeros from a function using fzero

29 views (last 30 days)
D on 15 Oct 2011
I'm trying to collect the 3 zeros over the interval [-5,5] for the function in my code below. I can't seem to figure out how to used the fzero function so I can collect all three zero values and store them.
my_function = @(x) (-x^2 - 5*x - 3 + e^x);
a = fzero(my_function,[-5 5]);

Ashikur on 16 Oct 2011
Try this
my_function = @(x) (-x^2 - 5*x - 3 + exp(x));
for i = -5:.01:5
a = fzero(my_function,i)
ind = int8((5.01+i)*100)
b(ind) = a;
end
result = unique(b)
Note: fzero outputs only one value, and the limit must evaluate the function +Ve and -Ve in the limiting edges. So you have to try a loop.
D on 16 Oct 2011
Thanks, I was hoping to find a way without for loops, but if it works, it works. I went with the following to get the 3 zeros stored in a single array.
for i = -5:.02:5
a = fzero(my_function,i);
if (b(end) == 0) && (b(end) ~= a)
b(length(b)) = a;
elseif (b(end) ~= a) && (abs((b(end) - a)) > .1)
b(length(b) + 1) = a;
end
end

### More Answers (1)

Fangjun Jiang on 16 Oct 2011
Are there three zeros? I only get one. Use exp(x), instead of e^x
>> my_function = @(x) (-x^2 - 5*x - 3 + exp(x));
a = fzero(my_function,[-5 5])
a =
-4.306510588580705
##### 3 CommentsShow 1 older commentHide 1 older comment
Walter Roberson on 16 Oct 2011
There are 3 zeros,
-.5426539024,
3.482467600,
-4.306510589
Remember, fzero stops when it finds a single zero.
Fangjun Jiang on 16 Oct 2011
That is good to know. I didn't spend time on it. I thought the OP could get there after passing the e^x error.