sympy 解决常见高数问题

原文链接: sympy 解决常见高数问题

上一篇: python pycrypto 加密解密

下一篇: opencv 手指捕捉

参考

https://zhuanlan.zhihu.com/p/35150541

常见操作说明pdf

链接:https://pan.baidu.com/s/1Xxq8NwZz-zWoaux12clDRg
提取码:z07w

链接: https://pan.baidu.com/s/1wKmK2h9GCGDWUrntkQSZJQ 密码:rb4r

什么是基于符号的计算(符号求解)?

在高数学习中,甚至在工作中,都会面临计算基本微积分的问题。可能你会想,只要写个程序,运用极限法思想,全部都用双精度浮点数就能八九不离十的解出来。但是请看下面:

>>> import sympy, math
>>> math.sqrt(2) ** 2
2.0000000000000004
>>> sympy.sqrt(2) ** 2
2
x**2表示 x^2 ,sqrt(x)表示 x^.5

为什么用sympy的计算结果貌似要比math单纯浮点计算后误差小很多,或者说基本没有?

>>> x = sympy.Symbol('x')
>>> sympy.sqrt(x) ** 2
x
>>> sympy.sqrt(8)
2*sqrt(2)

因为sympy的计算本质是符号计算,也就是它先计算表达式 ,sympy先将其化简为 x ,在代入求值。

sympy安装

sudo pip install sympy 或者 sudo pip3 install sympy
如果你用anaconda则 conda install sympy

Let's get started!

首先我们从sympy包中导入所有内建函数

from __future__ import division 
#如果你用的python2,请加上上面这句话导入python3的除法
#将Python2的除法操作符“/”从整数除法改为普通除法
from sympy import *
x = Symbol('x')
y = Symbol('y')
z = Symbol('z')
a = Symbol('a')
b = Symbol('b')
c = Symbol('c')
# 等同于 x, y, z, a, b, c = symbols('x, y, z, a, b, c')
# 建议用下面这种表达,因为一个一个导入符号实在是太麻烦了。
f = (2/3)*x**2 + (1/3)*x**2 + x + x + 1

simplify表达式化简

f.simplify()
print(f)
结果:
x**2 + 2*x + 1

对,就是这么简单。

expand表达式展开

>>> f = (x+1)**2
>>> print(expand(f))
x**2 + 2*x + 1

solve方程自动求解

cae246b7101005f3dbecbb775606b1600aa.jpg

f1 = 2*x - y + z - 10
f2 = 3*x + 2*y - z - 16
f3 = x + 6*y - z - 28
print(solve([f1, f2, f3]))
结果:
{x: 46/11, z: 74/11, y: 56/11}

limit求极限

首先,limit可以作为普通的代入化简求值方法。比如 f = (x+1)^2 + 1x = a - 1 代入,得到 a^2 +1

f = (x+1)**2 + 1
print(limit(f, x, a-1))
结果:a**2 + 1

求极限\lim_{x\rightarrow0}\frac{sinx}{x}

>>> f = sin(x)/x
>>> print(limit(f, x, 0)) # 输入三个值,函数,自变量,自变量取值
1

从负方向逼近,dir可以取'+' 或者 '-'
>>> print(limit(f, x, 0, dir='-'))
1

设f(x)=cosx, 则\lim_{\Delta x \rightarrow 0}\frac{f(a)-f(a-\Delta x)}{\Delta x} = ?

f = cos(x)
dx = Symbol('dx')
>>> print(limit(f, x, a)) # 这个的意思是函数f,自变量x用a代入
cos(a)
>>> print(limit(f, x, a-dx))# f的自变量x用a-dx代入
cos(a - dx)
>>> print(limit((limit(f,x,a)-limit(f,x,a-dx))/dx, dx, 0))
-sin(a) #这就是答案

\lim_{n\rightarrow\infty}\left(\frac{n+3}{n+2}\right)^n

>>> n = Symbol('n')
>>> print(limit(((n+3)/(n+2))**n, n, oo))
E

无穷用oo表示,负无穷用-oo

diff求导

diff(你的函数,自变量,求导的次数)

>>> diff(sin(2*x), x) 
2*cos(2*x)
>>> sin(2*x).diff(x) 
2*cos(2*x)
>>> diff(sin(2*x), x, 2) 
-4*sin(2*x)
>>> diff(sin(2*x), x, 3)
-8*cos(2*x)
>>> diff(sin(x*y), x,2,y,3) 
x*(x**2*y**2*cos(x*y) + 6*x*y*sin(x*y) - 6*cos(x*y))

dsolve()计算微分方程

>>> x = symbols("x", real=True) # 定义符号x 为实数 
>>>eq1 = dsolve(f(x).diff(x) + f(x)**2 + f(x), f(x)) 
>>>eq1
f(x) == -C1/(C1 - exp(x))

如果设置hint参数为“best”,就能得到更简
单的显函数表达式

>>> eq2 = dsolve(f(x).diff(x) + f(x)**2 + f(x), f(x), hint="best")
>>> eq2
f(x) == -C1/(C1 - exp(x))

intergrate积分计算

1. 定积分

>>> f = x**2 + 1
>>> integrate(f, (x, -1, 1))
8/3

\int_{-\infty}^{0} e^x = 1

>>> integrate(exp(x), (x, -oo, 0))
1

2. 不定积分

\int (3{x}^2+1) dx = 3x + x

>>> f = 3*x**2 + 1
>>> integrate(f, x)
x**3 + x

3. 双重定积分

\int_{-3}^{4}\int_{0}^{1} (\frac{3}{4}x+2y) dxdy

>>> f = (4/3)*x + 2*y
>>> integrate(f, (x, 0, 1), (y, -3, 4))
21/2

4. 双重不定积分

\int_{-x}^{x}\int_{0}^{1} (\frac{3}{4}x+2y) dxdy

>>> f = (4/3)*x + 2*y
>>> integrate(f, (x, 0, 1), (y, -x, x))
x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值