python在高等数学和线性代数中的应用
一.sympy工具库介绍
首先我们可以通过help(‘sympy’)来看到他有数十个板块
abc:符号变量模块;
calculus:积分相关方法;
core:基本的加、乘、指数运算等;
discrete:离散数学;
functions:基本的函数和特殊函数;
galgebra:几何代数;
geometry:几何实体;
integrals:符号积分;
interactive:交互会话(如IPython)
logic:布尔代数和定理证明;
matrices:线性代数和矩阵;
ntheory:数论函数;
physics:物理学;
plotting:用Pyglet进行二维和三维的画图。
polys:多项式代数和因式分解;
printing:漂亮的打印和代码生成;
series:级数;
simplify:化简符号表达式;
solvers:方程求解;
stats:统计学。
1.1 符号运算基础知识
使用Python的SymPy库进行符号计算,首先要建立符号变量以及符号表达式。
符号变量是构成符号表达式的基本元素,可以通过库中的symbols()函数创建。例如:
from sympy import *
x=symbols('x')
y,z=symbols('y z')
可以看到,如果想一次性构建多个符号,记得在中间加空格,符号变量的名称和值不一定相同
还有一种方法是用m0:3传入符号函数
m0,m1,m2,m3=symbols('m0:4')
在符号对象中,用evalf()或者n()方法来获得任何对象的浮点近似值,默认的小数点精度是15位,可以通过调参来得到自己想要的精度
举例:符号创建、类型转换、以及subs()方法代入实例
x,y,z=symbols('x y z')
m0,m1,m2,m3=symbols('m0:4')
x=sin(1)
print('x=',x)
print('x=',x.evalf())
print('x=',x.n(16))#小数点后16位
print(pi,pi.evalf(3))#这里不能使用n函数
expr1=y*sin(y**2)#创建第一个符号表达式
expr2=y**2+sin(y)*cos(y)+sin(z)#创建第二个符号表达式
print('expr1=',expr1)
print('当y=5时,expr1=',expr1.subs(y,5))
print('当y=2,z=3时,expr2=',expr2.subs({y:2,z:3}))# 以字典形式传入
print('当y=2,z=3时,expr2=',expr2.subs({y:2,z:3}).n())
x= sin(1)
x= 0.841470984807897
x= 0.8414709848078965
pi 3.14
expr1= y*sin(y**2)
当y=5时,expr1= 5*sin(25)
当y=2,z=3时,expr2= sin(2)*cos(2) + sin(3) + 4
当y=2,z=3时,expr2= 3.76271876040590
sympy有很多函数可以用于处理有理数。这些函数可以对有理数做简化,展开,合并等操作。为了计算两个有理数的加法,我们用together函数;类似的,有理数的除法我们用apart函数
例:together()和apart()使用示例
x1,x2,x3,x4=symbols('m1:5')
x=symbols('x')
print(x1/x2+x3/x4)
print(together(x1/x2+x3/x4))
print((2*x**2+3*x+4)/(x+1))
print(simplify((2*x**2+3*x+4)/(x+1))) #没有变化
print(apart((2*x**2+3*x+4)/(x+1)))
m1/m2 + m3/m4
(m1*m4 + m2*m3)/(m2*m4) #会帮你约分
(2*x**2 + 3*x + 4)/(x + 1)
(2*x**2 + 3*x + 4)/(x + 1) #直接化简没变化
2*x + 1 + 3/(x + 1) #一样,约分了
二.scipy工具库简介
SciPy是对NumPy的功能扩展,它提供了许多高级数学函数,例如微分、积分、微分方程、优化算法、数值分析、高级统计函数、方程求解等。SciPy是在NumPy数组框架的基础上实现的,它对NumPy数组和基本的数组运算进行扩展,满足科学家和工程师解决问题时需要用到的大部分数学计算功能。
SciPy支持的功能包括文件处理、积分、数值分析、优化方法、统计学、信号与图像处理、聚类分析和空间分析等。下面简要介绍部分功能模块
1.积分模块(scipy.integrate)
积分模块支持数值积分和微分方程数值解的功能
1.1给定函数的数值积分
- quad:一重数值积分
- dblquad:二重数值积分
- tplquad:三重数值积分
- nquad:通用n重积分
- fixed_quad:使用固定阶高斯求积公式求数值积分
- quadtature:使用固定误差限的高斯求积公式求数值积分
- romberg:求函数的Romberg数值积分
1.2 给定离散点的数值积分
- cumtrapz:用梯形法求数值积分
- simps:用辛普森法求数值积分
- romb:用Romberg积分法求自变量均匀间隔离散点的数值积分
1.3 微分方程的数值解
- odeint:使用Fortran库中方法求微分方程组的数值解
- ode: 求一般微分方程组的数值解
- complex_ode=求复微分方程组的数值解
2.线性代数模块(scipy.linalg)
与numpy.linalg相比,scipy.linalg函数有更高级的特征。
3.优化模块(scipy.optimize)
SciPy的优化模块提供了解决单变量和多变量的目标函数最小值问题的功能。它通过大量的算法解决最小化问题。优化模块支持线性回归、搜索函数的最大值与最小值、方程求根、线性规划、拟合等功能。
4.插值模块(scipy.interpolate)
插值模块支持一维和多维插值,例如泰勒(Taylor)多项式插值,一维和多维样条插值。
5.统计学模块(scipy.stats)
统计模块提供了各种随机变量的分布、统计量的计算、分布拟合、参数检验等功能。
6.傅里叶变换模块(scipy.fftpack)
离散傅里叶变换和离散傅里叶逆变换可以分别用fft和ifft函数来计算。
7.信号处理模块(scipy.signal)
信号处理模块包含一系列滤波函数、滤波器设计函数,以及对一维和二维数据进行B-样条插值的函数。这个模块包含的函数可以进行以下操作:卷积、B-样条、滤波、滤波器设计、MATLAB式的IIR滤波器设计、连续时间的线性系统、离散时间的线性系统、线性时不变系统、信号波形、窗函数、小波分析和光谱分析等。
8.多维图像处理模块(scipy.ndimage)
通常图像处理可以看作对二维数组的操作。这个模块提供了图像处理的各种函数,例如图像几何变换、图像滤波等。
9.空间分析模块(scipy.spatial)
空间分析是一系列用于分析空间数据的算法。空间数据是指和地理空间或垂直空间相关的数据对象。这种数据包括点、线、多边形、其他几何和地理特征信息。
该模块支持Delaunay三角剖分、Voronoi图、 维凸包等功能,支持KD树(scipy.spatial.kdtree)实现快速近邻查找算法,还可以对初始向量集合进行距离矩阵的计算。
10.聚类模块(scipy.cluster)
聚类是将一个大的集合分成多个组的过程。SciPy聚类模块包括两个子模块:向量量化(Vector Quantization,VQ)(scipy.cluster.vq)和层次聚类(scipy.cluster.hierarchy)。VQ模块支持K-means聚类和向量量化,层次聚类模块支持分层聚类和聚合聚类。
11.文件输入/输出模块(scipy.io)
该模块支持一系列格式文件的读和写。这些格式文件包括:MATLAB文件、ALD文件、Matrix Market文件、无格式的FORTRAN文件、WAV声音文件、ARFF文件和NetCDF文件。
SciPy可以使用MATLAB的.mat文件格式读取和写入数据,函数为loadmat和savemat。如果要加载数据,则可以使用如下语法:
import scipy.io
data=scipy.io.loadmat('datafile.mat')
返回值data为一个字典,该字典包含了与.mat文件中保存的变量名相对应的键,对应值为NumPy数组格式。
保存数据到.mat文件涉及创建一个包含要保存的所有变量的字典(变量名和值),函数为savemat,保存数组x和y的代码如下:
data={}; data['x']=x; data['y']=y
scipy.io.savemat('datafile.mat',data)
还有其他一些模块:如附件模块(scipy.misc),实现图形读写操作功能;稀疏矩阵及其相关算法模块(scipy.sparse);特殊函数模块(scipy. special)等。
三、用sympy做符号函数画图
用sympy做符号函数画图很方便,下面通过一些例子来说明二维图形、三维图形和隐函数符号函数画图方法

本文介绍了Python的SymPy库在符号计算中的应用,如创建符号变量、求极限、导数、积分、级数求和、泰勒展开以及微分方程的解。同时,讲解了SciPy库在数值计算中的功能,如数值积分、微分方程数值解、插值、统计分析、优化、傅里叶变换、空间分析等。通过实例展示了如何使用这两个库解决高等数学问题,包括符号解和数值解。
最低0.47元/天 解锁文章
2943

被折叠的 条评论
为什么被折叠?



