To call a function results in an error (fzero)

2 ビュー (過去 30 日間)
Haojie
Haojie 2012 年 7 月 11 日
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);

採用された回答

Thomas
Thomas 2012 年 7 月 11 日
編集済み: Thomas 2012 年 7 月 11 日
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.
.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 件のコメント
Haojie
Haojie 2012 年 7 月 11 日
Thank you very much. It is the variable's problem. Problem solved.

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeProblem-Based Optimization Setup についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by