我们知道, 那么我们看看Python中结果 math.sqrt(8).math.sqrt(8) 8.000000000000002 本以为会得到8.0,但没想到得到8.000000000000002。 一、为什么会这样?简单的说Python对给定的一个有限位数的数字进行计算,python认为 那么 此外 经历过高中数学的朋友们估计会很熟悉下面这样的表达 而不是 如果我们平常计算的任务常常有类似于上面的例子这样的表达式,那么直接用python计算其结果只是真实值的逼近。如果这样的计算很大很多,误差会逐渐积累,这是我们不能忍受的,所以这时候就需要Python能处理 这种数学符号计算。 二、什么是数学符号计算?数学符号计算能处理表征数字的符号计算。这意味着数学对象被精确地表示,而不是近似地表示,而具有未被计算的变量的数学表达式被留在符号形式中。 sympy库简介SymPy是Python的一个数学符号计算库。它目的在于成为一个富有特色的计算机代数系统。它保证自身的代码尽可能的简单,且易于理解,容易扩展。SymPy完全由Python写成,不需要额外的库。 sympy的表达式与我们平常的手写的数学表达式略微有所区别,下面是sympy的方程表示符号
上面的例子我们用Python实现一下。 import sympy
sympy.sqrt(8) 2*sqrt(2) 用sympy计算 sympy.sqrt(8)*sympy.sqrt(8) 8 三、 简单学一下sysmpy中的几个实例
3.1 定义数学符号让我们定义一个符号表达式代表数学表达式 x+2y。首先我们要注意到python中的变量必须赋值才能使用,所以无法表达该数学表达式。所以这里一定要引入特殊的符号,这里有两种方法 #方法一 x + 2*y #方法二from sympy.abc import x,y
expr2 = x + 2*y
expr2 x + 2*y 当数学表达式中的变量不是x,y这种单一字符,而是result这种多个字符长度的变量时,只能用方法一。 3.2 展开与折叠from sympy import expand,factor x**2 + x*y + 3*x #折叠 x**2 + x*y + 3*x #展开 x**2 + x*y + 3*x 3.3 简化表达式有时候我们需要简化表达式,如 #普通的化简 x - 1 #三角化简trigsimp tan(x) 指数化简from sympy import powsimp x**a*x**b #指数化简 x**(a + b) 3.4 解方程注意在python中=是赋值的意思,==虽然表示等于,但是会有很大的问题。在sympy中,我们使用Eq(x,y)表示等于x=y from sympy.abc import x,y [2] 注意,当我们对多个方程求解时,我们习惯把等式设定为等于0.即将等式右边的内容移动到左边。 这时候我们再使用linsolve([方程1,方程2,...],(变量1,变量2,...)) #对多个方程求解,使用linsolve。方程的解为x=-1,y=3 {(-1, 3)} 3.5 赋值计算from sympy.abc import x,y sin(x) + cos(x) y.subs(x, x**2) sin(x**2) + cos(x**2) 这里的赋值,不仅可以实现变量的替换,还可以赋与数字,进行计算。 y.subs(x, 0) 1 3.6 log运算from sympy import log,expand_log 3*log(x) #expand_log为展开log,但需要将force=True,展开才能发生 log(x**3) expand_log(log(e**x), force=True) x*log(e) 3.7 导数如果经历过考研求导数,大家都应该都还记得这些吧。 from sympy import diff,sin,cos cos(x) diff(cos(x)) -sin(x) 偏导 #求偏导 6*x*z 3.8 积分from sympy.abc import pi,x -cos(pi) + 1 3.9 极限from sympy.abc import x oo 3.10 展开式from sympy import exp,symbols
x = symbols('x') 1 + x + x**2/2 + O(x**3) 数据采集文本处理分析数据结构杂文
|
|