For loop beginner question

2 views (last 30 days)
Heartrin
Heartrin on 4 Nov 2015
Commented: Heartrin on 4 Nov 2015
I just want to know why my loop is not working properly.
x = 0;
t = transpose(1:1:62403); %time vector [s]
n = length(x);
xdot = zeros(n, length(t));
for i = 1:n;
NH3_in= (((M_urea/2).*(X_H4N2CO*rho_air))./(M_H4N2CO.*((M_exhgas+(M_urea/2))))); [mol/m3]
NH3_in_ppm = ((NH3_in.*M_air)./rho_air).*10^6; % [ppm]
subplot(4,1,1);
plot (NH3_in_ppm);
ylabel('NH3 In [ppm]','fontsize',12,'FontWeight','bold','color','r')
ylim([0 1500]);
mass = ((M_exhgas)+(M_urea/2)); %Exh_vel = ((mass)/(rho_air*A)); [m/s]
Gamma = ((Exh_vel)./(L*omega));
T = ((1./Tbscr_K)-(1./T_ref));
r_sn = Ar .* (exp((-E_NO2./R_gasconstant).*(T))); [m3/mol/s]
A = NOx_in; [mol/m3]
B = 1+((r_sn.*x)./(Gamma));
h1 = A./B ; [mol/m3] (h1)
subplot(4,1,2);
h1_ppm = ((h1.*M_air)./(rho_air)).*10^6; % [ppm] Conversion
plot(h1_ppm);
%ylim([0 40])
ylabel('NOx Out [ppm]','fontsize',12,'FontWeight','bold','color','r')
%
r_a = Aa * (exp((-E_a./R_gasconstant).*(T)));
r_d = Ad * (exp((-E_d./R_gasconstant).*(T)));
h2 = ((NH3_in.*Gamma) + (r_d.*x))./((Gamma)+(r_a.*(1-x))); [mol/m3] (h2)
subplot(4,1,3);
h2_ppm = ((h2*M_air)/rho_air)*1e6; % [ppm] Conversion
plot(h2_ppm);
ylabel('NH3 Out [ppm]','fontsize',12,'FontWeight','bold','color','r')
%ylim([0 500]);
%
xdot(i,:) = (Gamma.*(NH3_in+h1-h2-NOx_in)); [-]
subplot(4,1,4);
x = x + xdot(i,:) ; %integeration
plot(x);
%ylim([0 1.5])
xlabel('Time [s]','fontsize',12,'FontWeight','bold','color','r')
ylabel('surface Coverage','fontsize',12,'FontWeight','bold','color','r')
end
the formula written for 'B' in the above script doesnt take the iterative x value. its just taking zero in all the iteration.
where is the loop going wrong?
  8 Comments
Thorsten
Thorsten on 4 Nov 2015
We need the values of all variables and the formula you try to implement to give some further advice.
Heartrin
Heartrin on 4 Nov 2015
hi, the data are a huge array. whichis difficult to put here.
the formula is written for the xdot(i,:). that is the main formula which is used to calculate the x.

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 4 Nov 2015
Edited: Stephen23 on 4 Nov 2015
This is what happens when you write a large block of code without checking it as your are writing it. We get many questions from beginners who write long pieces of code and they then complain "it does not do what I want it to do". Often they don't know what their own code is doing. Code is not magic: it does exactly what you tell it to do: if you don't know, then how is MATLAB supposed to know this?
If you learned to use some code best-practices then these would make your own code more readable, more understandable and easier to debug. These best-practices are not there to annoy students and get in your way: they are there because millions of programmer have learned that they make code more robust, easier to understand, and easier to write. Here are a few things that you need to consider:
Write code carefully, checking every line as you write it, make sure that it does what it should do, and perform your own sanity check calculation (by hand, on paper, or on your calculator) to make sure that the output is reasonable. If you had done this then you would have more of an idea why a zero pops up.
Consider edge cases: what happens if a value is zero, or too large, or too small, or in some way unexpected. Consider how your code will respond to likely edge cases.
Write comments. This is really really important. Write comments explaining what, why, how, or whatever info is required. Your code should make as much sense just by reading the comments as it does by following the code itself.
Use consistent formatting: the default MATLAB editor settings does quite nice formatting: why did you remove all of the loop indentation and other important formatting? This formatting makes code more readable, and clarifies the code structure. Your code has missing indentation and whitespace placed randomly throughout, sometimes a whole line of trailing whitespace...
Summary: write neater code and test your code as you write it.
  1 Comment
Heartrin
Heartrin on 4 Nov 2015
I totally agree to your comment. thanks for the link you have given.

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!