ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python使用sympy不定积分入门及求解

2020-03-09 16:56:07  阅读:506  来源: 互联网

标签:symbols python expr 不定积分 运算符 import print sympy


  1.安装

  pip3 install sympy

  建议使用anaconda,里面有大量的科学包,方便使用!

  2.使用

  我会根据我的理解和官方教程来进行使用,英语好的可以直接去官网看,防止我可能出现的理解误差。

  请认真看注释!

  from sympy import * //引入包

  x = symbols('x') //声明变量'x'

  a = Integral(cos(x)*exp(x),x) //

  print(Eq(a,a.doit()))

  Symbol()函数定义单个数学符号;symbols()函数定义多个数学符号

  3.数学符号

  学了那么久python,忽然发现自己连数学符号都不会打,趁这次机会学习一下好了。

  sqrt:根号

  pi:圆周率

  exp(x):exe^xex

  详见《python之math库的使用》

  复数的表示

  aComplex = 1 + 2j //申明一个复数

  aComplex

  (1+2j)

  aComplex.real //复数实部

  1.0

  aComplex.imag //复数虚部

  2.0

  aComplex.conjugate() //共轭复数

  (1-2j)

  //  取整除 - 向下取接近除数的整数

  比较运算符

  ==  等于 - 比较对象是否相等  (a == b) 返回 False。

  !=  不等于 - 比较两个对象是否不相等  (a != b) 返回 True。

  >  大于 - 返回x是否大于y  (a > b) 返回 False。

  <  小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。  (a < b) 返回 True。

  >=  大于等于 - 返回x是否大于等于y。  (a >= b) 返回 False。

  <=  小于等于 - 返回x是否小于等于y。  (a <= b) 返回 True。

  赋值运算符

  以下假设变量a为10,变量b为20:

  运算符  描述  实例

  =  简单的赋值运算符  c = a + b 将 a + b 的运算结果赋值为 c

  +=  加法赋值运算符  c += a 等效于 c = c + a

  -=  减法赋值运算符  c -= a 等效于 c = c - a

  *=  乘法赋值运算符  c *= a 等效于 c = c * a

  /=  除法赋值运算符  c /= a 等效于 c = c / a

  %=  取模赋值运算符  c %= a 等效于 c = c % a

  **=  幂赋值运算符  c **= a 等效于 c = c ** a

  //=  取整除赋值运算符  c //= a 等效于 c = c // a

  :=  海象运算符,可在表达式内部为变量赋值。Python3.8 版本新增运算符。  在这个示例中,赋值表达式可以避免调用 len() 两次:if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")

  示例:

  4.扩展运用

  折叠表达式

  factor()函数可以折叠表达式(提取公因子),而expand()函数可以展开表达式(类似于一般式)

  举个例子:x3+y2x2+zxx^3+y^2x^2+zxx3+y2x2+zx,折叠后:x(x2+y2x+z)x(x^2+y^2x+z)x(x2+y2x+z).

  import math

  import sympy

  x,y,z = symbols('x y z')

  expr = x**3+(x**2)*(y**2)+z*x

  f_expr = factor(expr)

  e_expr = expand(f_expr)

  print(f_expr)

  print(e_expr)

  输出结果:

  x*(x**2 + x*y**2 + z)

  x**3 + x**2*y**2 + x*z

  表达式化简

  simplify()函数可以对表达式进行化简,相当于合并同类项

  from sympy import *

  x,y = symbols('x y')

  expr=(2*x)**3*(-5*x*y**2)

  s_expr=simplify(expr)

  print(s_expr)

  输出: -40*x**4*y**2

  求解方程组

  一元方程组,例:6x+6(x−2000)=1500006x+6(x-2000)=1500006x+6(x−2000)=150000, (需要移项)

  from sympy import *

  x = Symbol('x')

  print(solve(6*x + 6*(x-2000)-150000,x)) //默认使用一边为0来求解

  二元一次方程组,例:

  from sympy import *

  x,y = symbols('x y')

  print(solve([x + y-10,2*x+y-16],[x,y]))

  输出: {x: 6, y: 4}

  n元同理,不再示例。

  一元二次方程组

  from sympy import *

  x,y = symbols('x y')

  a,b,c = symbols('a b c')

  expr = a*x**2 + b*x + c

  s_expr = solve(expr, x) //告知要解的参数

  print(s_expr)

  输出 :[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)]

  微积分Calculus

  一个非常重点的内容,请认真看并记住!

  求极限

  Sympy是使用limit(表达式,变量,极限值)函数来求极限的

  例子:lim⁡y→0sin(x)x\displaystyle \lim_{y \to0}\frac{sin(x)}{x}y→0limxsin(x)

  from sympy import *

  x,y = symbols('x y')

  expr = sin(x)/x

  l_expr = limit(expr, x, 0)

  print(l_expr)

  结果为1

  求导郑州人流医院 http://m.zzzy120.com/

  可以使用diff(表达式,变量,求导的次数)函数对表达式求导(matlab也和这个差不多)

  例子:sin(x)exsin(x)e^xsin(x)ex

  from sympy import *

  x,y = symbols('x y')

  expr = sin(x)*exp(x)

  diff_expr = diff(expr, x)

  diff_expr2 = diff(expr,x,2) //n阶导同理

  print(diff_expr)

  print(diff_expr2)

  求不定积分

  Sympy是使用integrate(表达式,变量)来求不定积分的

  例子:exsin(x)+excos(x)e^xsin(x)+e^xcos(x)exsin(x)+excos(x)

  from sympy import *

  x,y = symbols('x y')

  expr=exp(x)*sin(x) + exp(x)*cos(x)

  i_expr=integrate(expr,x)

  print(i_expr)

  输出原函数:exp(x)*sin(x)

  求定积分

  Sympy同样是使用integrate()函数来做定积分的求解,

  例子:sin(x2)sin(x^2)sin(x2)

  from sympy import *

  x,y = symbols('x y')

  expr=sin(x**2)

  i_expr=integrate(expr, (x, -oo, oo))

  print(i_expr)

  输出:sqrt(2)*sqrt(pi)/2 即:2π2\frac{\sqrt 2 \sqrt \pi}{2}22π (哭了,手算算不出来,无法验证)

  注意:

  本人也是一个初学者,如有不对的地方望批评指正!

  5.其他函数及参数的用法

  这个涉及的知识就会比较深了,一般只有较高级的运用才会使用的到,一般仿照上面的代码使用就可以解决绝大多数问题,纯个人想加深理解,选读 (等我有能力的时候再看下源码吧!)

  传参:

  from sympy import *

  x = symbols('x')

  fx = 5*x+4

  # 使用evalf函数传值

  y1 = fx.evalf(subs={x:6})

  print(y1)

  微分:

  矩阵:

  构建矩阵:

  from sympy import *

  # 一纬矩阵

  m1 = Matrix([1, 2, 3])

  #二维矩阵

  m2 = Matrix([[1, -1], [3, 4], [0, 2]])

  print(latex(m1)

  print(latex(m2))

  输出:

  \left[\begin{matrix}1\\2\\3\end{matrix}\right]

  \left[\begin{matrix}1 & -1\\3 & 4\\0 & 2\end{matrix}\right]

  完了,有些看不懂,赶紧去查查! 详情请看《LaTeX之数学公式及符号的语法及表达》

  扩展知识:

  Eq():创建方程 (例:Eq(x**7+a^2,0) 等式的左边和右边

  solve:求解方程

  部分单词扩展:

  integral :积分

  indefinite:不定积分 definite:定积分

  differential:微分

  eigenvalues:特征值


标签:symbols,python,expr,不定积分,运算符,import,print,sympy
来源: https://blog.51cto.com/14335413/2476691

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有