Info

This question is closed. Reopen it to edit or answer.

Code not setting value=0

1 view (last 30 days)
James
James on 21 Jun 2013
Closed: MATLAB Answer Bot on 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 Comments
Matt J
Matt J on 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 on 24 Jun 2013
Edited: Matt J on 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.

Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 21 Jun 2013
A=10;
B=1;
fun=@(x) x+1/((A.*x)+(B.*x));
z=fzero(fun,eps)
  1 Comment
James
James on 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 on 24 Jun 2013
Edited: Matt J on 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).

Tags

Community Treasure Hunt

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

Start Hunting!