loops for if, ifelse, end

i have the script and i want to add three condition, not sure how to do it.
Kw = 1e-14;
Ka = 1.755388e-5;
pKa = 4.756;
%
Ca = 0.5;
Cb = 0.1;
Va = 100;
Vb = 0.1:0.1:1500;
%
Ma = (Ca * Va) / 1000;
%
Mb = (Cb .* Vb) ./ 1000;
%
for i = 1:length(Mb)
M_excess = Ma - Mb(i);
this is where im stuck!!!!!!!!!
if M_excess > 0
Ma_final = (M_excess * 1000) ./ (Va + Vb(i));
Mb_final = (Mb(i) * 1000) ./ (Va + Vb(i));
Hplus = Ka * (Ma_final ./ Mb_final);
if M_excess < 0
OH = (M_excess * 1000 * (-1)) ./ (Va + Vb(i));
Hplus = Kw ./ OH;
if M_excess = 0
Hplus = Ka * ((Ma_final * 0.999999) ./ Mb_final); ./ (Va + Vb(i));
end
pH(i) = -log10(Hplus);
end

 Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 4 de Ag. de 2013
Editada: Azzi Abdelmalek el 4 de Ag. de 2013

0 votos

if M_excess > 0
Ma_final = (M_excess * 1000) ./ (Va + Vb(i));
Mb_final = (Mb(i) * 1000) ./ (Va + Vb(i));
Hplus = Ka * (Ma_final ./ Mb_final);
elseif M_excess < 0
OH = (M_excess * 1000 * (-1)) ./ (Va + Vb(i));
Hplus = Kw ./ OH;
else
Hplus = Ka * ((Ma_final * 0.999999) ./ Mb_final);
end
pH(i) = -log10(Hplus);

14 comentarios

harley
harley el 5 de Ag. de 2013
thanks Azzi, still skips the calc when M_excess = 0. Any other thoughts?
harley
harley el 5 de Ag. de 2013
Alternatively if M_excess = 0 is there a way to tell it to use the pH and Vb calculated in the iteration?
Azzi Abdelmalek
Azzi Abdelmalek el 5 de Ag. de 2013
Editada: Azzi Abdelmalek el 5 de Ag. de 2013
Because M_excess is never equal to 0, you can check it by
any(Ma - Mb==0) % you will find 0
harley
harley el 5 de Ag. de 2013
i see, i that because no array is created for M_excess? any thoughts on getting around this would be greatly appreciated, don't mind if i have to re write the script.
harley
harley el 5 de Ag. de 2013
if this helps it calc Hplus when Ma = Mb
Azzi Abdelmalek
Azzi Abdelmalek el 5 de Ag. de 2013
In your case Ma is never equal to Mb
harley
harley el 5 de Ag. de 2013
thanks for your time Azzi, very new to matlab Ma = 0.05 in my Mb array i have Mb = 0.05 at row 10000? sorry i am having trouble understanding matlab logic.
Azzi Abdelmalek
Azzi Abdelmalek el 5 de Ag. de 2013
Ok, First, it's not row 10000, but 5000
Mb(5000)
Now type
a=Mb(5000)
The result is 0.0500
Now try
a==0.05
You will find 0, which means they are not equals.
You can also try this
0.3-0.2==0.1 % the result is false
To understand what is going on look at this link
harley
harley el 5 de Ag. de 2013
sorry for the confusion, yes you are right row 5000. I kind of understand what's happening now, so do i need to specfic a tolerance? Thanks for your time again.
Azzi Abdelmalek
Azzi Abdelmalek el 5 de Ag. de 2013
You should use some tolerence
find(abs(Mb-Ma)<eps)
harley
harley el 5 de Ag. de 2013
Thanks Azzi how have been extremely helpful, how do i apply that 'find(abs(Mb-Ma)<eps)' to your edited script.
Azzi Abdelmalek
Azzi Abdelmalek el 5 de Ag. de 2013
Editada: Azzi Abdelmalek el 5 de Ag. de 2013
if abs(M_excess)<eps
Hplus = Ka * ((Ma_final * 0.999999) ./ Mb_final);
elseif M_excess > 0
Ma_final = (M_excess * 1000) ./ (Va + Vb(i));
Mb_final = (Mb(i) * 1000) ./ (Va + Vb(i));
Hplus = Ka * (Ma_final ./ Mb_final);
elseif M_excess < 0
OH = (M_excess * 1000 * (-1)) ./ (Va + Vb(i));
Hplus = Kw ./ OH;
end
pH(i) = -log10(Hplus);
harley
harley el 5 de Ag. de 2013
thank you very much, all working now.
harley
harley el 5 de Ag. de 2013
a minor question. How do i display the pH and Vb value at the point of abs(M_excess)<eps. I also want to plot the pH on figure 1.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by