这道生物题怎么做?
求0.3mol/L的白氨酸的pH.已知:pK1=2.4,pK2=9.6.说说思路就可以了,我算了半张纸硬没算出来,望高手指点指点...
求0.3mol/L的白氨酸的pH.
已知:pK1=2.4,pK2=9.6.
说说思路就可以了,我算了半张纸硬没算出来,望高手指点指点 展开
已知:pK1=2.4,pK2=9.6.
说说思路就可以了,我算了半张纸硬没算出来,望高手指点指点 展开
2个回答
展开全部
可将其视作求解二元弱酸的问题。
由题可知:ka1=3.98e-3;ka2=2.51e-10
因为ka1*c>10kw,kw可以忽略;又ka2/sqrt(c*ka1)<0.5,故第二级解离也可以忽略。
则,可以将其视作一元弱酸。方程不难,你当知晓。解得:PH=1.486;
如果还需偷懒,也可以将其简化为[H]=sqrt(c*ka1),(其条件为,c/ka1>100,本题c/ka1=75,可以将就着用)解得:PH=1.461。误差不大。
当然,最好的方法是用牛顿迭代法求解。其C语言程序如下:
#include<stdio.h>
#include<math.h>
void main()
{
float c,ka1,ka2,kw,dr,x0,x1,fx,dfx,ph;
int i;
printf("迭代法计算二元弱酸的PH值。\n");
printf("Please input the value of c=");
scanf("%f",&c);
printf("Please input the value of ka1=");
scanf("%f",&ka1);
printf("Please input the value of ka2=");
scanf("%f",&ka2);
kw=1.0e-14;
dr=1.0e-3;
x0=sqrt(ka1*c);
for(i=1;i>=0;i++)
{
fx=(((x0+ka1)*x0+(ka1*ka2-ka1*c-kw))*x0-(ka1*kw+2*ka1*ka2*c))*x0-ka1*ka2*kw;
dfx=((4*x0+3*ka1)*x0+2*(ka1*ka2-ka1*c-kw))*x0-(ka1*kw+2*ka1*ka2*c);
x1=x0-fx/dfx;
if(abs((x1-x0)/x1)<=dr) break;
x0=x1;
}
ph=-log10(x1);
printf("PH=%f\n",ph);
}
/*互相学习哈*/
解得:PH=1.483
由题可知:ka1=3.98e-3;ka2=2.51e-10
因为ka1*c>10kw,kw可以忽略;又ka2/sqrt(c*ka1)<0.5,故第二级解离也可以忽略。
则,可以将其视作一元弱酸。方程不难,你当知晓。解得:PH=1.486;
如果还需偷懒,也可以将其简化为[H]=sqrt(c*ka1),(其条件为,c/ka1>100,本题c/ka1=75,可以将就着用)解得:PH=1.461。误差不大。
当然,最好的方法是用牛顿迭代法求解。其C语言程序如下:
#include<stdio.h>
#include<math.h>
void main()
{
float c,ka1,ka2,kw,dr,x0,x1,fx,dfx,ph;
int i;
printf("迭代法计算二元弱酸的PH值。\n");
printf("Please input the value of c=");
scanf("%f",&c);
printf("Please input the value of ka1=");
scanf("%f",&ka1);
printf("Please input the value of ka2=");
scanf("%f",&ka2);
kw=1.0e-14;
dr=1.0e-3;
x0=sqrt(ka1*c);
for(i=1;i>=0;i++)
{
fx=(((x0+ka1)*x0+(ka1*ka2-ka1*c-kw))*x0-(ka1*kw+2*ka1*ka2*c))*x0-ka1*ka2*kw;
dfx=((4*x0+3*ka1)*x0+2*(ka1*ka2-ka1*c-kw))*x0-(ka1*kw+2*ka1*ka2*c);
x1=x0-fx/dfx;
if(abs((x1-x0)/x1)<=dr) break;
x0=x1;
}
ph=-log10(x1);
printf("PH=%f\n",ph);
}
/*互相学习哈*/
解得:PH=1.483
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询