For loop beginner question

2 次查看(过去 30 天)
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 个评论
Thorsten
Thorsten 2015-11-4
We need the values of all variables and the formula you try to implement to give some further advice.
Heartrin
Heartrin 2015-11-4
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.

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2015-11-4
编辑:Stephen23 2015-11-4
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 个评论
Heartrin
Heartrin 2015-11-4
I totally agree to your comment. thanks for the link you have given.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by