机器学习数学基础一本通(Python版)
上QQ阅读APP看书,第一时间看更新

第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( )求xy次方。

执行结果

程序实例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 定义多个符号变量

假设想定义abc 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模块时,请先定义xabc变量,将上述公式转为下列表达式:

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轴预设标题是xy轴预设标题是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,可以在图表内增加图例。

下列是所绘制的图形。