六、常用函数
fadd(x,y,**kwargs)
作用:实现精度要求下的加法运算。
from mpmath import *
print(fadd(1, 1e-10)) #1+1e-10,精度没有损失
>>>1.0000000001
print(fadd(1, 1e-20)) #1+1e-20,精度有损失
>>>1.0
nprint(fadd(1, 1e-20, dps=20), 21) #1+1e-20,指定保留20位有效数字,精度没有损失。nprint输出21位数
>>>1.00000000000000000001
nprint(fadd(1, 1e-20, prec=70), 21) #1+1e-20,指定保留70字节,精度没有损失。nprint输出21位数
>>>1.00000000000000000001
nprint(fadd(1, 1e-20, prec=20), 21) #1+1e-20,指定保留20字节,精度有损失。nprint输出21位数,但被省略
>>>1.0
nprint(fadd(1, 1e-20, rounding='u'), 22)#1+1e-20,指定以'up'的方式进行rounding(数值修约),具体待老夫翻翻数值分析
>>>1.000000000000000444089
nprint(fadd(1, 1e-20, exact=True), 21) #1+1e-20,指定保留精确值,精度没有损失。nprint输出21位数
>>>1.00000000000000000001
下面函数的精度调节方法与 fadd 相似,不再赘述。
fsub(x,y,**kwargs)
作用:实现精度要求下的减法运算。
用法同上,略fneg(x,**kwargs)
作用:实现精度要求下的相反数运算。
用法同上,略
fmul(x,y,**kwargs)
作用:实现精度要求下的乘法运算。
用法同上,略
fdiv(x,y,**kwargs)
作用:实现精度要求下的除法运算。
用法同上,略
fmod(x,y)
作用:实现精度要求下的同余运算。
from mpmath import *
print(fmod(34, 3)) #求34除以3的余数
>>>1.0
print(fmod(12.154, 1)) #求12.154除以1的余数,即小数部分
>>>0.154
fsum(terms,absolute=False,squared=False)
作用:实现连续求和运算。
关于精度:
from mpmath import *
print(fsum([1, 2, 3])) #对1,2,3进行连续求和
>>>6.0
print(fsum([1, 2, 3, 1e-10])) #对1,2,3,1e-10进行连续求和,精度没有损失
>>>6.0000000001
print(fsum([1, 2, 3, 1e-20])) #对1,2,3,1e-20进行连续求和,精度有损失
>>>6.0
mp.dps = 23 #fsum函数不自带精度调整功能,要通过mp对象调节,此处设定23位有效数字
print(fsum([1, 2, 3, 1e-20])) #对1,2,3,1e-20进行连续求和,精度没有损失
>>>6.00000000000000000001
关于求和:
from mpmath import *
print(fsum([1, 2, 3])) #对1,2,3求和
>>>6.0
print(fsum([1, -2, 3], absolute=True)) #对1,2,3求绝对值和
>>>6.0
print(fsum([1, -2, 3], squared=True)) #对1,2,3求平方和
>>>14.0
fprod(factors)
作用:实现连续求积运算。
from mpmath import *
print(fprod([1, 2, 3])) #对1,2,3求积
>>>6.0
fdot(A,B=None,conjugate=False)
作用:实现两个数组的点乘运算。
from mpmath import *
print(fdot([1, 2, 3], [1, 2, 3])) #(1,2,3)*(1,2,3)
print(fdot([1, 2, 3], [1+j, 2+j, 3+j], conjugate=False)) #(1,2,3)*(1+i,2+i,3+i)
print(fdot([1, 2, 3], [1+j, 2+j, 3+j], conjugate=True)) #(1,2,3)*(1-i,2-i,3-i)
fabs(x)
作用:实现绝对值或模运算。
用法略。
sign(x)
作用:实现符号运算。
用法略。
re(x) 和 im(x)
作用:实现提取实部或虚部的运算。该作用可被mpcObject.real 或者mpc.Object.imag代替。
用法略。
arg(x)
作用:实现求取复数转角的运算。
用法略。
conj(x)
作用:实现复数共轭运算。
用法略。
rect(x)
作用:实现根据极坐标得到复数的运算。
from mpmath import *
print(rect(2,0.3*pi)) #求 rho=2,cita=0.3*pi对应的复数
>>>1.17557050458495 + 1.61803398874989j
floor(x)
作用:实现下取整运算。
用法略。
ceil(x)
作用:实现上取整运算。
用法略。
nint(x)
作用:实现四舍五入操作。
用法略
frac(x)
作用:实现求小数部分运算。
用法略。注意正负数的小数部分不相同。
chop(x,tol=None)
作用:实现在容忍度内切断尾数的操作
from mpmath import *
print(chop(5+1e-10j, tol=1e-9)) #在容忍度为1e-9的前提下,切断5+1e-10的尾数
>>>5.0
isinf(x)
作用:实现判断是否为无穷的运算。
用法略。
isnan(x)
作用:实现判断是否为非数的运算。
用法略。
isnormal(x)
作用:实现判断是否为正常浮点数的运算。
该函数将0,NaN和Inf视作不正常,其余正常。
isint(x,gaussian=False)
作用:实现判断是否为整数的运算。
当gaussian=True时,整数的标准变为高斯整数。
rand()
作用:实现生成一个服从[0,1]区间均匀分布的随机数的运算。
用法略。
arange(*args)
作用:生成整数数组的运算。注意,当参数长度为2时,生成整数数组的标准是前含后不含。
from mpmath import *
print(arange(10)) #生成0~9的浮点数数组
print(arange(10.5)) #生成0~10的浮点数数组
print(arange(4, 10)) #生成4~9的浮点数数组
linspace(*args,**kwargs)
作用:生成等差数列的运算。三个参数依次分别是首项,末项和项数。
from mpmath import *
print(linspace(1, 4, 4)) #生成从1到4的四等分数列
>>>[1.0, 2.0, 3.0, 4.0]
print(linspace(1, 4, 4, endpoint=False)) #生成从1到4的五等分数列,不含尾点4
>>>[1.0, 1.75, 2.5, 3.25]