MATLAB: How to use fzero and choose correctly initial guess

fzero with initial guess

Hi,
May I know how to solve the following equation with fzero and get two numbers: -2 and +2.
When I used the following code, it returned x=-2
fzero(@(x) x^2-4,0)
And this returned x=+2
fzero(@(x) x^2-4,1)
And furthermore, how can I choose correctly the initial guess number? I found that the answer will depend on the initial guess.

Best Answer

Whenever I have a function I want to use fzero with, I plot it to see how many zeros it has and about where they are. I then choose my initial estimates based on that.
A more mathematically correct approach involves taking the vector you want the zeros of, then multiplying it by a one-position circularly-shifted version of itself, using the circshift function. This produces negatives at the zero crossings that are easy to test for and determine the indices of using the find function. I then use the x-values at those indices as the initial estimates. The initial estimates don’t have to be perfect, just close enough. If there are several zero-crossings, you will get several answers from fzero. It is up to you to choose the ‘correct’ zeros.