显示 更早的评论
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
采纳的回答
Azzi Abdelmalek
2013-8-4
编辑:Azzi Abdelmalek
2013-8-4
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 个评论
thanks Azzi, still skips the calc when M_excess = 0. Any other thoughts?
Alternatively if M_excess = 0 is there a way to tell it to use the pH and Vb calculated in the iteration?
Because M_excess is never equal to 0, you can check it by
any(Ma - Mb==0) % you will find 0
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.
if this helps it calc Hplus when Ma = Mb
In your case Ma is never equal to Mb
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.
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
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.
You should use some tolerence
find(abs(Mb-Ma)<eps)
Thanks Azzi how have been extremely helpful, how do i apply that 'find(abs(Mb-Ma)<eps)' to your edited script.
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);
thank you very much, all working now.
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.
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Programming 的更多信息
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
