- 18
- 0
- 约2.43千字
- 约 16页
- 2018-05-05 发布于福建
- 举报
一元弱酸ph值计算机数值求解
一元弱酸pH值的计算机数值求解 化学系1班 殷乃宁 * 一、问题的提出: 一元弱酸溶液质子条件式: [H+] = [A-] + [OH-] 利用平衡常数式将各项变为[H+]的函数,即 这就是一元弱酸[H+]的精确表达式 * 代入[HA]的型体公式: 得到一元三次方程 [H+]3+Ka[H+]2- (Kac + Kw)[H+]-Ka Kw = 0 二元弱酸,精确式为四次方程。 三元弱酸,精确式为五次方程。 * 二、问题的分析: 利用计算机编程来解决这个问题,主要有以下几种方法:二分法,迭代法,牛顿法。 二分法: 牛顿法: * 二分法: 函数f(x)在某个区间(a,b)内连续且仅有一个根x* 取中点x0 = 1/2(a+b) 如果f(x0)=0,则1/2(a+b)即为根,否则将区间分为两半,进行扫描,检查f(x0)与f(a)是否同号。 * 如果同号,说明所求的根x*在x0右侧区间(x0,b),此时令a1 = x0, b1 = b。 如果异号,则x*在x0左侧区间(a,x0),则取 a1 = a, b1 = x0,得到一个新的根区间(a1,b1)。 有根区间(ak,bk)的长度小于给定的精度,则xk = 1/2(ak+bk)即为满足精度要求的方程的根。 * 牛顿法: 已知方程f(x) = 0的一个近似根x0 泰勒展开f(x)=f(x0)+f’(x0)(x- x0)+f’’(x0)(xx0)2+… 舍去高级项,得f(x0)+f’(x0)(x- x0) = 0 若f’(x0) 0,取x作为原方程的新近似根x1。 迭代公式为:f(xk)+f’(xk)(xk+1- xk) = 0, xk+1是一个 近似根。 * 下面将以某一元弱酸(设pKa=5,c=0.10mol/L,精度:0.01.)求pH值为例,使用C++语言说明两种方法的应用。 * #include iostream.h #include iomanip.h #include math.h double Fx(double,double,double); const double Kw = 1.0E-14; int main() { double k,c,r,x0,A,B,PH; double pka; coutpKa=; cinpka; 二分法 * coutKa=endl; cink; coutc=; cinc; cout精度:; cinr; k=pow(10,-pka); A=1.0E-14.0; B=1; //确定扫描范围 x0 = 0.5(A+B); while (abs(B-A)r) { if (f(x0)*f(A))0 A = x0; else B=x0; x0 = 0.5(A+B); } * PH=-log10(B); cout该一元酸的pH= setprecision(2) setiosflags(ios::fixed|ios::showpoint)Pendl; return 0; } //function definition double Fx(double s,double K,double C) { return(((s+K)*s)*s)-(K*C+Kw)*s-K*Kw); } * 牛顿法 #include iostream.h #include iomanip.h #include math.h float Fx(float,float,float); float DFx(float,float,float); const double Kw = 1.0E-14; int main() { float k,c,x0,x1,r,PH; double pka; * coutpKa=; cinp
原创力文档

文档评论(0)