Filter löschen
Filter löschen

Info

Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.

Code not setting value=0

1 Ansicht (letzte 30 Tage)
James
James am 21 Jun. 2013
Geschlossen: MATLAB Answer Bot am 20 Aug. 2021
I don't understand this odd little thing in my code. I have simplified the function but this is basically what it's doing:
A=10;
fun=@(x) x+1/(A.*x);
z=fzero(fun,0)
This runs fine and gives me the result.
However if I do this...
A=10;
B=0;
fun=@(x) x+1/((A.*x)+(B.*x));
z=fzero(fun,0)
... then I get problems. I thought that this should give the same result! I don't get why defining B=0 doesn't seem to be taken into account when fzero solves fun.
The idea is that I can change B once I know that for B=0 I get the same result as for if there was no B term in the equation.
--- update ---
I have identified that the problem is with the x in the B.*x term. If I just do (A.*x)+B then it works fine. Because the fzero variable is x it seems to not recognise that whilst there is an additional x dependance it should not take it into account since B=0 makes that term 0.
  2 Kommentare
Matt J
Matt J am 24 Jun. 2013
This runs fine and gives me the result.
No, even your first example, doesn't work. The function is undefined at x=0 and fails as it should
z=fzero(fun,0)
Error using fzero (line 309)
Function value at starting guess must be finite and real.
Matt J
Matt J am 24 Jun. 2013
Bearbeitet: Matt J am 24 Jun. 2013
The function
fun=@(x) x+1/((A.*x)+(B.*x));
can never have any roots when A+B>0. In the region x>0, both terms being summed in the function are strictly positive. The function is undefined at x=0. Inn the region x<0, all terms are strictly negative.

Antworten (2)

Azzi Abdelmalek
Azzi Abdelmalek am 21 Jun. 2013
A=10;
B=1;
fun=@(x) x+1/((A.*x)+(B.*x));
z=fzero(fun,eps)
  1 Kommentar
James
James am 21 Jun. 2013
That doesn't seem to work. Still getting the problem that the B=0 result is not the same as when no B in the equation.

Matt J
Matt J am 24 Jun. 2013
Bearbeitet: Matt J am 24 Jun. 2013
I think you might be missing some parentheses
fun=@(x) (x+1)/((A.*x)+(B.*x));
Otherwise, the function can't have any roots (see my Comments above).

Diese Frage ist geschlossen.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by