怎样手算π次根号5|今日播报
2023-01-19 14:02:35 哔哩哔哩

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

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

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


【资料图】

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

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

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

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

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

那么我们要计算的就是:

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

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

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

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

ln(1.25)不就能算了吗。

好了,现在只要把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

结果是1.60928

1.60928/3.14159是0.51225

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

计算结果是1.6687 。

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

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

相关新闻: