www.teandq.com
晓安科普

科学计算器在线计算器开根号(科学计算器根号下的计算)万万没想到

2023-08-22Aix XinLe

序平常我们用到的 sqrt 函数求一个数的算术平方根,以前一直好奇究竟是如何计算的。这篇文章我们就一起来探究一下。二分法以前我想到的一种方式是二

科学计算器在线计算器开根号(科学计算器根号下的计算)万万没想到

 

序平常我们用到的 sqrt 函数求一个数的算术平方根,以前一直好奇究竟是如何计算的这篇文章我们就一起来探究一下二分法以前我想到的一种方式是二分法;假设求根号2的平方根;假设最开始 min = 1.0,max = 2.0;。

则它们的中间值 val = (min+max)/2.0;然后判断 num = val*val 的结果,如果 num > 2;则 max = val;如果 num < 2;则 min = val;如果 num = 2;则 算术平方根是 val,返回。

当然有人会问,一直不等于能,当然我们可以设置计算次数;比如执行超过 20 次后就返回,这样可以避免无线循环下去然而这种方法的收敛速度实在太慢,导致要计算很多次才能达到比较高的精度牛顿的方法网上看到一个说是牛顿的计算方法,假设 f(x) = x^2-2;。

在 x^2-2 的曲线上面,先找一个点A(X0,Y0),过点A做曲线的切线交x轴于B(X1,0);找到当前点B对应曲线上的点C(X1,Y1);过点C做曲线的切线交x轴于D(X2,0);找到当前点D对应曲线上的点E(X2,Y2);

过点E做曲线的切线交x轴于F(X3,0);.........按照这个过程一直下去,B D F....将会离曲线与x轴的交点越来越近,即逼近原理。

数学方法那上面的坐标如何求取呢,对于点A,可以带入一个方便的坐标(1,-1);由于CD是切线,点C为切点,则有如下关系:斜率 y = BC/BD而:BD 可以看成是点B的x轴坐标减去点D的x轴坐标,即 BD = X1-X2;

BC 就是C点的y值,即Y1;上面关系就变成:y = Y1/(X1-X2)转换一下:X1-X2 = Y1/yX2 = X1-Y1/y转换成标准的写法,则有: Xn = Xn-1 - f(Xn-1) / f (Xn-1)

对于曲线 x^2-2 任意一点的切线可以根据多项式导数方式获取,即 f (Xn-1) = 2x;则有 Xn = Xn-1 - f(Xn-1) / 2x;将A点(X0,Y0) 由曲线上的点(1,-1)带入时,

X1 = 1 - (-1/2*1) = 1.5; 此时 Y1 = 1.5^2-2 = 2.25-2 = 0.25;X2 = 1.5 - 0.25/2*1.5 = 1.416666...667; 此时 Y1 = 0.0069444444...

以此类推X6 = 1.4142135623730950488016887242096980785696718753772.......对比网上查找到的根号2前100为如下: 1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850....

可以看到X6写出来的,仅仅是最后两位开始不一样可见运算次数仅仅6次,精度已经如此高了代码实现由于C/C++没找到比较稳定的高精度计算数据类,在此用Python代替了实现代码如下:fromdecimalimport

Decimalfromdecimalimportgetcontextwork_context=getcontext()work_context.prec=1000//有兴趣的可以试试更高精度num=Decimal(2)

//需要开方的数,可以试试3,5,7,11defXn(x,y):x-=y/(x*Decimal(2))y=x*x-numreturn(x,y)x=Decimal(1)y=x*x-numforiinrange(0,20):

//计算20次精度已经非常高了x,y=Xn(x,y)print(x)第20次结果:(好像精度已经达到1000位了)1.414213562373095048801688724209698078569671875376948073176679737990732478462

1070388503875343276415727350138462309122970249248360558507372126441214970999358314132226659275055927557999505011527820605714701095599716059702745345968620

1472851741864088919860955232923048430871432145083976260362799525140798968725339654633180882964062061525835239505474575028775996172983557522033753185701135

4374603408498847160386899970699004815030544027790316454247823068492936918621580578463111596668713013015618568987237235288509264861249497715421833420428568

6060146824720771435854874155657069677653720226485447015858801620758474922657226002085584466521458398893944370926591800311388246468157082630100594858704003

1864803421948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698683684507257993647290607629969413804756548237

2899718032680247442062926912485905218100445984215059112024944134172853147810580360337107730918286931471017111168391658172688941975871658215212822951848847

是不是感到震惊,代码竟然如此短!?是的,没有看错,就这么一点点有兴趣的小伙伴可以试试 https://tool.lu/coderunner/ 的在线编译器;左上角选择 Python 然后复制上面的代码,运行看看结果。

(如下图)按照同样的方式,大家是不是可以扩展出3次,5次.....等等的开方计算方式了?

总结有时候思路正确了,所要做的反而就很少了!我在心里十分佩服前人的智慧与伟大!一起努力,加油!

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186

科学科学计算器在线计算器开根号(科学计算器根号下的计算)万万没想到

2023-08-22Aix XinLe67

科学计算器在线计算器开根号(科学计算器根号下的计算)万万没想到序平常我们用到的 sqrt 函数求一个数的算术平方根,以前一直好奇究竟是如何计算的。这篇文章我们就一起来探究一下。二分法以前我想到的一种方式是二…

趣闻一篇读懂趣闻生活app下载(趣闻天下app下载)

2023-08-22Aix XinLe164

一篇读懂趣闻生活app下载(趣闻天下app下载)引言在当今社会,家庭是一个人成长的基石,也是一个社会的基本单位!然而,有些家庭却被不良势力所渗透,成为了“家族式”淫窝的存在。近日,在广西地区,…

历史奔走相告chinajoy开幕(chinajoy算漫展吗)

2023-08-22Aix XinLe162

奔走相告chinajoy开幕(chinajoy算漫展吗)前言第二十届中国国际数码互动娱乐展览会(ChinaJoy), 在上海举办。 侃侃这次亲身体验了漫展, 收获不少, 这里分享给大家。 请大家随我一…

科学古诗词欣赏(著名的牛首山古诗词欣赏)燃爆了

2023-08-22Aix XinLe119

古诗词欣赏(著名的牛首山古诗词欣赏)燃爆了一个“亦”字,蕴含了一种无奈,山里风光确实好,但和以前的生活环境相比有差距,含蓄委婉,耐人寻味。颔联描绘出了一幅安逸闲适而又生机勃勃的山村生活图…

趣闻深度揭秘趣闻赚app官方下载(游赚盒子APP下载官方下载)

2023-08-22Aix XinLe140

深度揭秘趣闻赚app官方下载(游赚盒子APP下载官方下载)近日,小编成功的拿到了刷钱APP最新升级版本V3.07.2,这次的软件的升级在维持之前超给力的收益外,还增加了不少新功能,其中的找到功能的加入实…