Filter löschen
Filter löschen

Getting 3 zeros from a function using fzero

4 Ansichten (letzte 30 Tage)
D
D am 15 Okt. 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]);

Akzeptierte Antwort

Ashikur
Ashikur am 16 Okt. 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.
  1 Kommentar
D
D am 16 Okt. 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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Fangjun Jiang
Fangjun Jiang am 16 Okt. 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 Kommentare
Walter Roberson
Walter Roberson am 16 Okt. 2011
There are 3 zeros,
-.5426539024,
3.482467600,
-4.306510589
Remember, fzero stops when it finds a single zero.
Fangjun Jiang
Fangjun Jiang am 16 Okt. 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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Function Handles finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by