3.3.1解方程
- 解一般的一元一次和一元二次方程
解方程,和
,我们首先需要把方程化成一般形式,然后带入solve()。
>>> from sympy import *
>>> x = Symbol('x')
>>> solve(x-5-7)
[12]
>>> solve(x**2-5*x-7)
[5/2 + sqrt(53)/2, -sqrt(53)/2 + 5/2]
>>> pprint(solve(x**2+x+1))#求解带复根的一元二次方程
___ ___
1 \/ 3 *I 1 \/ 3 *I
[- - - -------, - - + -------]
2 2 2 2
>>> pprint(solve(x**2+x+1,dict=true))
___ ___
1 \/ 3 *I 1 \/ 3 *I
[{x: - - - -------}, {x: - - + -------}]
2 2 2 2
dict是python的内置数据结构类型。
- 求解一元二次方程的通解。
>>> x,a,b,c=symbols('x a b c')
>>> expr = a*x*x + b*x +c
>>> pprint(solve(expr,x,dict=true))
_____________ / _____________\
/ 2 | / 2 |
-b + \/ -4*a*c + b -\b + \/ -4*a*c + b /
[{x: ---------------------}, {x: ------------------------}]
2*a 2*a
方程中不止一个符号参数,我们需要告诉solve()函数求解的参数是哪个,通过第二个参数进行制定我们要求解的参数。
- 匀加速直线运动的时间
我们知道匀加速直线运动的路程方程,求解时间t:
>>> s,u,t,a=symbols('s u t a')
>>> expr = u*t + (1/2)*a*t*t-s
>>> from __future__ import division #正确计算1/2
>>> expr = u*t + (1/2)*a*t*t-s
>>> pprint(solve(expr,t,dict=true))
______________ / ______________\
/ 2 | / 2 |
-u + \/ 2.0*a*s + u -\u + \/ 2.0*a*s + u /
[{t: ----------------------}, {t: -------------------------}]
a a
python中1/2进行的是整除运算,运算结果是0。为了让\做真实的除法运算,程序中加上from __future__ import division代码。
3.3.2解方程组
已知方程组:
solve()方法求解过程为:
>>> x,y = symbols('x y')
>>> expr1 =x+y-5
>>> expr2 =2*x + 3*y - 8
>>> solve((expr1,expr2),dict=true)
[{x: 7, y: -2}]
把求解结果带入方程验证:
>>> soln = solve((expr1,expr2),dict=true)#solve()方法返回的list数据结构
>>> soln
[{x: 7, y: -2}]#soln是一个list,且只有一项,这一项是一个dict数据结构。
>>> type(soln)
<type 'list'>
>>> soln[0]#dict数据结构
{x: 7, y: -2}
>>> type(soln[0])
<type 'dict'>
>>> soln = soln[0]#把soln转化为dict数据结构
>>> type(soln)
<type 'dict'>
>>> expr1.subs({x:soln[x],y:soln[y]})#使用subs()函数,其参数是一个dict数据结构。
0
>>>
solve()函数返回的是一个list列表,其中还有一个dict结构的数据。subs()函数需要输入的是一个dict数据,因此我们需要把list数据转换为dict数据带入验证。
3.3.3 计算求和式
>>> n = sympy.Symbol('n')
>>> sympy.summation(n,(n,1,100))
5050
直接调用summation()函数即可,其中第一个n是求和表达式
3.3.4 求极限
例如:计算
>>> from sympy import *
>>> x = Symbol('x')
>>> limit('sin(x)/x',x,0)
1
limit()函数是哪个参数,第一个是字符串形式的表达式,第二个参数是变量,第三个参数是变量极限。
3.3.5 求导数
求函数的导数。
>>> x = sympy.Symbol('x')
>>> f = x**2 + 2*x + 1
>>> sympy.diff(f,x)
2*x + 2
3.3.6 求定积分
>>> x = sympy.Symbol('x')
>>> f = x**2 + 2*x + 1
>>> sympy.diff(f,x)
2*x + 2
>>> g = sympy.diff(f,x)
>>> sympy.integrate(g,(x,-2,2))
8
3.3.7 求不定积分
>>>g = 2*x+2
>>> sympy.integrate(g,x)
x**2 + 2*x
>>>