Borrar filtros
Borrar filtros

Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

Code not setting value=0

1 visualización (últimos 30 días)
James
James el 21 de Jun. de 2013
Cerrada: MATLAB Answer Bot el 20 de Ag. de 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 comentarios
Matt J
Matt J el 24 de Jun. de 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 el 24 de Jun. de 2013
Editada: Matt J el 24 de Jun. de 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.

Respuestas (2)

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

La pregunta está cerrada.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by