Stuck with function giving a zero output when calling global variables
3 views (last 30 days)
Show older comments
Hi, I have defined global variables (all scalar) in my main script, along with their values.
When calling a function which calls these global variables, and assigning the required inputs, I get an output of zero. Here's my code:
function q1 = Hfcrsk(a,b)
global k Cpb Skbfn Cdil Tc0 Cstr Tsk0
Tc=a;
Tsk=b;
Skbf = ((Skbfn + (Cdil.*(Tc-Tc0)))./(1+(Cstr.*(Tsk0-Tsk))));
q1 = (k.*(Tc-Tsk)) + (Skbf.*Cpb.*(Tc-Tsk));
Calling Hfcrsk(30,35) for example always gives a 0 output.
Please help!!! Thanks:)
1 Comment
Stephen23
on 25 Feb 2015
Which makes this situation a classic example of why using globals is a bad idea: it means that any of those variables can be changed somewhere at some point by another function and there is no easy way to know when this happens:
To quote from the first link, Doug Hull: "I have never seen MATLAB code where globals were the right thing to do". And MattFig: "Those beginners (at my work) who use these constructs end up calling me to come fix their mess a few months down the road". And Jan Simon: "these commands cause more problems than they solve".
Accepted Answer
Guillaume
on 25 Feb 2015
Edited: Guillaume
on 25 Feb 2015
You get a zero output most likely because one of your global is zero when you call your function. Put a breakpoint on the skbf = ... line and look at the value of your global when it's hit.
There's a very good reason that global are despised and it's that it's near impossible to keep track of where they're being modified. 99% of the time there are much better solutions than globals.
In you case I'd just pass around a structure with fields k, Cpb, Skbfn, etc. (and actually I'd give then some names that actually mean something) and pass that structure to the functions that need it.
0 Comments
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!