Matlab Function fzero and Error using fzero (line 273)

2 ビュー (過去 30 日間)
Giovanni Hauber
Giovanni Hauber 2016 年 4 月 14 日
コメント済み: Walter Roberson 2016 年 4 月 14 日
Hello Guys!
I'm Kinda new to matlab, so be gentle with me!
Im doing my homework for my university, and while i was writing the code and using fzero function, it gaves me this error ( not a the first zeroes i want to know but at the second ) :
Error using fzero (line 273) The function values at the interval endpoints must differ in sign.
im calculating two different zeroes ( one and two ) of a referement function of my own.
ill post here the code to be more clear :
-----
Function :
funref = @(x) 2.7*(1./(1+5*(x-1).^2))+4.52*(1-(2*exp(x))./(1+5*x.^2));
---
Graph :
x = linspace(-1,2);
plot(x,funref(x),[-1,2],[0,0], ':r')
hold on
text (-0.53,0, 'first zero');
text (0.55, 0, 'Second Zero');
text (0.2,-4.4, 'Minimum' );
text (1.2, 3.25, 'Maximum');
axis ([-1 2 -5 5]);
y = linspace(-5,5);
line([0.091 0.091],[y(1),y(end)], 'lineWidth', 1);
text (0.1, 4, 'Minimum abscissa');
line([1.08 1.08], [y(1),y(end)], 'lineWidth', 1);
text (1.1, -2, 'Maximum abscissa' );
--- Zeroes Approximation :
firstzero = fzero(funref,[-0.53,0])
-- AND HERE I GOT THE DAMN PROBLEM : --
secondzero = fzero(funref,[0.55,0])
Here it gave me the error :
Error using fzero (line 273)
The function values at the interval endpoints must differ in sign.
im driving crazy, i really dont know where im mistaking.
Please help me! Thank you a lot.
  1 件のコメント
Walter Roberson
Walter Roberson 2016 年 4 月 14 日
By the way, notice you reversed the 0 and 0.55 in your second call. That would not have caused the problem you are observing though.

サインインしてコメントする。

回答 (1 件)

Steven Lord
Steven Lord 2016 年 4 月 14 日
Add two circles to your plot, indicating the endpoints of the interval over which your second fzero call is searching for a zero.
funref = @(x) 2.7*(1./(1+5*(x-1).^2))+4.52*(1-(2*exp(x))./(1+5*x.^2));
x = linspace(-1,2);
plot(x,funref(x),[-1,2],[0,0], ':r')
hold on;
plot([0, 0.55], funref([0, 0.55]), 'ko')
Now do you see the problem? If the value of your function at the two endpoints has the same sign, you may not have a solution on that interval and so fzero says it's not going to search for something it's not sure exists. [Granted, there are intervals where the two endpoints have the same sign but there are multiple zeros inside the interval, like if you'd asked for a zero on the interval [-1, 1]. This is a limitation of fzero with the interval syntax.]
If you stretch your interval slightly, to something like [0 0.6], you'll find that second zero.

カテゴリ

Help Center および File ExchangeEntering Commands についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by