To call a function results in an error (fzero)

Asked by Haojie on 11 Jul 2012
Latest activity Commented on by Haojie on 11 Jul 2012

I am really new to matlab. When I wrote two functions like this:

funw.m

function q = funw(t)

h=0;

r=1/7;

 q = quadl(@(x) sqrt(t^(2*r)-x.^(2*r)),h,t)...
 -quadl (@(x) sqrt(x.^(2*r)-t^(2*r)),t,(h+2));

return

VentRate.m

function w = VentRate

global elev;

global h;

w = fzero(@funw,(h+elev)/2);

return

I try to use VentRate to call funw, by typing VentRate in the command window, but it will show some error. However, if i directly write w = fzero(@funw,(h+elev)/2) in the command window, it will run without error. So can anyone tell me what is wrong with the second function? I appreciate your help.

Error:

??? Error using ==> fzero at 422 Second argument must be a scalar or vector of length 2.

Error in ==> VentRate at 4 w = fzero(@funw,(h+elev)/2);

0 Comments

Haojie

Products

No products are associated with this question.

1 Answer

Answer by Thomas on 11 Jul 2012
Edited by Thomas on 11 Jul 2012
Accepted answer

You need to define elev and h in the function you are calling initally.

you 'h' value comes from the funw function which will not get called unless h is defined in the VentRate function and the fzero needs 'h' and 'elev' to be present and scalars.

VentRate.m

function w = VentRate
h=0;
elev=2;
w = fzero(@funw,(h+elev)/2);
return

funw.m

function q = funw(t)
r=1/7;
   q = quadl(@(x) sqrt(t^(2*r)-x.^(2*r)),h,t)...
   -quadl (@(x) sqrt(x.^(2*r)-t^(2*r)),t,(h+2));
return

I cant currently check your function further for Mathematical errors but these functional errors should solve your problem..

1 Comment

Haojie on 11 Jul 2012

Thank you very much. It is the variable's problem. Problem solved.

Thomas

Contact us