您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > python 求一元函数极小值-第7章 函数的极小值
第7章一元函数极小值7.1最优化方法简介一、最优化方法在给定条件下,尽你尽你力所能及地得出最好的解的方法称为最优化方法。最优化方法解决问题的一般步骤是:1.构造一个数学模型Q=f(x1,x2,x3,.....xn)应确保构造的模型有极小值。2.找出使Q最小的自变量x1,x2,...,xn.如果自变量只有一个,即Q=f(x),则此时称为一元函数的最优化。下面我们只讨论一元函数的最优化问题。二、求解一元函数最优化问题的求导数方法如果f(x)可以写出解析式,并且可以求导数,设x*处是极化小值,则有f'(x*)=0f''(x*)0遗憾的是现实中,我们导出的数据模型,很难求导数。三、求解一元函数最优化问题的搜索方法求解一元函数最优化问题的搜索方法分为全面搜索法和逐步搜索法。如果要求解对于f(x)在区间[a,b]上的极小点x*,要求相对精度ε=10E-5则:|x计算-x*|ε(|x计算|+|x*|)我们此处仅介绍全面搜索法。全面搜索法(也叫迈步法)全面搜索法的计算方案:(1)将区间[a,b]分成n等份,每份长度dx=(b-a)/n在每个分点上计算函数值,可以知道函数在哪个分点上的值最小,设为Xmin。(2)新的求解区间为[Xm-dx,Xm+dx],记为[a1,b1](3)如果a1与b1很接近,即满足|a1-b1|ε(|a1|+|b1|)则:我们要找的最小点是(Xm,f(Xm)),结束搜索。否则:令a=a1;b=b1转(1)在海湾战争中,美军曾使用地毯式轰炸,就是一种二维迈步法,又称网格法,亦称拉网法。迈步法是搜索法中最基本的方法,它非常有效,缺点是计算量大了一点。在量子化学计算中,Xα计算方法就使用了这种方法(我是从它的打印计算结果中分析出来的)。例1:求函数10)3()(2xxf的极小点。#coding=gbk#迈步法求函数f(x)在[a,b]的极小点#入口:#f模型函数#a,b待优化参数的起始区间[a,b]defmaibu(f,a,b):n=20whileTrue:dx=(b-a)/nxmin=afmin=f(xmin)foriinrange(1,n+1):xi=a+dx*ifi=f(xi)iffifmin:fmin=fixmin=xia=xmin-dxb=xmin+dxifabs(b-a)=1E-5*(abs(a)+abs(b)):return(a+b)/2deff(x):return(x-3)**2+10xp=maibu(f,-1000,1000)print(极小值点:(,xp,,,f(xp),))极小值点:(3.0,10.0)7.2求一元弱酸的pH值在分析化学中,我们已经学习过一元弱酸溶液的pH值的近似公式。CkH1][在这里,我们试着用求极小值的方法去求解“精确”解,即不作近似。AHkHAOHHkwOH12电荷平衡:OHAH根据分布系数知:1][1*][kHkCAHA所以:)1(..........][1][1*][HkwkHkCHHA要想直解求解方程(2)有点困难。我们构造模型函数:)2.........(][1][1*][),1,],([2HkwkHkCHkwkCHfQHAHA将求解方程(2)的问题转化为求使用Q最小的[H+],即问题转化为求一元函数极小值的问题。说明:(2)式中CHA,k1,kw均为常数。例2求0.01MHA(k1=1.8E-5)溶液的pH.#coding=gbk#求0.01MHA(k1=1.8E-5)溶液的pH#----------------------------------#迈步法求函数f(x)在[a,b]的极小点#入口:#f模型函数#a,b待优化参数的起始区间[a,b]defmaibu(f,a,b):n=20whileTrue:dx=(b-a)/nxmin=afmin=f(xmin)foriinrange(1,n+1):xi=a+dx*ifi=f(xi)iffifmin:fmin=fixmin=xia=xmin-dxb=xmin+dxifabs(b-a)=1E-5*(abs(a)+abs(b)):return(a+b)/2KW=1E-14C=0.01K1=1.8E-5deff(pH):H=10**(-pH)OH=KW/HA=C*(K1/(H+K1))return(H-(OH+A))**2XP=maibu(f,0,14)print(0.01MHA的pH=,XP)0.01MHA的pH=3.381574下面我们研究用近似公式和精确解进行比较,依次计算0.1、0.01、0.001、0.0001、0.00001M的HA溶液的pH值。#coding=gbk#求0.10.010.0010.00010.00001MHA(k1=1.8E-5)溶液的pH#----------------------------------#迈步法求函数f(x)在[a,b]的极小点#入口:#f模型函数#a,b待优化参数的起始区间[a,b]defmaibu(f,a,b):n=20whileTrue:dx=(b-a)/nxmin=afmin=f(xmin)foriinrange(1,n+1):xi=a+dx*ifi=f(xi)iffifmin:fmin=fixmin=xia=xmin-dxb=xmin+dxifabs(b-a)=1E-5*(abs(a)+abs(b)):return(a+b)/2KW=1E-14C=1.0K1=1.8E-5deff(pH):H=10**(-pH)OH=KW/HA=C*(K1/(H+K1))return(H-(OH+A))**2importmathforiinrange(1,6):C=C/10XP=maibu(f,0,14)XJS=-math.log10(math.sqrt(K1*C))#用近似公式计算的pHH=10**(-XP)HJS=10**(-XJS)re=(HJS-H)/H*100.0#相对误差print(%7.5fMHA的pH=%10.3f近似计算pH=%10.3f%(C,XP,XJS))print(%7.5fMHA的[H]=%10.2E近似计算[H]=%10.2E相对误差=%7.2f%%%(C,H,HJS,re))0.10000MHA的pH=2.875近似计算pH=2.8720.10000MHA的[H]=1.33E-03近似计算[H]=1.34E-03相对误差=0.67%0.01000MHA的pH=3.382近似计算pH=3.3720.01000MHA的[H]=4.15E-04近似计算[H]=4.24E-04相对误差=2.14%0.00100MHA的pH=3.901近似计算pH=3.8720.00100MHA的[H]=1.25E-04近似计算[H]=1.34E-04相对误差=6.93%0.00010MHA的pH=4.464近似计算pH=4.3720.00010MHA的[H]=3.44E-05近似计算[H]=4.24E-05相对误差=23.44%0.00001MHA的pH=5.145近似计算pH=4.8720.00001MHA的[H]=7.16E-06近似计算[H]=1.34E-05相对误差=87.47%这个结果告诉我们,当弱酸的浓度比较大时,近似计算公式还是可以用的。例3计算0.1MNaHA(草酸氢钠)溶液的pH值草酸氢钠的电荷平衡:][*2][][][][AHAOHNaH上式中:2*11*][][2*1*][2*11*][][1*][*][]/[][1.0][22kkkHHkkCAkkkHHkHCHAHkwOHNa#coding=gbk#计算0.1MNaHA(草酸氢钠)溶液的pH值#已知k1=0.0562k2=5.248e-05#----------------------------------#迈步法求函数f(x)在[a,b]的极小点#入口:#f模型函数#a,b待优化参数的起始区间[a,b]defmaibu(f,a,b):n=20whileTrue:dx=(b-a)/nxmin=afmin=f(xmin)foriinrange(1,n+1):xi=a+dx*ifi=f(xi)iffifmin:fmin=fixmin=xia=xmin-dxb=xmin+dxifabs(b-a)=1E-5*(abs(a)+abs(b)):return(a+b)/2#计算0.1MNaHA(草酸氢钠)溶液的pH值#模型函数Q=([H]+[Na]-[HA]-2[A]-[OH])^2#k1=0.0562k2=5.248e-05C=0.1#H2Ac的分析浓度(草酸氢钠)CNa=C#[Na+]K1=0.0562K2=5.248e-05KW=1E-14#水的离子积#构造模型函数deff(pH):H=10**(-pH)OH=KW/HHA=C*K1*H/(H*H+K1*H+K2*K1)A=C*K1*K2/(H*H+K1*H+K2*K1)return(H+CNa-HA-OH-2*A)**2XP=maibu(f,0,14)print(计算0.1MNaHA(草酸氢钠)溶液的pH值)print(已k1=0.0562k2=5.248e-05)print(pH=,%7.3f%XP)计算0.1MNaHA(草酸氢钠)溶液的pH值已k1=0.0562k2=5.248e-05pH=2.867例4计算10ml0.1MNaHA(草酸氢钠)溶液+2ml0.01MNaOH溶液的pH值分析:混合前草酸氢钠C1=0.1M,V1=10mlNaOHC2=0.01M,V2=2ml混合后的分析浓度21222111VVVCCVVVCCNaOHNaHA电荷平衡:][*2][][][][AHAOHNaH式中2*11*][][2*1*][2*11*][][1*][*][]/[][][22kkkHHkkCAkkkHHkHCHAHkwOHCCNaNaHANaOH我们发现例4与例3的电荷平衡式是一样的,唯一不同的是[Na+]的计算式略有不同。#coding=gbk#迈步法求10ml0.2M草酸氢钠+2ml0.02MNaOH溶液的pH#计算求10ml0.1M草酸氢钠+2ml0.01MNaOH溶液的pH#已知k1=0.0562k2=5.248e-05#三分法求函数f的极小点的x值#入口:#f模型函数#a,b待优化参数的起始区间[a,b]defmaibu(f,a,b):n=20whileTrue:dx=(b-a)/nxmin=afmin=f(xmin)foriinrange(1,n+1):xi=a+dx*ifi=f(xi)iffifmin:fmin=fixmin=xia=xmin-dxb=xmin+dxifabs(b-a)=1E-5*(abs(a)+abs(b)):return(a+b)/2#模型函数Q=([H]+[Na]-[HA]-2[A]-[OH])^2#k1=0.0562k2=5.248e-05C1=0.1#草酸氢钠的初始浓度V1=10C2=0.01#NaOH的初始浓度V2=2#混合后CNaHA=C1*V1/(V1+V2)CNaOH=C2*V2/(V1+V2)CNa=CNaHA+CNaOH#[Na+]K1=0.0562K2=5.248e-05KW=1E-14#水的离子积#构造模型函数deff(pH):H=10**(-pH)OH=KW/HHA=CNaHA*K1*H/(H*H+K1*H+K2*K1)A=CNaHA*K1*K2/(H*H+K1*H+K2*K1)return(H+CNa-HA-OH-2*A)**2XP=maibu(f,0,14)print(计算10ml0.1M草酸氢钠+2ml0.01MNaOH溶液的pH)print(已k1=0.0562k2=5.248e-05)print(pH=,%7.3f%XP)计算10ml0.1
本文标题:python 求一元函数极小值-第7章 函数的极小值
链接地址:https://www.777doc.com/doc-4209988 .html