3.3 求高等代数问题

3.3.1解方程

  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的内置数据结构类型。

  1. 求解一元二次方程的通解。
>>> 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()函数求解的参数是哪个,通过第二个参数进行制定我们要求解的参数。

  1. 匀加速直线运动的时间
    我们知道匀加速直线运动的路程方程,求解时间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)

>>> soln[0]#dict数据结构
{x: 7, y: -2}
>>> type(soln[0])

>>> soln = soln[0]#把soln转化为dict数据结构
>>> type(soln)

>>> 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
>>>

你可能感兴趣的:(3.3 求高等代数问题)