第2章
数学模块math和sympy
Python语言的标准数学模块是math,这个模块内有与数学有关的变量与函数。此外,本章也将介绍线性代数与符号数学常用的模块sympy。
2-1 数学模块的变量
在使用math模块前,请先导入此模块。
import math
常用数学模块的变量有:
pi:圆周率。 e:自然对数的底。
程序实例ch2_1.py:列出圆周率pi和自然对数的底e。
执行结果
2-2 一般函数
下列是常用的一般函数。
程序实例ch2_2.py:ceil( )和f l oor( )的应用。
执行结果
程序实例ch2_3.py:求最大公约数gcd( )的应用。
执行结果
程序实例ch2_4.py:使用pow( )求x的y次方。
执行结果
程序实例ch2_5.py:使用sqrt( )求平方根。
执行结果
2-3 log( )函数
下列是常用的log( )函数。
程序实例ch2_6.py:log( )函数的应用。
执行结果
注 本书第16章会有关于对数更完整的说明。
2-4 三角函数
下列是常用的三角函数。
除了math模块,numpy模块也提供了与上述一样的模块,可以执行三角函数的运算。不过使用时,前面要加上模块名称,例如:
注 本书第18章会有三角函数更完整的说明。
程序实例ch2_7.py:sin( )和cos( )的应用,其中xpt数组元素的单位是弧度。
执行结果
弧度是圆周长与圆半径的比,对于30度或390度转成弧度后输入三角函数,所获得的值是一样的。
第一个输出是浮点数,可以视为0.5。
2-5 sympy模块
sympy模块常用于解决线性代数问题,也可以用此模块绘制图表,本节将一一说明。在使用前请先安装此模块。
pip install sympy
2-5-1 定义符号
一般数学运算变量使用方式如下:
上述我们定义x = 1,当执行x + x + 2时,变量x会代入1,所以可以得到4。使用sympy可以设计含变量的表达式,不过在使用前必须用Symbol类别定义此变量符号,可以参考下列方式:
当定义好了以后,我们再执行一次x + x + 2,可以看到不一样的输出。
注 上述必须先导入Symbol。
经过Symbol类别定义后,对于Python而言x仍是变量,但是此变量内容将不是变量,而是符号。也可以设定不同名称的变量等于Symbol(‘x’),如下所示:
不过上述方式会混淆,所以建议变量名称与Symbol(‘x’)参数名称相符。
注 2-5节将讲述sympy模块内许多方法,可以直接导入所有方法学习,这样可以避免错误,如下所示:
from sympy import *
2-5-2 name属性
使用Symbol类别定义一个变量名称后,未来可以使用name属性了解所定义的符号。
或
2-5-3 定义多个符号变量
假设想定义a、b、c 3个符号变量,可以使用下列方式:
或使用下列symbols( )方法简化程序:
2-5-4 符号的运算
当定义符号后就可以对其进行基本运算:
2-5-5 将数值代入公式
若是想将数值代入公式,可以使用subs({x:n,…}),subs( )方法的参数是字典,可以参考下列实例:
2-5-6 将字符串转为数学表达式
若是想建立通用的数学表达式,可以参考下列实例:
上述所输入的x**3 + 2*x**2 + 3*x + 5是字符串,sympify( )方法会将此字符串转为数学表达式,公式eq经过上述转换后,我们可以针对此公式进行操作。
由于eq已经是数学表达式,所以我们可以使用subs( )方法代入此公式做运算。
2-5-7 解一元一次方程式
sympy模块也可以解下列一元一次方程式:
y = ax + b
例如:求解下列公式:
3x + 5 = 8
上述问题可以使用solve( )方法求解,在使用sympy模块时,请先将上述公式转为下列表达式:
eq = 3x + 5 – 8
可以参考下列实例与结果:
上述解一元一次方程式时,所获得的结果是以列表(list)方式回传,下列是延续上述实例的结果。
2-5-8 解一元二次方程式
sympy模块也可以解下列一元二次方程式:
y = ax2 + bx + c
例如:求解下列公式:
x2 + 5x = 0
上述问题可以使用solve( )方法求解,在使用sympy模块时,请先将上述公式转为下列表达式:
eq = x2 + 5x
可以参考下列实例与结果:
解上述一元二次方程式时,所获得的结果是以列表(list)形式回传,下列是延续上述实例的结果。
其实解一元更高次方程式时,也可以依上述概念类推。
2-5-9 解含未知数的方程式
sympy模块也可以解下列含未知数的一元二次方程式:
ax2 + bx + c = 0
上述问题可以使用solve( )方法求解,在使用sympy模块时,请先定义x、a、b、c变量,将上述公式转为下列表达式:
eq = ax2 + bx + c
可以参考下列实例与结果:
上述solve( )须有第2个参数x,这是告诉solve( )应该解哪一个符号。
2-5-10 解联立方程式
有一个联立方程式如下:
3x + 2y = 6
9x + y = 3
可以使用下列方式求解。
上述所得到的解是使用字典格式,下列是更进一步验证上述数据格式的结果。
下列是使用subs( )方法将解代入方程式验证的结果。
有时候在解联立方程式时,所获得的解是以分数表达方式呈现,请参考下列联立方程式:
3x + 2y = 10
9x + y = 3
下列是求解的结果。
在有些场合,上述分数表达方式-4/15或27/5无法使用,例如:使用matplotlib绘制坐标图时,无法使用上述分数格式,这时可以使用fl oat( )强制将分数转成实数表达式。
2-5-11 绘制坐标图的基础
使用sympy的数学模块需要导入sympy.plotting的plot模块,如下所示:
from sympy.plotting import plot
未来就可以绘图了,可以参考下列绘制y =2x – 5实例。
其实上述绘图与matplotlib模块类似,这是因为sympy背后是使用matplotlib模块绘图,不过使用sympy绘图可以省略show( )函数显示坐标图。
下列是所绘制的图形。
2-5-12 设定绘图的x轴区间
使用sympy绘图,模块会自动默认绘图区间,此例x轴是在-10 ~ 10,不过可以通过在plot( )内增加参数的方式更改此绘图区间,下列是设定x轴是在-5 ~ 5。
下列是所绘制的图形。
2-5-13 增加绘图标题与轴标题
从上一小节的执行结果可以看到,默认图表没有标题,x轴预设标题是x,y轴预设标题是f(x)。在plot( )内可以使用title建立图表标题,使用xlabel建立x坐标标题,使用ylable建立y坐标标题。可以为图表建立下列标题:
title:Sympy x轴:x y轴:2x-5
下列是所绘制的图形。
2-5-14 多函数图形
坐标图可以有多个函数,可以参考下列实例。
下列是所绘制的图形。
2-5-15 plot( )的show参数
在plot( )方法内可以建立show参数,默认是显示图形,如果设定show=False,可以不显示图形。
上述程序没有显示图形。
2-5-16 使用不同颜色绘图
使用sympy建立图形,默认是使用蓝色,也可以使用其他色彩,下列第2个方程式是使用红色。
下列是所绘制的图形。
2-5-17 图表增加图例
在plot( )内增加legend=True,可以在图表内增加图例。
下列是所绘制的图形。