欢迎光临散文网 会员登陆 & 注册

怎样手算π次根号5

2023-01-19 14:02 作者:小给猫  | 我要投稿

前段时间看了一个手算开平方的视频,感觉还是不够通用。

说起通用,首先把我们要计算的根式通用化。我们常见的平方根、立方根,或者叫二次方根、三次方根,其实都可以写成幂函数的形式。

%5Csqrt%5Bx%5D%7Ba%7D%20%3Da%5E%7B%5Cfrac%7B1%7D%7Bx%7D%7D

说一个日常的小习惯。大家如果平时用Excel的话,遇到计算平方根的时候会怎么做呢?Excel内置的函数中SQRT()就是计算平方根的。如果计算根号2,就是SQRT(2)。但是我平时喜欢写成幂函数形式,也就是a ^ x的形式。根号2就是2 ^ 0.5 。

※这里说指数函数也行。函数变量是底数叫幂函数,变量是指数叫指数函数

个人觉得,根式的幂函数形式写起来更顺畅,做一些规则也更方便。

 

回到主题。我们现在需要手工计算π次根号5 。

%5Csqrt%5B%CF%80%5D%7B5%7D%20%3D5%5E%7B%5Cfrac%7B1%7D%7B%CF%80%7D%7D

我之前写过一篇用泰勒展开式手算三角函数的,这回也还是用老办法。以e(自然对数的底)为底数的指数函数有一个比较简洁的泰勒展开式。

e%5Ex%3D%5Csum_%7Bn%3D0%7D%5E%20%20%E2%88%9E%20%5Cfrac%7Bx%5En%20%7D%7Bn!%7D

想用这个公式就必须要把幂函数转换成以e为底的指数函数,那就套个换底公式。

a%5Ex%3De%5E%7Bx%5Ccdot%20%20ln(a)%7D

那么我们要计算的就是:

5%5E%5Cfrac%7B1%7D%7B%CF%80%7D%20%3De%5E%5Cfrac%7Bln(5)%7D%7B%CF%80%7D

那么问题来了,对数怎么算呢?ln(5)怎么计算。

其实我们不妨再套一次泰勒展开。

ln(x%2B1)%3D%5Csum_%7Bn%3D1%7D%5E%E2%88%9E%5Cfrac%7B(-1)%5E%7Bn%2B1%7D%20%7D%7Bn%7D%20x%5En%20

不过这个式子有一个前提,x的范围必须是-1~1之间(可以等于1,不可等于-1)。

所以这个方法至多计算到ln(2)。算ln(5)就超范围了。但是我们可以用对数的特性解决这个事情。5=2×2×1.25,那么:

ln(5)%3Dln(2%5Ctimes%202%5Ctimes%201.25)%3D2%5Ctimes%20ln(2)%2Bln(1.25)

ln(1.25)不就能算了吗。

ln(0.25%2B1)%3D%5Csum_%7Bn%3D1%7D%5E%E2%88%9E%5Cfrac%7B(-1)%5E%7Bn%2B1%7D%20%7D%7Bn%7D0.25%5En

好了,现在只要把n取的足够大,就能得到我们想要的精度的结果。老办法我们用Excel内置的VBA来实现这个新函数,看看n与精度的关系。代码如下:

Function PowTay(a As Double, x As Double, n As Integer) As Double

Dim i As Integer

Dim at As Double

Dim an As Integer

Dim k As Double

Do While a > 2

 an = an + 1

 a = a / 2

Loop

at = an * Log(2)

a = a - 1

For i = 1 To n

 at = at + ((-1) ^ (i + 1)) * (a ^ i) / i

Next i

x = at * x

For i = 0 To n

 k = Application.WorksheetFunction.Fact(i)

 PowTay = PowTay + (x ^ i) / k

Next i

End Function

函数的名字叫PowTay,有3个变量。a是底数,x是指数,n是泰勒展开式中n的取值。

这里为了图方便,ln(2)的值就当常数直接用了。

与工作表里不同,VBA里的对数函数Log()是以e为底的,相当于ln()。如果要用其他底数的话可以套个换底公式。

Application.WorksheetFunction.Fact(i)是调用工作表里的阶乘函数FACT()。

我们可以计算一下n取1到10时,计算值与实际值得偏差,代码如下:

Sub text2()

Dim a As Double

Dim x As Double

Dim n As Integer

Dim s As Double

a = 5

x = 1 / Application.WorksheetFunction.Pi()

s = a ^ x

For n = 1 To 10

 Cells(n + 1, 1).Value = n

 a = 5

 x = 1 / Application.WorksheetFunction.Pi()

 Cells(n + 1, 2).Value = s - PowTay(a, x, n)

Next n

End Sub

因为函数运算的时候a和x的值会改变,所以每次运算前要重新赋值(也可以把函数优化一下)。运行结果如下:

通常我们有个n=4的精度其实也差不多了。所以就取n=4,写成可以手算的形式。

π和ln(2)就取到小数点后5位。结果取小数点后4位。

π=3.14159,ln(2)=0.69315

ln(5)%3D2%5Ctimes%20ln(2)%2B%5Csum_%7Bn%3D1%7D%5E4%20%5Cfrac%7B(-1)%5E%7Bn%2B1%7D%20%7D%7Bn%7D0.25%5En%20%3D2%5Ctimes%200.69315%2B0.25-%5Cfrac%7B0.25%5E2%20%7D%7B2%7D%2B%5Cfrac%7B0.25%5E3%20%7D%7B3%7D-%5Cfrac%7B0.25%5E4%20%7D%7B4%7D

结果是1.60928

1.60928/3.14159是0.51225

%5Csqrt%5B%CF%80%5D%7B5%7D%20%3De%5E%7B0.51225%7D%3D%5Csum_%7Bn%3D0%7D%5E4%20%5Cfrac%7B0.51225%5En%20%7D%7Bn!%7D%3D1%2B0.51225%2B%5Cfrac%7B0.51225%5E2%20%7D%7B2%7D%2B%5Cfrac%7B0.51225%5E3%20%7D%7B6%7D%2B%5Cfrac%7B0.51225%5E4%20%7D%7B24%7D

这样就变成有理数加减乘除的形式了。

计算结果是1.6687 。

 

这个方法具有很好的普适性,即便带着无理数也能计算。你也可以试试看计算5的π次方会是什么结果。

当然,这个方法的弊端就是计算结果数值越大,n的取值就必须大一些才能满足精度。我试了一下计算5的3次方,n要取到13才能让结果大于124.9 。


怎样手算π次根号5的评论 (共 条)

分享到微博请遵守国家法律