3.3 求高等代数问题

3.3.1解方程

  1. 解一般的一元一次和一元二次方程
    解方程x-5-7=0,和x^2-5x-7=0,我们首先需要把方程化成一般形式,然后带入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. 求解一元二次方程的通解。ax^2+bx+c=0
>>> 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. 匀加速直线运动的时间
    我们知道匀加速直线运动的路程方程s = ut +\dfrac{1}{2}at^2,求解时间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解方程组

已知方程组:
\begin{cases} x+y=5\\ 2x+3y=8 \end{cases}

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 计算求和式

\sum_{n=1}^Nn

>>> n = sympy.Symbol('n')
>>> sympy.summation(n,(n,1,100))
5050

直接调用summation()函数即可,其中第一个n是求和表达式

3.3.4 求极限

例如:计算\lim_{x \to 0}\dfrac{sin(x)}{x}

>>> from sympy import *
>>> x = Symbol('x')
>>> limit('sin(x)/x',x,0)
1

limit()函数是哪个参数,第一个是字符串形式的表达式,第二个参数是变量,第三个参数是变量极限。

3.3.5 求导数

求函数f = x^2+2x+1的导数。

>>> x = sympy.Symbol('x')
>>> f = x**2 + 2*x + 1
>>> sympy.diff(f,x)
2*x + 2

3.3.6 求定积分

\int_{-2}^{2} 2x\, dx

>>> 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 求不定积分

\int 2x\, dx

>>>g = 2*x+2
>>> sympy.integrate(g,x)
x**2 + 2*x
>>>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第二章 到底是不是恶作剧? 姬言西一边在操作台上工作,一边和旁边的同事打屁。 “最近啊我总是有种感觉,要有好事发生...
    猴子吃葡萄阅读 1,648评论 0 0
  • 01 每日金句:不要害怕你的生活将要被约束,应该担心你的生活永远不曾真的开始。 昨天听龙兄60秒学演讲,乔布斯说:...
    奔跑的一梦阅读 1,576评论 0 0
  • 性质1. 行列式的行、列互变,值不变! [ 行列式和它的转置(transpose)行列式 值相等 ] 性质2. 交...
    wendan97阅读 4,933评论 0 0
  • 我很少画人物,也不敢画,因为人物需对人体结构和比例十分精准到位,是属于理性范畴的。而自己是那种随心率性的,主观意识...
    树先森6阅读 3,541评论 9 8
  • 覆雪 文/落雪 关于人间的爱,还有恨 我忽然对一小片麦芒心生敌意 . 它们刺破我的手指 红色的血滴在麦子上,像河流...
    落雪lx阅读 3,911评论 0 3

友情链接更多精彩内容