强基初中数学&学Python——第207课 数字和数学模块之二: math数学函数(五,完结篇)

  双曲函数

  一般三角函数是基于圆的,在直角坐标系统点(x,y)满足圆方程。

x²+y²=1。

如果把加号改为减号,即

x²-y²=1。

移项,得

x²=y²+1,

所以

y=±√(x²-1),

即分段函数

y=√(x²-1),(x≤-1)  ①

y=-√(x²-1),(x<-1)  ②

y=√(x²-1),(x≥1)  ③

y=-√(x²-1)。(x>1)  ④

①②连成一条曲线,③④也连成一条曲线,两条曲线对称,与双曲线比较相似,用它实现的三角函数就是双曲函数了(注意了,没有“线”字)。

 

 

  acosh(x)

  返回 x 的反双曲余弦值。定义域[1,inf],值域[0,inf](双曲函数第一象限)。

 

  计算公式:

 

>>>from math import acosh,inf,sqrt,log

>>>acosh(1.0), acosh(2.0), acosh(inf)

(0.0, 1.3169578969248166, inf)

>>>acosh(-1.0)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: math domain error

>>>acosh(10),log(10+sqrt(10**2-1))

(2.993222846126381, 2.993222846126381)

 

  asinh(x)

  返回 x 的反双曲正弦值。定义域[-inf,inf],值域[-inf,inf]。计算公式:

 

>>>from math import asinh,inf,sqrt,log

>>>asinh(0.0),asinh(2.0),asinh(inf)

(0.0, 1.4436354751788103, inf)

>>>asinh(-0.0),asinh(-2.0),asinh(-inf)

(-0.0, -1.4436354751788103, -inf)

>>>asinh(10),log(10+sqrt(10**2+1))

(2.99822295029797, 2.99822295029797)

 

  atanh(x)

  返回 x 的反双曲正切值。定义域(-1,1),值域(-inf,inf)。计算公式:

 

>>>from math import atanh,inf,sqrt,log

>>>atanh(-.999),atanh(0),atanh(.999)

(-3.8002011672501994, 0.0, 3.8002011672501994)

>>>atanh(.99999999999),log((1+.99999999999)/(1-.99999999999))/2

(13.01079156037454, 13.01079156037454)

 

  cosh(x)

  返回 x 的双曲余弦值。定义域[-inf,inf],值域[1,inf]。计算公式:

 

>>>from math import cosh,inf,exp

>>>cosh(-inf),cosh(0),cosh(inf)

(inf, 1.0, inf)

>>>cosh(10),(exp(10)+exp(-10))/2

(11013.232920103323, 11013.232920103324)

 

  sinh(x)

  返回 x 的双曲正弦值。定义域[-inf,inf],值域[-inf,inf]。计算公式:

 

>>>from math import sinh,inf,exp

>>>sinh(-inf),sinh(0),sinh(inf)

(-inf, 0.0, inf)

>>>sinh(10),(exp(10)-exp(-10))/2

(11013.232874703393, 11013.232874703393)

 

  tanh(x)

  返回 x 的双曲正切值。定义域[-inf,inf],值域[-1,1]。计算公式:

 

>>>from math import tanh,inf,exp

>>>tanh(-inf),tanh(0),tanh(inf)

(-1.0, 0.0, 1.0)

>>>tanh(10),(exp(10)-exp(-10))/(exp(10)+exp(-10))

(0.9999999958776927, 0.9999999958776926)

 

  特殊函数

 

  erf(x)

  返回 x 处的误差函数error function,如下图)的值 。

 

定义域[-inf,inf],值域[-1,1]。计算公式(积分函数):

 

>>>from math import erf,inf

>>>erf(-inf),erf(-1),erf(0),erf(1),erf(inf)

(-1.0, -0.8427007929497149, 0.0, 0.8427007929497149, 1.0)

  误差函数erf()可以用来计算像累积标准正态分布这样的传统统计函数:

· 

· 

· 

· 

· 

from math import erf,sqrtdef phi(x):    '''Cumulative distribution function for     the standard normal distribution'''    return (1.0 + erf(x / sqrt(2.0))) / 2.0

  在《五行星Python几何画板》中作图如下视频:

,时长00:30

 

  erfc(x)

  返回 x 处的互补误差函数。互补错误函数定义为 1.0 - erf(x)。如果采用定义的方法,当 x 值较大时,减法会导致有效位数的损失。该函数采用不同的算法,避免这种情况的发生。

>>>from math import erf,erfc

>>>erfc(0),1.0-erf(0)

(1.0, 1.0)

>>>erfc(1),1.0-erf(1)

(0.1572992070502851, 0.1572992070502851)

>>>erfc(2),1.0-erf(2)

(0.004677734981047266, 0.004677734981047288)

>>>erfc(4),1.0-erf(4)

(1.541725790028002e-08, 1.5417257914762672e-08)

>>>erfc(8),1.0-erf(8)

(1.1224297172982928e-29, 0.0)

 

  gamma(x)

  返回 x 处的伽马函数值。定义域(0,inf]。在实数域上伽玛函数定义为:

 

>>>from math import gamma,inf

>>>gamma(1e-10),gamma(1),gamma(inf)

(9999999999.422785, 1.0, inf)

 

  lgamma(x)

  返回Gamma函数在 x 处绝对值的自然对数。

>>>from math import gamma,lgamma,inf

>>>lgamma(1e-10),log(abs(gamma(1e-10)))

(23.025850929882736, 23.025850929882736)

>>>lgamma(1e-5),log(abs(gamma(1e-5)))

(11.512919692895824, 11.512919692895826)

>>>lgamma(1),log(abs(gamma(1)))

(0.0, 0.0)

>>>lgamma(100),log(abs(gamma(100)))

(359.1342053695754, 359.1342053695754)

>>>lgamma(200),log(abs(gamma(200)))

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

OverflowError: math range error

 

  常量

 

  math.pi

  数学常数 π = 3.141592...,精确到可用精度。

 

  math.e

  数学常数 e = 2.718281...,精确到可用精度。

 

  math.tau

  数学常数 τ = 6.283185...,精确到可用精度。Tau 是一个圆周常数,等于 2π,圆的周长与半径之比。

 

  math.inf

  浮点正无穷大。(对于负无穷大,使用 -math.inf 。)相当于 float('inf') 的输出。

 

  math.nan

  一个浮点的 "非数字"(NaN)值。相当于 float('nan') 的输出。由于 IEEE-754标准的要求, math.nan 和 float('nan') 不被认为等于任何其他数值,包括其本身。要检查一个数字是否为NaN,请使用 isnan() 函数来测试 NaN ,而不是 is 或 == 。例子:

>>>import math

>>>math.pi

3.141592653589793

>>>math.e

2.718281828459045

>>>math.tau

6.283185307179586

>>>math.inf

inf

>>>math.nan

nan

>>>math.nan == math.nan

False

>>>float('nan') == float('nan')

False

>>>math.isnan(math.nan)

True

>>>math.isnan(float('nan'))

True

 

  math模块主要是标准C语言数学库函数的简单包装。无效操作一般抛出ValueError异常,如 sqrt(-1.0) 或 log(0.0), 和结果溢出抛出OverflowError异常,例如, exp(1000.0) 。除非一个或多个输入参数是NaN,否则不会从本模块函数返回NaN;不过有例外,例如pow(float('nan'), 0.0) 和 hypot(float('nan'), float('inf')) 。

>>>import math

>>>math.sqrt(-1.0)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: math domain error

>>>math.log(0.0)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: math domain error

>>>math.exp(1000)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

OverflowError: math range error

>>>math.pow(float('nan'), 0.0)

1.0

>>>math.hypot(float('nan'), float('inf'))

inf