乙二胺四乙酸的分布图
一酸HA的分布系数:δ0=[A-]/c,δ1=[HA]/c,其中δ0+δ1=1。
推广到m元酸,容易推导出通式:
δ(n)=
其中,令K0=1
在计算δ的表达式时将分子分母分别计算,用for画图。
将K的值input到一个array里,添加上第一项k0=1,
m=input('m=');
matk=input('input the array of K from K1 to Km:');
matk=[1,matk];
%加入第一項K0,令K0為1以滿足關係式
用indexing取array中的前m+1项,使用cumprod函数求积。
syms x
figure
hold on
sigq=(10.^-x).^(m);
for j=2:m+1
piaim2=matk(1:j);
sig1=(10.^-x).^(m+1-j).*cumprod(piaim2)+sigq;
sigq=sig1(1,j);
%計算分母
end
再计算各个分子,画图,注意需要的式子在syms里的位置,用indexing的方法取出。另外注意分子分母array size是否相同。
for k=1:m+1
piaim1=matk(1:k);
sig2=(10.^-x).^(m+1-k).*(cumprod(piaim1));
f=sig2(k)./sigq;
fplot(f)
%計算分子,對每一個delta繪圖
end
完整代码如下
function deltapf
m=input('m=');
matk=input('input the array of K from K1 to Km:');
matk=[1,matk];
%加入第一項K0,令K0為1以滿足關係式
if size(matk)==[1,m+1]
syms x
figure
hold on
sigq=(10.^-x).^(m);
for j=2:m+1
piaim2=matk(1:j);
sig1=(10.^-x).^(m+1-j).*cumprod(piaim2)+sigq;
sigq=sig1(1,j);
%計算分母
end
for k=1:m+1
piaim1=matk(1:k);
sig2=(10.^-x).^(m+1-k).*(cumprod(piaim1));
f=sig2(k)./sigq;
fplot(f)
%計算分子,對每一個delta繪圖
end
hold off
box on
xlim([0 14]);
ylim([0 1]);
title('Delta');
xlabel('PH');
ylabel('δ');
%將範圍規為x(0,14),y(0,1)
else
disp('wrong k input')
end
p.s.不知道为什么matlab里简体注释出现[X],繁体是正常的