SymPy - 函数类

Sympy 包中有函数 Function 类, 定义在模块 sympy.core.function 之中. 它是所有的应用数学函数的基类, 另外也作为抽象(未定义的)函数的构造函数.

如下的函数类型是从 Function 类继承而来 −

  • 复数函数
  • 三角函数
  • 整数相关函数
  • 组合函数
  • 其它不常用函数

复(数)函数

此类函数定义在模块 sympy.functions.elementary.complexes 之中.

实部 re

这个函数返回一个表达式的实部 −

>>> from sympy import *
>>> re(5+3*I)

上述代码给出结果 −

5

>>> re(I)

上述代码给出结果 −

0

虚部 Im

这个函数给出表达式的虚部 −

>>> im(5+3*I)

上述代码给出结果 −

3

>>> im(I)

上述代码给出结果 −

1

符号 sign

这个函数返回一个表达式的复数符号.

对于实数表达式, 符号将会是 −

  • 1 如果表达式是正的
  • 0 如果表达式等于零
  • -1 如果表达式是负的

如果表达式是纯虚数将返回结果如下 −

  • I 如果 im(expression) 是正的
  • -I 如果 im(expression) 是负的
>>> sign(1.55), sign(-1), sign(S.Zero)

上述代码得到结果 −

(1, -1, 0)

>>> sign (-3*I), sign(I*2)

上述代码给出结果 −

(-I, I)

绝对值(模)Abs

这个函数返回复数的绝对值或者模. 也就是在复平面上从点 (a,b) 到原点 (0,0) 的距离. 这个函数是内建函数 abs() 的拓展以接收符号值.

>>> Abs(2+3*I)

上述代码给出结果 −

共轭复数conjugate

这个函数返回复数的共轭. 为寻求共轭复数只需要把虚部改变符合即可.

>>> conjugate(4+7*I)

执行上述代码得到 −

4 - 7i

三角函数

SymPy 定义了所有的三角函数例如 - sin cos, tan 等, 另外还有它们的反函数,例如 asin, acos, atan 等. 这些函数计算给定的各种角无论是弧度或者角度.

>>> sin(pi/2), cos(pi/4), tan(pi/6)

执行上述代码得到 −

(1, sqrt(2)/2, sqrt(3)/3)

>>> asin(1), acos(sqrt(2)/2), atan(sqrt(3)/3)

执行上述代码得到 −

(pi/2, pi/4, pi/6)

整数上的函数

这一类函数是针对整数进行的各种操作.

上取整ceiling

这个函数是一个一元函数返回不小于给定参数的最小整数. 在复数情形下, 则是分别对实部和虚部进行上取整.

>>> ceiling(pi), ceiling(Rational(20,3)), ceiling(2.6+3.3*I)

执行上述代码得到 −

(4, 7, 3 + 4*I)

下取整floor

这个函数返回不超过参数的最大整数. 在复数情形下, 这个函数对于实部和虚部分别下取整.

>>> floor(pi), floor(Rational(100,6)), floor(6.3-5.9*I)

执行上述代码得到 −

(3, 16, 6 - 6*I)

分数frac

这个函数返回 x 的分数部分.

>>> frac(3.99), frac(Rational(10,3)), frac(10)

执行上述代码得到 −

(0.990000000000000, 1/3, 0)

组合函数

组合数学 Combinatorics 是数学的一个领域, 关注于选择、排列以及在一个有限或离散系统上操作的数学问题.

阶乘函数factorial

阶乘在组合数学组合是非常重要的, 结果表示n 个对象不同的排列总数. 用符号可以表示为"!". 这个阶乘函数定义于非负整数, 如果参数是负的则返回复无穷complex infinity.

>>> x=Symbol('x')
>>> factorial(x)

执行上述代码得到 −

x!

>>> factorial(5)

执行上述代码得到 −

120

>>> factorial(-1)

执行上述代码得到 −

∞∽

组合数 binomial

这个函数给出从n个不同元素中选取k个不同元素的方法总数.

>>> x,y=symbols('x y')
>>> binomial(x,y)

执行上述代码得到 −

>>> binomial(4,2)

执行上述代码得到 −

6

杨辉三角(西方人称为Pascal's triangle)的行可以通过组合数函数得到.

>>> for i in range(5): print ([binomial(i,j) for j in range(i+1)])

执行上述代码得到 −

[1]

[1, 1]

[1, 2, 1]

[1, 3, 3, 1]

[1, 4, 6, 4, 1]

斐波那契数列fibonacci

斐波那契数列 是由初始条件 F0=0, F1=1 以及递归式定义的数列 

>>> [fibonacci(x) for x in range(10)]

执行上述代码得到 −

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

三阶斐波那契数列tribonacci

斐波那契数列 事实上就是二阶差分方程 因此 三阶斐波那契数列也可以类似定义为:初始条件为 F0=0, F1=1, F2=1, 迭代关系式为 Fn=Fn-1+Fn-2+Fn-3的数列.

>>> tribonacci(5, Symbol('x'))

执行上述代码得到 −

>>> [tribonacci(x) for x in range(10)]

执行上述代码得到 −

[0, 1, 1, 2, 4, 7, 13, 24, 44, 81]

不常用函数

接下来是一些常用函数 −

Min − 返回列表的最小值t. 它的名称 Min 之所以首字母大写是为了和内建函数 min相区分.

Max − 返回列表的最大值. 它的名称 Max 是为了不和内建函数 max 冲突.

root − 返回 x 的第 n 个根.

sqrt − 返回 x 的主平方根.

cbrt − 这个函数计算 x 的主三次方根, (就是 x**Rational(1,3)的简写).

接下来就是上述不常用函数的示例及其各自的输出 −

>>> Min(pi,E)

e

>>> Max(5, Rational(11,2))

112112

>>> root(7,Rational(1,2))

49

>>> sqrt(2)

2–√2

>>> cbrt(1000)

10

SymPy - 解方程

因为符号 = 和 == 定义为Python中的赋值和等式算子,所以它们不能用于刻画符号方程. 在 SymPy 中提供了函数 Eq() 来建立一个方程.

>>> from sympy import *
>>> x,y=symbols('x y')
>>> Eq(x,y)

上述命令给出一个等价于如下结果的输出 −

x = y

因为 x=y 是可能的当且仅当 if x-y=0, 上述方程可以写作 −

>>> Eq(x-y,0)

上述代码给出一个等价于如下结果的输出 −

x − y = 0

SymPy 中 solver 模块中的函数 solveset() 它的原型如下 −

solveset(equation, variable, domain)

默认的定义域是复数域 S.Complexes. 使用函数 solveset(), 我们可以解一个代数方程, 例如 −

>>> solveset(Eq(x**2-9,0), x)

上述命令输出结果 −

{−3, 3}

>>> solveset(Eq(x**2-3*x, -2),x)

执行上述命令得到如下结果 −

{1,2}

solveset 的输出是一个解的 FiniteSet 有限集合. 如果没有解, 返回空集EmptySet

>>> solveset(exp(x),x)

执行上述命令得到如下结果 −

线性方程

我们必须使用函数 linsolve() 以求解线性方程组.

例如, 如下的线性方程组 −

>>> from sympy import *
>>> x,y=symbols('x y')
>>> linsolve([Eq(x-y,4),Eq( x + y ,1) ], (x, y))

执行上述命令得到如下结果 −

函数 linsolve() 也可以求解用矩阵形式表示的线性方程组.

>>> a,b=symbols('a b')
>>> a=Matrix([[1,-1],[1,1]])
>>> b=Matrix([4,1])
>>> linsolve([a,b], (x,y))

执行上述命令得到如下结果 −

非线性方程(组)

我们使用 nonlinsolve() 函数计算非线性方程(组). 这类方程的示例如下 −

>>> a,b=symbols('a b')
>>> nonlinsolve([a**2 + a, a - b], [a, b])

执行上述命令得到如下结果 −

微分方程(组)

首先通过给函数 symbols 传递一个参数 cls=Function 来定义一个未知函数. 解微分方程(组)使用函数 desolve.

>>> x=Symbol('x')
>>> f=symbols('f', cls=Function)
>>> f(x)

执行上述命令得到如下结果 −

f(x)

这里的 f(x) 是一个未定义的函数. 它的导数定义如下 −

>>> f(x).diff(x)

执行上述命令得到如下结果 −

首先创建对应于如下微分方程的 Eq 对象

>>> eqn=Eq(f(x).diff(x)-f(x), sin(x))
>>> eqn

执行上述命令得到等价于如下表达式的结果 −

>>> dsolve(eqn, f(x))

执行上述命令得到等价于如下表达式的结果 −

Sympy简单教程(6)相关推荐

  1. ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.NET Cor ...

  2. idea 从svn导入多个项目_IDEA导入项目简单教程

    该教程用于IDEA初学者导入eclipse项目,或者导入其他已经写好的Java源程序的简单教程. 我们用IDEA打开一个已经写好的项目源文件时,如果没有配置好,就会出现:JDK配置失误报错.程序无法启 ...

  3. expect简单教程

    expect简单教程 一.概述 expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Pas ...

  4. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

  5. Git和Github简单教程

    网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章主要的目标是用较少的时间学习Git和Gi ...

  6. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

  7. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  8. wcf简单教程(10) ajax调用,wcf简单教程(10) ajax调用

    wcf简单教程(10) ajax调用 [2021-02-11 16:23:59]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&q ...

  9. ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单 ...

最新文章

  1. java自考真题_自考04747JAVA语言程序设计(一)历年真题试卷下载
  2. android 默认光标大小设置,如何默认光标位置设置的EditText
  3. IT人员健康信号之颈椎病自疗
  4. qt初学者 第一个小程序 小界面
  5. python中的引用怎么理解_Python函数通过引用调用
  6. php扇形分布图,php生成扇形比例图的实例代码
  7. javascript基础修炼(1)——一道十面埋伏的原型链面试题
  8. Redis内存缓存系统入门
  9. netty框架实现websocket达到高并发
  10. 高速理解掌握node.js 字符编码,确码过程 以及base64编解码原理
  11. Altium designer—各类USB封装大全
  12. 常用数据分析方法总结
  13. 学习C语言的必备书籍-从入门到精通
  14. HTML+PHP+Mysql登录注册页面
  15. 银行系统需要处理的信息
  16. 北京科技大学C语言锐格答案,北京科技大学软件课程设计作业.pdf
  17. css边框图片border-image切图原理
  18. 用python求圆的表面积_【用python写一组类(class)对应各种几何体(正方体,长方体,球,圆柱)的表面积和体积的编码】作业帮...
  19. {转载}circos绘图(2)
  20. office二级证书和mysql_二级考office还是access ??在线等 挺急的 (内附合格证书领取通知)...

热门文章

  1. 赛门铁克就“误杀系统文件”一事作官方声明
  2. 怎么将C盘多余的空间分到其他盘
  3. 战队口号霸气押韵8字_偶像团队应援口号,火箭霸气TF暖心,粉墨粉丝表示臣妾做不到...
  4. 孙云球(二分枚举)(AOJ 851)
  5. 【转载】SELU 激活函数
  6. [批处理]解决老程序3D加速不兼容问题 --一键开启/关闭3D加速
  7. 【Centos各版本下载地址7.6,7.5】
  8. 使用Cypress进行UI测试(一)安装Cypress第一个测试用例
  9. Win10进不了u盘启动该怎么办?win10无法使用U盘启动的解决方法!
  10. 新手做电商,怎么找到合适的快递合作方