数学模块的变量
在使用math模式前,请先导入此模块。
import math
常用数学模块的变量有
pi:圆周率 e:自然对数的底
列出圆周率pi和自然对数的底e。
import math
print('pi = {}'.format(math.pi))
print('e = {}'.format(math.e))
运行结果:
[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
pi = 3.141592653589793
e = 2.718281828459045
[Done] exited with code=0 in 0.259 seconds
一般函数
函数名称 | 说明 |
ceil(x) | 可以得到不小于x的最小整数 |
floor(x) | 可以得到不大于x的最大整数 |
gcd(x,y) | 可以得到x和y的最大公约数 |
pow(x,y) | 可以得到x的y次方 |
sqrt(x) | 可以得到x的平方根 |
代码如下:
import math
print('ceil(2.1) = {}'.format(math.ceil(2.1)))
print('ceil(2.9) = {}'.format(math.ceil(2.9)))
print('ceil(-2.1) = {}'.format(math.ceil(-2.1)))
print('ceil(-2.9) = {}'.format(math.ceil(-2.9)))
print('floor(2.1) = {}'.format(math.floor(2.1)))
print('floor(2.9) = {}'.format(math.floor(2.9)))
print('floor(-2.1) = {}'.format(math.floor(-2.1)))
print('floor(-2.9) = {}'.format(math.floor(-2.9)))
print()
print('gcd(16, 40) = {}'.format(math.gcd(16, 40)))
print('gcd(28, 56) = {}'.format(math.gcd(28, 63)))
print()
print('pow(2, 3) = {}'.format(math.pow(2, 3)))
print('pow(2, 5) = {}'.format(math.pow(2, 5)))
print()
print('sqrt(4) = {}'.format(math.sqrt(4)))
print('sqrt(8) = {}'.format(math.sqrt(8)))
运行结果如下:
[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
ceil(2.1) = 3
ceil(2.9) = 3
ceil(-2.1) = -2
ceil(-2.9) = -2
floor(2.1) = 2
floor(2.9) = 2
floor(-2.1) = -3
floor(-2.9) = -3
gcd(16, 40) = 8
gcd(28, 56) = 7
pow(2, 3) = 8.0
pow(2, 5) = 32.0
sqrt(4) = 2.0
sqrt(8) = 2.8284271247461903
[Done] exited with code=0 in 0.311 seconds
log()函数
函数名称 | 说明 |
log2(x) | 可以得到以2为底x的对数 |
log10(x) | 可以得到以10为底x的对数 |
log(x) | 可以得到以e为底x的对数 |
log(x[,base]) | 可以得到以base为底x的对数 |
log()函数的应用。
import math
print('log2(4) = {}'.format(math.log2(4)))
print('log10(100) = {}'.format(math.log10(100)))
print('log(e) = {}'.format(math.log(math.e)))
print('log(2, 4) = {}'.format(math.log(4, 2)))
print('log(10, 100) = {}'.format(math.log(100, 10)))
运行结果如下:
[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
log2(4) = 2.0
log10(100) = 2.0
log(e) = 1.0
log(2, 4) = 2.0
log(10, 100) = 2.0
[Done] exited with code=0 in 0.295 seconds
三角函数
函数名称 | 说明 |
sin(x) | 得到sin(x)的值 |
cos(x) | 得到cos(x)的值 |
tan(x) | 得到tan(x)的值 |
radians(x) | 将x的角度转成弧度 |
degrees(x) | 将x的弧度度转成角度 |
sin()和cos()的应用,其中xpt数组元素的单位是弧度。
import matplotlib.pyplot as plt
import numpy as np
xpt = np.linspace(0, 10, 500) # 建立含500个元素的数组
ypt1 = np.sin(xpt) # y数组的变化
ypt2 = np.cos(xpt)
plt.plot(xpt, ypt1, label='sin') # 预设颜色
plt.plot(xpt, ypt2, label='cos') # 预设颜色
plt.xlabel('rad')
plt.ylabel('value')
plt.title('Sin and Cos function')
plt.grid()
plt.legend(loc='best')
plt.show()
运行结果:
弧度是圆周长与圆半径的比,对于30度或390度转成弧度后输入三角函数,所获得的值 是一样的。
>>> import math
>>> math.sin(math.radians(30))
0.49999999999999994
>>> math.sin(math.radians(390))
0.5
>>>
sympy模块
sympy模块常用于解决线性代数问题,也可以用此模块绘制图表。
安装此模块:pip install sympy
C:\Users\a-xiaobodou>pip install sympy
WARNING: Ignoring invalid distribution -ip (c:\python310\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (c:\python310\lib\site-packages)
Collecting sympy
Downloading sympy-1.11.1-py3-none-any.whl (6.5 MB)
---------------------------------------- 6.5/6.5 MB 37.1 kB/s eta 0:00:00
Collecting mpmath>=0.19
Downloading mpmath-1.2.1-py3-none-any.whl (532 kB)
---------------------------------------- 532.6/532.6 kB 54.2 kB/s eta 0:00:00
WARNING: Ignoring invalid distribution -ip (c:\python310\lib\site-packages)
Installing collected packages: mpmath, sympy
ERROR: Could not install packages due to an OSError: [WinError 5] Access is denied: 'C:\\Python310\\share'
Consider using the `--user` option or check the permissions.
WARNING: Ignoring invalid distribution -ip (c:\python310\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (c:\python310\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (c:\python310\lib\site-packages)
[notice] A new release of pip available: 22.2.1 -> 22.2.2
[notice] To update, run: python.exe -m pip install --upgrade pip
C:\Users\a-xiaobodou>
定义符号
>>> from sympy import Symbol
>>> x=Symbol('x')
>>> x+x+2
2*x + 2
>>> y=Symbol('x')
>>> y+y+2
2*x + 2
>>>
name属性
>>> X=Symbol('x')
>>> X.name
'x'
>>> y=Symbol('x')
>>> y.name
'x'
>>>
定义多个符号变量
>>> from sympy import symbols
>>> a,b,c=symbols('a,b,c')
>>> a.name
'a'
>>> b.name
'b'
>>> c.name
'c'
>>>
符号的运算
subs()方法的参数是字典。
>>> x=Symbol('x')
>>> y=Symbol('y')
>>> z=5*x+6*y+x*y
>>> z
x*y + 5*x + 6*y
>>>
将数值代入公式
>>> x=Symbol('x')
>>> y=Symbol('y')
>>> eq=5*x+6*y
>>> result=eq.subs({x:1,y:2})
>>> result
17
>>>
将字符串转为数学表达式
sympify()方法会将字符串转为数学表达式。
>>> from sympy import sympify
>>> x=Symbol('x')
>>> eq=input('请输入公式:')
请输入公式:x**3+2*x**2+3*x+5
>>> eq=sympify(eq)
>>> 2*eq
2*x**3 + 4*x**2 + 6*x + 10
>>> eq
x**3 + 2*x**2 + 3*x + 5
>>> result=eq.subs({x:1})
>>> result
11
>>>
解一元一次方程式
sympy模块也可以解下列一元一次方程式:
y=ax+b
例如:求解下列公式:
3x+5=8
上述问题可以使用solve()方法求解,在使用sympy模块时,先将上述公式转为下列表达式:
eq=3x+5-8
>>> from sympy import solve,Symbol
>>> x=Symbol('x')
>>> eq=3*x+5-8
>>> solve(eq)
[1]
>>> ans=solve(eq)
>>> print(type(ans))
<class 'list'>
>>> ans
[1]
>>> ans[0]
1
>>>
解一元二次方程式
sympy模块也可以解下列一元二次方程式:
例如:
上述问题可以使用solve()方法求解,在使用sympy模块时,先将上述公式转为下列表达式:
>>> from sympy import solve,Symbol
>>> x=Symbol('x')
>>> eq=x**2+5*x
>>> solve(eq)
[-5, 0]
>>> ans=solve(eq)
>>> print(type(ans))
<class 'list'>
>>> ans
[-5, 0]
>>> ans[0]
-5
>>> ans[1]
0
>>>
解含未知数的方程式
sympy模块也可以解下列含未知数的一元二次方程式:
>>> from sympy import solve,symbols
>>> x,a,b,c=symbols('x,a,b,c')
>>> eq=a*x*x+b*x+c
>>> solve(eq,x)
[(-b - sqrt(-4*a*c + b**2))/(2*a), (-b + sqrt(-4*a*c + b**2))/(2*a)]
>>>
解联立方程式
有一个联立方程式如下:
3x+2y=6
9x+y=3
>>> from sympy import solve,symbols
>>> eq1=3*x+2*y-6
>>> eq2=9*x+y-3
>>> solve((eq1,eq2))
{x: 0, y: 3}
>>> ans=solve((eq1,eq2))
>>> print(type(ans))
<class 'dict'>
>>> print(ans[x])
0
>>> print(ans[y])
3
>>> eq1.subs({x:ans[x],y:ans[y]})
0
>>> eq2.subs({x:ans[x],y:ans[y]})
0
>>>
3x+2y=10
9x+y=3
>>> from sympy import solve,symbols
>>> x,y=symbols('x,y')
>>> eq1=3*x+2*y-10
>>> eq2=9*x+y-3
>>> solve((eq1,eq2))
{x: -4/15, y: 27/5}
>>> ans=solve((eq1,eq2))
>>> ans[x]
-4/15
>>> float(ans[x])
-0.26666666666666666
>>> ans[y]
27/5
>>> float(ans[y])
5.4
>>>
绘制坐标图的基础
使用sympy的数学模块需要导入sympy.plotting的plot模块,如下所示:
from sympy.plotting import plot
绘制y=2x-5实例:
>>> from sympy import Symbol
>>> from sympy.plotting import plot
>>> x=Symbol('x')
>>> plot(2*x-5)
<sympy.plotting.plot.Plot object at 0x00000182AD1AAD10>
>>>
设定绘图的x轴区间
设定x轴是在-5~5.
>>> from sympy import Symbol
>>> from sympy.plotting import plot
>>> x=Symbol('x')
>>> plot((2*x-5),(x,-5,5))
<sympy.plotting.plot.Plot object at 0x00000182BAA4C100>
>>>
增加绘图标题与轴标题
plot()内可以使用title建立 图表标题,使用xlabel建立 x坐标标题,使用ylabel建立 坐标标题。
为图表建立 下列标题:
title:Sympy
x轴:x
y轴:2x-5
>>> from sympy import Symbol
>>> from sympy.plotting import plot
>>> x=Symbol('x')
>>> plot((2*x-5),(x,-5,5),title='Sympy',xlabel='x',ylabel='2x-5')
<sympy.plotting.plot.Plot object at 0x00000182BABB31C0>
>>>
多函数图形
>>> from sympy import Symbol
>>> from sympy.plotting import plot
>>> x=Symbol('x')
>>> plot(2*x-5,3*x+2)
<sympy.plotting.plot.Plot object at 0x00000182BABB3220>
>>>
plot()的show参数
在plot()方法内可以建议show参数,默认是显示图形,如果设定show=False,可以不显示图形。
>>> from sympy import Symbol
>>> from sympy.plotting import plot
>>> x=Symbol('x')
>>> plot(2*x-5,3*x+2,show=False)
<sympy.plotting.plot.Plot object at 0x00000182BABB3220>
>>>
使用不同颜色绘图
>>> from sympy import Symbol
>>> from sympy.plotting import plot
>>> x=Symbol('x')
>>> line=plot(2*x-5,3*x+2,show=False)
>>> line[1].line_color='r'
>>> line.show()
图表增加图例
在plot()内增加legend=True,可以在图表内增加图例。
>>> from sympy import Symbol
>>> from sympy.plotting import plot
>>> x=Symbol('x')
>>> line=plot(2*x-5,3*x+2,legend=True,show=False)
>>> line[1].line_color='r'
>>> line.show()
>>>