How do I find all the zeros of a function?

39 visualizaciones (últimos 30 días)
MathWorks Support Team
MathWorks Support Team el 13 de Nov. de 2009
Comentada: Walter Roberson el 10 de Abr. de 2022
The FZERO function only finds a single zero near a specified point. How can I get different zeros over a wider range?

Respuesta aceptada

MathWorks Support Team
MathWorks Support Team el 18 de Oct. de 2013
The example below describes one way to find zeros between 0 and 2*pi.
lb = 0;             % Set a lower bound for the function.
ub = 2*pi;          % Set an upper bound for the function.
x = NaN*ones(100,1);             % Initializes x.
starting_points=linspace(0,2*pi,100);
for i=1:100
        % Look for the zeros in the function's current window.
        x(i)=fzero(@(x)sin(10*x), starting_points(i));
end
x_unique=x(diff(x)>1e-12)
%compare to theory values
transpose(((0:19)*pi)/10)-x_unique
Changing the step value of the loop (0.01) to a larger value will result in faster execution, but less accuracy, and vice versa when the specified step value is smaller.
The tolerance for duplicates, in this example 1e-12, should be specified depending on the problem at hand, an inappropriate setting for a certain problem might result in some of the zeros not being found.
Alternately, you can use the SOLVE function from the Symbolic Math Toolbox. 
  2 comentarios
Walter Roberson
Walter Roberson el 9 de Ag. de 2015
Note: solve() from the Symbolic Math Toolbox will only return all zeros for polynomial functions, not for nonlinear functions.
Walter Roberson
Walter Roberson el 10 de Abr. de 2022
Time = 2:.1:4;
Dirac3 = zeros(size(Time));
Dirac3(Time==3) = 1;
stem(Time, Dirac3)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre MATLAB en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by