![]() |
中国面包师贴吧-楼主(阅:2652/回:0)数字电路计算器数字电路计算器 下面介绍一种利用数字电路加法器,减法器,乘法器除法器,进行算术计算的计算器。这种计算器通过按键输入公式,经过数字电路的加法器,减法器,乘法器,除法器计算后得到计算结果,最后再将计算结果输出到数码管上面。该计算器首先通过晶振产生32768HZ的谐振方波信号,再经过分频电路将这个方波信号的频率降低为100HZ,,即周期为0.01秒,再将这个100HZ的信号接入到按键的公共端,按键共有60个,它们的一端接到一起,另外一端分别接到倍频器上。相当于这些按键并联在一起,当某个按键被按下时,100HZ的信号就会接入到倍频器上,经过倍频后,频率变为1HZ。为什么按键上面的频率是100HZ,这是因为100HZ的频率,周期是1毫秒,通常使用者按下按键的时间在1毫秒左右,所以,只有这个频率的信号才会在按下按键时输入到后级电路中。键值计算电路由十进制转二进制电路组成,当有数字键按下时,对应的数字按键输出端输出对应的数值。数值按键的输出端接上或门,或门两两相接,最后输出一个或门,当有任何计算符号按键按下时,或门输出高电平,或门后面接上计数器,计数器记录按键按下的次数,当有按键按下时,计数器将对应的次数输入到加法器,加法器给键值乘以10,100,1000,等倍数。当连续按2次按键时,需要用乘法器给键值乘以10,连续按下3次按键时,需要用乘法器给键值乘以100,依次类推。所有数值按键的输出端连接到一起,输出到计算符号电路,进行计算。 电路图下载网址: 数字电路计算器 链接:https://pan.baidu.com/s/14YTx3SP3dH7aLmwFYIhKXg?pwd=12h9 提取码:12h9 链接:https://pan.baidu.com/s/19SY8ka4Imz4q2_5huDQcMA?pwd=81s7 提取码:81s7 数字电路计算器下载地址:https://share.weiyun.com/Vr9z78sb https://115.com/s/sw6zzp636zv?password=ha14# 数字电路计算器 访问码:ha14 「数字电路计算器」https://www.aliyundrive.com/s/ByFESWzXyv6 https://kdocs.cn/join/ge5wqfb?f=101 计算符号编码电路产生对应计算符号的编码,输送给计算符号按键电路。用计算符号按键输入计算符号+-×÷,cos,sin,ln,log,等,计算符号按键的输出端接上或门,或门两两相接,最后输出一个或门,当有任何计算符号按键按下时,或门输出高电平,或门后面接上计数器,计数器记录按键按下的次数,当有按键按下时,计数器将对应的次数输入到加法器,加法器将对应计算符号接入数值电路,进行计算。每个计算符号按键的后面接上一个或非门,再加上一个与门,最后它们两两之间接上或门,最后一级是一个或门。这个或门输出刚刚按下的计算符号的编码到计算电路,当按下一次计算符号按键时,进行一次计算,输入到存储器,存储器在将数值和上面最近一次按下的计算符号编码输入到计算电路进行计算, 每一个计算符号按键对应一个计算电路,分别有开方电路,开立方电路,sinx计算电路,ln计算电路等等。当按下一个计算符号按键时,数据进行对应的计算电路进行计算,例如,按下lncosx计算按键时,从键盘输入的数字进入lncosx计算电路进行计算,并输出到数码管显示。开方计算电路通过对应的牛顿迭代法公式对数据进行开方计算,sinx,cosx,tanx,cotx等计算电路通过泰勒展开公式进行计算,lnx,立方n次方计算通过泰勒展开公式进行计算。lncosx通过《古今算学丛书假数测圆》里面的公式进行计算。上面各种计算公式通过数字电路加法器,减法器,乘法器,除法器按公式连接起来进行计算。 ([{)]}等按键通过非门,与门判断电路,将使电路先计算其里面的数值,在计算其外面的数值。最后电路通过=按键输出高电平控制输出计算结果到数码管编码器,驱动数码管输出计算结果。电路中的加法器,减法器,乘法器,除法器都采用串行加法器,减法器,除法器,乘法器等。 按键扫描电路 当有按键按下时RS触发器Q输出1,Q输出0,按下清零键以后,RS触发器Q端输出0,Q 端输出0。 当RS触发器的输入端R,S都是1时,触发器保持输出端没有变化。利用这个特点,当按键输入高电平1时,电路输出高电平1给存储器,当按键断开输入低电平0时,RS触发器仍然给存储器输入1,当清零键按下时,RS触发器的S端输入0,触发器给存储器输入0,存储器清零。 计算码生成电路 当数字键1,按下时,这个与门输出0000001给后面计算电路,所有按键存储器后面两两之间接上或门,或门后面再接上或门,最后接上计数器。当按键按下时,计数器变为1,对应的存储器输出对应键值。当按键按下第二次时,计数器输出2,输出两位数字,当按键按下第三次时,计数器输出3,输出三位数字。 当有按键按下时,计数器输出高电平,后级的与门输出键值00000001,第一次按下键值,通过与门输出键值,二进制数字发生器,产生脉冲00001010,相当于十进制数字10,即给键值乘以10倍,因为第二次按下按键时,需要给键值乘以10。脉冲发生器,产生脉冲01100100,相当于十进制数字100,即给键值乘以100倍,因为第三次按下按键时,需要给键值乘以100。脉冲发生器,产生脉冲1111101000,相当于数字1000,即给键值乘以1000倍,因为第四次按下按键时,需要给键值乘以1000。脉冲发生器,产生脉冲1111101000,相当于数字1000,二进制数字发生器,产生脉冲00001010,相当于十进制数字10,即给键值乘以10000倍,因为第五次按下按键时,需要给键值乘以10000。脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲01100100,相当于十进制数字100,即给键值乘以100000倍,因为第六次按下按键时,需要给键值乘以100000。脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲1111101000,相当于数字1000,即给键值乘以1000000倍,因为第七次按下按键时,需要给键值乘以1000000。二进制数字发生器,产生脉冲00001010,相当于十进制数字10,脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲1111101000,相当于数字1000,即给键值乘以100000000倍,因为第八次按下按键时,需要给键值乘以100000000。脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲1111101000,相当于数字1000,即给键值乘以1000000000倍,因为第九次按下按键时,需要给键值乘以1000000000。 当有符号按键按下时,按键计数器清零,记录按键次数为零,只有当字符按键按下时,异或门输出0,与门输出0,计数器清零。当没有按键按下时,有数字键按下时,异或门输出1,与门输出1。 计算器的总电路图如下: 第一部分 计算整数次方根 下面的电路可参见《数字工程》[美]G.K.科斯托普洛斯著,王玉龙,蔡勇译,张其善校,人民邮电出版社1981年出版。 附录A,计算整数次方根的一般方法的详细推导。 不论是哪一种数制中的数,其n次方根都可以通过每次只计算出一位当根的方法来确定。设R是数K的n次方根,其中n为整数,R可表示为: R=r r ......r r r ......r (A*1) im im-1 i1 f1 f2 fj 式中,R的整数部分分为m位,小数部分分为j位,等式(A1)也可表示为: m-1 R=(r r ......r r r ......r )Q (A2) im im-1 i1 f1 f2 fj 式中,Q是数制的基数,r 为非零数。取R的n次幂,则由式(A2)可得: im n n (m-1)n R =(r r ......r r r ......r ) *Q (A3) im im-1 i1 f1 f2 fj n 用字母h表示R 整数部分的位数,当括号里的数为最小时,k为最小。 这就是r 等于1,其余各r位都等于0时的情况,如下式所示: im (r r ......r r r ......r ) =(1.0.......0)=1(1位最小) (A4) im im-1 i1 f1 f2 fj 因此,k的最小值为式(A3)中基数Q的指数加1,即: (m-1)*n+1≤k (A5) 同样,当式(A3)括号里的数为最大时,k为最大。这就所有r位都等于Q-1时的情况,其中Q-1是Q数制中的最大数值。 n n n (r r ......r r r ......r ) =(Q-1.Q-1 Q-1 ......Q-1) =(10-0.00......1) (十进制) im im-1 i1 f1 f2 fj max (A6) 如果括号里的数仅是10,则取幂结果将为n+1位数: n n n n n 10 =(1.0*Q) =(1.0) Q =Q (n+1位整数) n n 因为括号里的数是10 的最邻近的偏低近似值,而10 是n+1位*整数的最小数,所以n应等于式(A6)中蒸熟的位数。*注:原文为n,疑错改为n+1,译者 . 因此,k的最大值为式(A3)中基数Q的指数(m-1)*n加n,即: k≤(m-1)n+n 或k≤mn (A7) 由式(A5)和(A7)则得: (m-1)n+1≤k≤mn (A8) 由式(A8)可知,当m增加1时,k的范围就增加n,也就是说,m的每一个单位对应于k的n个单位。 n 这表明R的每一位整数对应于K的n位数,即K=R 。换句话说,数K的每n位对应其n次方根中的一位,即 n K =R 设K为一个要算n次方根的数,并没有得之方根为: R=r r ......r r (A9) m m-1 2 1 也就是说一个数的方根等于这个数的的里面的一段数的方根的和, 为了简化计算方根的一般方法的推导过程,先只考虑方根的整数部分。 n-1 m-1 式(A9)中,r 位的权为Q ,其所表示的一个完整数为r Q , m m m-1 其中Q 表示r 位和小数点之间有m-1个零。 m 根位r 必须是一个使下列差值为最小的正值: m m-1 n K=(r r Q ) (A10) m m-1 同样,根位r 必须是一个使下列差值为最小的正值: 1 n K=(r r .......Q ) (A11) m m-1 1 以此类推,根位r 必须是一个使下列差值为最小值的正值: 1 n K=(r r .......r ) (A12) m m-1 1 式(A11)可写为: m-1 n m-1 n m-2 n K-(r Q ) +(r Q ) -(r r Q ) m m m m-1 m-1 n m-2 n m-1 n =[K-(r Q ) ]-[(r r Q ) -(r Q ) ] m m m-1 m m-1 n m-1 m-2 n m-1 n =[K-(r Q ) ]-[r Q +r Q ) -(r Q ) ] m m m-1 m n n 即为:[前面运算之差]-[(部分根+新位) -(部分根) ], 一个数的整数根等于这个数的部分根的和, 其中每一个新位必须使差值进一步减小。若用M表示上述减法中的被减数,用S表示减数,则S表示式为: m-1 n S (对 r )=(r Q ) (M =K) m m m m m-2 n m-1 n S (对r )=(r r Q ) -(r Q ) (M =M -S ) m-1 m-1 m m-1 m m-1 m m n n S (对r )=(r r ......r ) -[(r r ......r )Q] (M =M -S ) 1 1 m m-1 1 m m-1 2 1 2 2 S和M的一般表示式为: m-(t+2) n m-(t+1) n S =[(r r ......r r Q ] -[(r r ......r )Q ] m-(t+1) m m-1 m-1 m-(t+1) m m-1 m-i (M =M -S ) m-(t+1) m-t m-t 计算方根的一般方法的流程图如图A1所示。 图A1计算方根的一般方法的流程图。(注:r是使M-S的差为最小的非负数。)使正被计算的根有效位规格化,S表示式变为: n n S =[(r r ......r )Q+r ] -[(r r ......r )Q] m-(t+1) m m-1 m-I m-(t+1) m m-1 m-i 设已算得的部分根r r ......r =R,并设r为新的根位,则得: m m-1 m-i n n S=[QR+r] -[QR] (A14) 因为每次迭代中只有n个附加数位参加计算,所以上述算法可表示为如图A2所示。 若要计算平方根,则S表示式中的n应分别取2和3,如下所示: 2 2 S(求平方根)=(QR+r) -(QR) 2 2 2 =(QR) +2QRr+r -(QR) 2 =2QRr+r =(2QR+r)r (A15) 3 3 S(求立方根)=(QR+r) -(QR) 3 2 2 3 3 =(QR) +3(QR) r+3QRr +r -(QR) 3 2 3 =3(QR) r+3QRr +r 3 =3QRr(QR+r)+r 2 =[3QR(QR+r)+r ]r (A16) 若要计算十进制数的方根,则S表示式中的Q应取10.因此,计算十进制数平方根S表示式为: S=(20R+r)r (A17) 图A3表示了计算十进制数平方根的流程图,若要计算立方根,则S表示式为: 2 S=[30R(10R+r)+r ]r 图A4表示了计算十进制数立方根的流程图。同样,若要计算二进制数的方根,则S表示式中的Q应取2,因此,计算二进制数平方根的S表示式为: S=(AR+r)r 用A5表示了计算二进制数平方根的流程图。若要计算立方根,则S表示式为: 2 S=[6R(2R+r)+r ]r 图A6表示了计算二进制数立方根的流程图。 例如:计算√1426, 1.先计算√14,得到14的开方是3.74165738677, 2.所以最高位是3, 3.14减去3*3等于5,把它写在第二段数26的右边得到526, 4.用3*20得到60,再用60除526,所得的最大整数8, 5.用3*20得到60,用60加上8等于68,再用68*8得到544,(20*3+8)*8=544, 6.因为544>526,所以将8变为7,(20*3+7)*7=469, 7.1426开方得到37,√1426=37.762415177 求一个数的立方根的运算方法,叫做开立方。最早在我国的《九章算术》少广篇里有对开立方的记载。 1.将被开立方数的整数部分从个位起向左每三位分为一组。 2.根据最左边一组,求得立方根的最高位数。 3.用第一组减去立方根最高位数的立方,在其右边写上第二组数。 4.用求得的最高位数的平方的300倍试除上述余数,得出试商;并把求得的最高位数的平方的300倍与试商的积、求得的最高位数的30倍与试商的平方的积和试商的立方写在竖式左边, 5.用同样方法继续进行下去。 一、开根号方法 1.数m开n次方,n位一节为一根,前根均作a,a后需求的根均作b;前根a的位数不断增长,后根b永远做一位根视,直至开尽或开至所需要的位数。 2.首位a根用1~9n方块直接确定(随后就无a根系列的事了;或用双根或多位根作a;即将约小于被开数的乘方数的幂底整数值作为a根,再求b=x),b根用“标准固律方程式”或“简易求b方程式”求。 二、快速开根 从个位起向左每隔两位为一节,若带有小数从小数点起向右每隔两位一节,用逗号分开求不大于左边第一节数的完全平方数为商,再从左边第一节数里减去求得的商,在它们的差的右边写上第二节作为第一个余数再把商乘以20,试除第一个余数,所得的最大整数作试商用商乘以20加上试商在乘以试商。如果所得的积小于或等于余数,就把这个试商写在商后面,作为新商;如果所得的积大于余数,就把试商就、逐次减小再试,直到积小于或等于余数为止;用同样的方法,继续求。 求立方根的步骤 1.从个位向左每3位数分一节。最左一节可能是3位、2位也可能是1位数。分出几节说明立方根就有几位数。 2.求出最高(左边第一)节位立方根(整数),余数连接下一节3位数作为下一组的被除数, 3.用求出的立方根的2次方*300后试除被除数,能商几就用前面立方根的平方*300*商+前面立方根-30-商的平方+商的立方。(注:一般实际商会比试商少1,因为在试商的情况下还要+新商的立方),这个商就是所求立方根的第2位数。 4.同上:将第二次的余数连接下一节3位数作为新的被除数。 5.将前面已有两位数组成的立方根的平方*300后试除新的被除数,能商几就用前两位立方根的平方*300*商+前两位立方根-30-商的平方+商的立方。 这个商就是所求立方根的第3位数。 6.反复采用上述计算方法,直到余数是0为止。通过试商,如果发现商大于或商小于就减小或增大数字就行了。 总之求出的立方根必须与题目相符。 例1:求17576的立方根 解:分节:17`576,说明立方根有2位数,17的立方根(整数部分)是2, 2*2*2=8,17-8=9,9000+576=9576, 2的平方*300=1200,9576/1200最多商7,7-1=6(试商), 2*2*300*6+2*30*6*6+6*6*6=9576,9576-9576=0,20+6=26, 17576的立方根是26 例2:求13144256的立方根 解:分节:13`144`256 说明立方根有3位数,13的立方根(整数部分)是2, 2*2*2=8,13-8=5,5000+144=5144, 2的平方*300-1200,5144/1200最多商4,4-1=3(试商), 2*2*300*3+2*30*3*3+3*3*3=4167,5144-4167=977,977000+256=977256,23*23*300=158700, 13144256的立方根是236, 使用牛顿迭代法计算立方,开方 设A=X^3,求X,称为开立方。开立方有一个标准的公式: X(n+1)=Xn+(A/X^2-Xn)/3(n,n+1是下角标) 例如,A=5,k=3,即求5介于1的3次方至2的3次方之间(1的3次方=1,2的3次方=8), 初始值X0可以取1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,都可以。例如我们取X0=1.9按照公式: 第一步:X1=1.9+(5/1.9^2-1.9)/3=1.7, 即5/19*1.9=1.3850416,1.3850416-1.9=-0.5149584,-0.5149584*1/3=-0.1716528,1.9+(-0.1716528)=1.7。即取2位数值,即1.7. 第二步:X2=1.7+(5/1.7^2-1.7)/3=1.71, 即5/17*1.7=1.73010,1.73-1.7=0.03,0.03*1/3=0.01,1.7+0.01=1.71.取3位数,比前面多取一位数。 第三步:X3=1.71+(5/1.71^2-1.71)/3=1.709, 第四步:X4=1.709+(5/1.709^2-1.709)/3=1.7099, 这种方法可以自动调节,第一步与第三步取值偏大,但是计算出来以后输出值自动转小; 第二步,第四步输入值偏小,输出值自动转大。即5=1.7099^3。当然初始值X0也可以取1.1,1.2,1.3,.....1.8,1.9中的任何一个,都是X1=1.7>.当然,我们在实际中初始值最好采用中间值,即1.5.1.5+(5/1.5^2-1.5)1/3=1.7。 如果用这个公式开平方,只需将3改成2,2改成1.即 X(n+1)=Xn+(A/X-Xn)/2(n,n+1是下角标) 例如,A=5;5介于2的平方至3的平方之间。我们取初始值2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9都可以,我们最好取中间值2.5. 第一步:2.5+(5/2.5-2.5)/2=2.2; 即5/2.5=2,2-2.5=-0.5,-0.5*1/2=-0.25,2.5+(-0.25)=2.25,取2位数2.2。 第二步:2.2+(5/2.2-2.2)/2=2.23; 即5/2.2=2.272,2.272-2.2=-0.072,-0.072*1/2=-0.036,2.2+0.036=2.23.取3位数。 第三步:2.23+(5/2.23-2.23)/2=2.236。 即5/2.23=2.242,2.242-2.23=0.012,0.012*1/2=0.006,2.23+0.006=2.236, 每一步多取一位数。这个方法又叫反馈开方,即使你输入一个错误的数值,也没有关系,输出值会自动调节,接近准确值。关于这个方法的说明,1982年王晓明利用牛顿二项式推出这个公式,找到江西师范大学,一位教授觉得面熟,当场又推演一遍,与牛顿切线法一样。辽宁鞍山的傅钟鹏在他的《数学雅典娜》一书中介绍,天津新蕾出版社。由于是牛顿的公式,作者王晓明不敢贪天之功。所以傅种鹏老师在文章介绍也明确说明是由牛顿切线法推出。 下面的电路通过上面的公式实现计算开立方的功能 牛顿法:在实数域和复数域上近似求解方程的方法 也就是:△y/△x近似于y`,举个例子:利用牛顿进行数字的开方处理, 2 定义需要的方程:y=x , x y △y=a-y y`=2x △x=△y/y` 1 1 1 2 0.5 1.5 2.25 -0.25 3 -0.083 1.4167 2 0 2.8267 0 随着迭代更新x值的次数增多,所得达到的x值也就越接近答案。按照上述的推导过程,我们可以推导出牛顿法的表达式: 2 (a-x ) △x= 2x 到此牛顿法的主要公式就推导出来了,使用程序目的就是对x的值进行迭代更新。实现的代码为: def sqrt(a); x=1 for_in range(5); x=(a*x*x)/(2*x) return x 获取1-10的每个数字的平方根为: sqrt(1)=1.0 sqrt(2)=1.414213562373095 sqrt(3)=1.7320508075688772 sqrt(4)=2.0000000000002 例如,计算√17 3 3 已知2.5 =15.625,2.6 =17.576 3 所以设: √17=n,15.625<n<17.576,可设√16<n<17.64, 3 3 已知:2.5 =15.625,2.58 =17.1735 3 设:n= √17 3 3 n =(15.625+a) =15.625+3*15.625 *a 3 2 17.1735=2.5 +3*2.5 *a=15.625+3*6.25*a 17.1735=15.625+18.75a,a=1.5485/18.75=0.08259, 3 因此,n≈2.5+0.08259=2.58259,验算: √17=2.5712816,绝对误差=0.01131, 可以将2.5变为2.6,代入重新计算 3 2 17.1735=2.5 +3*2.6 *a=15.625+3*6.76*a 17.1735=15.625+20.28a,a=1.5485/20.28=0.076356,因此,n≈2.5+0.076356=2.576356。 牛顿迭代公式 f(x) X =X - n+1 n f`(x) 先来一段代码, 求9平方根java实现, double t=9; whil (Match.abs(t-9.0/t t=(9.0/t+t)/2. System.out.println(t);} 运行结果3.00009155413138, 牛顿法最初由艾萨克*牛顿在《流数法》(Method of Fluxions,1671年完成,在牛顿去世后于1736年公开发表)中提出。约瑟夫*鲍易也曾于1690年在Analysis Aequationum中提出此方法。 求导 首先,我们知道要对那个数开方,比如现在我们要求出√9, 2 那么可以写出x -9=0,这一步我想应该没有人看不懂。 2 f(x)=x -9 切线,然后画出它的二维图形,并作出点(9,f(9))处的切线,切线方程可以表示为, y-f(9)=f`(9)*(x-9),切线方程, y-f(9) x= +9 f`(9) 当y=0时,我们求到了x=6, 我们的目标√9的解为3,切线与x轴的交点为5,显然不是答案,我们还得继续做点(5,f(5))的切线,再切, y-f(5)=f`(5)*(x-5),切线方程, y-f(5) x= +5 f`(5) 16 x= +5 10 同样,当y=0时,x=3.....还得继续,继续切,已经很接近了,就不继续切线了 f(x ) 1 x =x = +5 2 1 f`(x ) 2 回顾一下, f(x)=x -a, f`(x)=2x, y-f(x ) n x = +x n+1 f`(x ) n n 当y=0时, f(x ) n x = +x n+1 f`(x ) n n 化简一下 2 x -a n x = +x n+1 2x n n 最后得到 a x =( +x )/2 n+1 x n n 以上就是牛顿迭代法求平方根的过程了, 写成java代码就是上面的样子, 总结一下: 1.f(x)求导 2.作k=f`(x)切线, 3.求出y=0时的x的值,赋值x 1 4.作k=f`(x )切线 1 5.求出y=0时的x 的值,赋值x 1 2 6.作k=f`(x )切线 2 7.重复上面的计算过程 牛顿迭代法(Newton`s method)又称牛顿-拉夫逊(拉佛森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 示例1:求解平方根 先来看如何用牛顿迭代法求解5的平方根。在计算器上的结果是2.236067..., 问题可以看作解方程x =5,下面尝试用牛顿迭代法求解。 2 首先令f(x)=x -5=0,这是标准步骤,取得一个新函数,令该函数为0.这是一个抛物线: 2 抛物线与x轴的交点x就是方程的解,它比2稍大一点。现在在x=2处对f(x)作切线。 f(x)的切线与x轴的交点,x =2,y =x -5=-1,设k是切线的斜率, 0 0 2 在x 处做f(x)的切线,重复上面步骤, 1 这就是牛顿迭代法的公式。通过作图可以看出,每一次迭代,x都将更靠近最终解。f`(x)=2x,将公式代入目标方程f(x)=x -5. 已经相当接近计算器的结果。 2 示例2:2cosx=3x 解方程2cos=3x, 由图像可知,方程存在唯一解。 f(x)=2cosx-3x=0,f`(x)=-2sinx-3,x =π/6≈0.52 0 f(x ) n 2cos(π/6)-3*π/6 2*0.866-π/2 x = +x = +π/6= +π/6 n+1 f`(x ) n -2sin(π/6) -1 n =π/3-2*0.866=0.1804≈0 注意事项: 牛顿迭代法几乎可以求解所以方程,但它仍然有一些限制。通过前两个例子可以看到,在使用牛顿迭代法时,需要选取一个较为解接近真实解的x0作为迭代基数,x0如何选取呢,一句参考是:“f”不能太小,f不能太大,x0要在x附近,这似乎要凭经验和感觉了,没有什么太好的办法。实际上,如果x0和x的差距过大,可能会得到一个没谱的解。设第n次迭代的误差是En=│x-xn│,那么需要满足En+1<En。如果选择和计算都正确,误差缩小的速度将非常快。以计算5的平方根为例,如果选择x0=2,结果将偏向于-2.236067.....;如果选择x0=0,则f`(0)=0,没法继续迭代,函数曲线如下图所示: 代码示例:牛顿迭代法开平方, 设x2=a,则f(x)=x2-a,根据牛顿迭代法公式: const float EPS=0.00001; double sqrt(double x){ if(x==0) return 0; double result=x; double lastvalue; do{ lastvalue=result; result=result/2.0f+x/2.0f/result; }while(abs(result-lastvalue)>EPS); return(double)result:} 上面方法开平方会很快,但http://www.2cto,com.kf/201206/137256.html中提到了一个更快的方法 例如,求√5 1.当x=2时,切线方程为 5 ( +2 )/2=2.25 2 2.当x=2.25时,切线方程为 5 ( +2.25 )/2=2.23611 2.25 3.当x=2.23611时,切线方程为 5 ( +2.23611 )/2=2.2360 2.23611 4.这样就得到√5=2.2360 因为, 3 f(x)=x -a 2 f`(x)=3x y-f(x ) n x = +x n+1 f`(x ) n n 当y=0时, f(x ) n x = +x n+1 f`(x ) n n 化简一下 3 x -a n x = +x n+1 2 n 3x n 3 例如,求 √5 1.当x=1时,切线方程为 5-1 +1=1.333 3 2.当x=1.333时,切线方程为 3 5-1.3333 +1.333=1.82636 2 3*1.3333 3.当x=1.82636时,切线方程为 3 5-1.82636 +1.82636=1.7172349 2 3*1.82636 4.当x=1.7172349时,切线方程为 3 5-1.7172349 +1.7172349=1.7100 2 3*1.7172349 5.当x=1.7100时,切线方程为 3 5-1.7100 +1.7100=1.709 2 3*1.7100 3 4.这样就得到 √5=1.709 同理可证: n f(x)=x -a n-1 f`(x)=nx y-f(x ) n x = +x n+1 f`(x ) n n 当y=0时, f(x ) n x = +x n+1 f`(x ) n n 化简一下 n x -a n x = +x n+1 n-1 n nx n 11 例如,求 √5 1.当x=1时,切线方程为 5-1 +1=1.3636 11 2.当x=1.3636时,切线方程为 11 5-1.3636 25.3079 +1.3636=- +1.3636=1.260087 10 244.4908502 11*1.3636 3.当x=1.260087时,切线方程为 11 5-1.260087 7.717619933 +1.4671=- +1.3636=1.19057 10 111.0191751 11*1.260087 4.当x=1.190579时,切线方程为 11 5-1.19057 1.81246 +1.190579=- +1.190579=1.16177 10 62.94221 11*1.19057 5.当x=1.16177时,切线方程为 11 5-1.16177 0.203813627 +1.16177=- +1.16177=1.1576 10 49.27132729 11*1.16177 11 6.这样就得到 √5=1.1576 第二部分 泰勒展开数字计算电路 可参见高等教育出版社菲赫金哥尔茨著1953年版《微积分教程》第一卷第一分册, 3 5 7 2m a a a m-1 a 2m sina=a- + - -...+(-1) +o(a ) (a→0) 3! 5! 7! (2m)! 2 4 6 2m a a a m a 2m+1 cosa=1- + - -...+(-1) +o(a ) (a→0) 2! 4! 6! (2m)! 3 5 7 2m-1 a a a m-1 a 2m arc tg a=a- + - -...+(-1) +o(a ) (a→0) 3 5 7 2m-1 详细推导见初等函数的展开 3 5 7 2k-1 x x x x sh x=x+ + + +…+ 3! 5! 7! (2k-1)! 2 4 6 2k x x x x ch x=1+ + + +…+ 2! 4! 6! (2k)! 推导过程参见399.根式的计算 m m(m-1) 2 m(m-1)...(m-n+1) n 2n (1+x) =1+mx+ x +…+ x +o(x ) 1*2 1*2...n x x(x-1) 2 x(x-1)...(x-n+1) n 2n (1+a) =1+ax+ a +…+ a +o(x ) 1*2 1*2...n √2的近似值1.4可以通过下面的方法得到 1/2 (1/2)*(1/2-1) m(m-1)...(m-n+1) n (1+1) =1+1/2+ +…+ x +..≈1.5-0.08333≈1.4166 1*2 1*2...n 推导过程参见398..对数的计算 n+1 2 1 1 1 1 ln =ln (n+1)-ln n= [1+ * 2 + * 4 +…] n 2n+1 3 (2n+1) 5 (2n+1) 当n=1时,得到ln 2的展开式: 2 1 1 1 1 1 1 1 1 ln 2= (1 + * + * 2 + * 3 + * 4 3 3 9 5 9 7 9 9 9 1 1 1 1 1 1 1 1 + * 5 + * 6 + * 7 + * 8 +…) 11 9 13 9 15 9 17 9 我们还知道 2 3 4 n x x x x n ln (1+x)=x- + + +…+(-1) +o(x ) 2 3 4 n 1 2 1 3 3 ln cos x=ln[1+(cos x-1)]=(cos x-1)- (cos x-1) + (cos x-1) +o((cos x-1) ) 2 3 1 2 1 3 6 ln cos x=ln[1+(cos x-1)]=(cos x-1)- (cos x-1) + (cos x-1) o(x ) 2 3 2 4 6 2m x x x m x 7 cosx=1- + - -...+(-1) +o(x ) 2! 4! 6! (2m)! 所以, 2 4 6 4 8 6 x x x 1 x x 1 x 6 ln cos x=(- + - ) - ( - )+ (- )+ o(x ) 2 24 720 2 4 24 3 8 或在化简后 2 4 6 x x x 7 lncosx=- - - +o(x ) 2 12 45 3 5 2m-1 2!! x 4!!x m-1 (2m-2)!! x 2m arc sin x=x- + -......+(-1) +o(x ) 3!! 5!! (2m-1)!! 注;5!!=1*3*5,6!!=2*4*6 2 n x x x x n e =1+ + + +o(x ) 1! 2! n! sinx 1 2 1 6 3 e =1+sinx+ sin x+ sin x +o(sin x) 2 6 sinx 1 2 1 6 3 e =1+sinx+ sin x+ sin x +o(x ) 2 6 详细内容参见《大学丛书微积分学》,根据泰勒展开 3 5 7 2n-1 x x x n-1 a 2n arc tg x=x- + - -...+(-1) +o(a ) (a→0) 3 5 7 2n-1 m m(m-1) 2 m(m-1)...(m-n+1) n 2n (1+x) =1+mx+ x +…+ x +o(x ) 1*2 1*2...n 特别情形,例如在n=2及m=-1,1/2,-1/2时,就有 1 2 2 =1-x+x +o(x ) 1+x 1 1 2 2 1+x =1+ x- x +o(x ) 2 8 1 1 3 2 2 =1- x+ x +o(x ) 1+x 2 8 2 3 n x x n-1 x n ln(1+x)=x- + -...+(-1) +o(x ) 2 3 n 根据戴劳公式(120a) 3 x 4 tg x=x+ +o(x ) 或or 3 3 5 7 2m-1 2x 4x 6x m (2m)x n tg x=x+ - + -...+(-1) +o(x ) (-π/2<x<π/2) 3 5 7 2m-1 例如: tg π/4=1, 3 0.785339 tg 0.785339=0.785339+ =1.0928 3 tg π/4=1, 3 5 7 2*0.785339 4*0.785339 6*0.785339 tg 0.785339=0.785339+ - + 3 5 7 根据泰勒展开, 2 4 6 2m a a a m a 2m+1 cosa=1- + - -...+(-1) +o(a ) 2! 4! 6! (2m)! 所以, 2 4 6 2m a a a m a 2m+1 f(x)=-lncosa+C=-ln[1- + - -...+(-1) +o(a ) ]+C 2! 4! 6! (2m)! 可参见高等教育出版社菲赫金哥尔茨著1953年版《微积分教程》第一卷第一分册, 6 9)写出函数ln cos x的展开式至x 的项。根据5) 1 2 1 3 3 ln cos x=ln[1+(cos x-1)]=(cos x-1)- (cos x-1) + (cos x-1) +o((cos x-1) ) 2 3 1 2 1 3 6 ln cos x=ln[1+(cos x-1)]=(cos x-1)- (cos x-1) + (cos x-1) o(x ) 2 3 上式中 2 3 4 5 (1-N) (1-N) 2 (1-N) 2 3 (1-N) 2 3 4 lnN=[(1-N)+ + + + 2 2 3 2 3 4 2 3 4 5 n (1-N) 2 3 4 n-1 +..+ … ] 2 3 4 5 n 上式中,N<1 当N>1时, m lgN=m-[(1-N/10 )+ m 2 m 3 m 4 m 5 (1-N/10 ) (1-N/10 ) 2 (1-N/10 ) 2 3 (1-N/10 ) 2 3 4 + + + 2 2 3 2 3 4 2 3 4 5 m n (1-N/10 ) 2 3 4 n-1 +..+ … ] 2 3 4 5 n m 上式中,N/10 <1,根据泰勒展开, 2 3 n x x n-1 x n ln(1+x)=x- + -...+(-1) +o(x ) 2 3 n 所以, 1 2 1 3 3 ln sex x=ln[1+(sex x-1)]=(secx-1)- (sec x-1) + (sec x-1) +o((sec x-1) ) 2 3 1 2 1 3 6 ln sec x=ln[1+(sec x-1)]=(sec x-1)- (sec x-1) + (sec x-1) +o(x ) 2 3 所以, 1 2 1 3 3 f(x)=lnseca+C=(sec a-1)- (sec x-1) + (sec x-1) +o((sec x-1) ) 2 3 1 2 1 3 6 f(x)=lnseca+C=(sec a-1)- (sec x-1) + (sec x-1) +o(x ) 2 3 推导过程可参见1934年商务印书馆出版《大学丛书高等算学分析》,熊庆来著, 推导过程参见《微积概要》国立中山大学学院院长何衍睿,李铭槃,苗文绥,合编,1935年版,商务印书馆出版, 因为, m m(m-1) 2 m(m-1)...(m-n+1) n 2n (1+x) =1+mx+ x +…+ x +o(x ) 1*2 1*2...n 2 所以,当x =-x ,m=-1/2时,有 1 1 2 1*3 4 1*3*......(2n-1) 2n 2n+2 =1+ x + x +…+ x +o(x ) 2 2 2*4 2*4*......2n 1-x 两边积分得 3 5 2n+1 1 x 1*3 x 1*3*......(2n-1) x 2n+2 arc sin x=x+ + +…+ +o(x ) 2 3 2*4 5 2*4*......2n 2n+1 3 5 7 2n-1 x x x n-1 a 2n arc tg x=x- + - -...+(-1) +o(a ) (a→0) 3 5 7 2n-1 当x=1时,由上式可得 π 1 1 1 n 1 =1- + - -...+(-1) +… 4 3 5 7 2n+1 2 n x x x x n e =1+ + + +o(x ) 1! 2! n! loga x xloga 因为a=e , a =e 所以, 2 1 n n x xloga x (loga) x (loga) n+1 e =1+ + - +o(x ) 1! 2! n! 2 3 5 2n+1 1-x π x x x 2n+2 arctan = -x+ - +…+(-1) +o(x ) 在区间(-π/2,+π/2) 1+x 4 3 5 2n+1 推导过程可参见《古今算学丛书,割圆密率捷法》,清光绪戊戌六月算学书局印成,1898年刘铎整理. 当N<1时 |
| 发帖须知: 1,发帖请遵守《计算机信息网络国际联网安全保护管理办法》、《互联网信息服务管理办法》、 《互联网电子公告服务管理规定》、《维护互联网安全的决定》等法律法规。 2,请对您的言论负责,我们将保留您的上网记录和发帖信息。 3,在此发帖表示认同我们的条款,我们有权利对您的言论进行审核、删除或者采取其他在法律、地方法规等条款规定之内的管理操作。 |