Effacer les filtres
Effacer les filtres

fzero function calculating all zeros within interval

35 vues (au cours des 30 derniers jours)
Rick
Rick le 28 Juil 2014
Modifié(e) : mostafa le 17 Août 2019
Hello,
I was thinking about the function fzero. If you have a function that has multiple roots within an interval of your choice, is there a way to show all the roots as an array, instead of only one root closest to the guess?

Réponse acceptée

Star Strider
Star Strider le 28 Juil 2014
You can first get an estimate of the zeros (if any) in your interval-of-interest by calculating it in that interval, then multiplying the function by circshift of the function to detect any zero-crossings that might be present. After that, use those estimates as your initial guesses for fzero
To illustrate:
x = linspace(0,50,200);
y = @(x) sin(x);
zx = x(y(x).*circshift(y(x),[0 -1]) <= 0); % Estimate zero crossings
zx = zx(1:end-1); % Eliminate any due to ‘wrap-around’ effect
for k1 = 1:length(zx)
fz(k1) = fzero(y, zx(k1));
end
  1 commentaire
mostafa
mostafa le 17 Août 2019
Modifié(e) : mostafa le 17 Août 2019
It should be corrected to this.
x = linspace(0,50,200);
y = @(x) sin(x);
zx = y(x).*circshift(y(x),[-1]) <= 0; % Estimate zero crossings
zx = zx(1:end-1); % Eliminate any due to ‘wrap-around’ effect
zx = x(zx);
for k1 = 1:length(zx)
fz(k1) = fzero(y, zx(k1));
end
fz

Connectez-vous pour commenter.

Plus de réponses (2)

Ben11
Ben11 le 28 Juil 2014
If you have the Curve Fitting Toolbox you might want to use
fnzeros

Matt J
Matt J le 28 Juil 2014
Modifié(e) : Matt J le 31 Oct 2018
Not for general functions. Certain functions, for example, have infinite roots in a finite interval, e.g., f(x)=0 or f(x)=sin(1/x). So of course the routine won't find all of them for you.
You can't reliably find multiple roots without exploiting some specific apriori known thing about the structure of the function, e.g., that it's a polynomial.

Catégories

En savoir plus sur Optimization dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by