First of all, there is ABSOLUTELY no need to use global variables here. They are a crutch that will make your code poor, impossible to debug, hard to read and follow, etc. Avoid them, instead learning a better programming style at the same time.
Here, I've written dforce to take those variables as inputs. I've postpended the names of several variables with a _i to suggest that they are the i'th element of the external vectors ro and mu.
function W = dforce(v,ro_i,d,mu_i,A)
Re = (ro_i*v*d)/mu_i;
Cd = (24/Re)+(6/(1+sqrt(Re)))+0.4;
W = Cd*0.5*ro_i*v^2*A;
end
See that when the function handle dF is created, it is passed the values of those parameters. I've also preallocated V.
m = 0.5;
g = 9.8;
N = m*g;
R = 287;
P = 101300;
d = 15;
A = (pi*d^2)/4;
T = linspace(-60,60,121);
NT = length(T);
mu = zeros(size(T));
ro = mu;
V = zeros(size(T));
b1 = 2.156954157e-14;
b2 = -5.332634033e-11;
b3 = 7.477905983e-8;
b4 = 2.527878788e-7;
Now, the VERY first thing I would do is to test your function. Dopes it make sense? Is there a root to be found? Don't throw a loop at something and expect it to work. Don't write a mess of code and then expect it all to work without any testing.
ALWAYS check things. Check EVERY line if necessary to make sure it makes sense.
i = 1;
mu(i) = b1*T(i)^3+b2*T(i)^2+b3*T(i)+b4;
ro(i) = P/(R*T(i));
dF = @(v)dforce(v,ro(i),d,mu(i),A)- N;
A very good way to check things is with a plot. Does it make sense? If not, then why not? This is how you should use MATLAB. Make sure that you understand everything, that you have made no mistakes. Then when you put it all together at the end, you can be confident that it will indeed work.
ezplot(dF,[-1,1])
Warning: Function failed to evaluate on array inputs; vectorizing the function may speed up its evaluation and avoid the need to loop over array elements.
> In ezplot>ezplot1 at 484
In ezplot at 144
grid on
So, in fact, there is no root at all, at least not for the first value of T.
The point is, careful coding means that you work SLOWLY, one step at a time. Once you get more proficient at coding, you can do bigger chunks without needing to check quite as much.
Best Answer