分类

安卓应用安卓游戏

编程软件 源码相关

SymPy(Python代数计算库)

SymPy(Python代数计算库) v1.8官方版 附教程

大小:7.6 MB

语言:简体中文系统:WinXP, Win2003, Vista, Win7, Win8, Win10

类别:源码相关时间:2021-04-11 13:07

SymPy是一款Python代数计算库,纯Python编写,软件目前只有1600的代码,包括算术、函数、替换和模式匹配等多种功能,可以在 LaTeX 中显示结果。涵盖微积分、解方程、矩阵、几何学、绘图等多种领域,让代码尽量的简单,方便理解和扩展。

基本介绍

SymPy是一个象征性的操作方案,纯Python写的。其目的是要成为一个全功能的Python代数计算库,同时保持为代码尽可能简单,以便理解和容易扩展。目前,Sympy目前只有1600的代码(包括注释行),其功能包括基本的算术,基本简化,一系列扩大,功能(exp, ln, sin, cos, tan, 等),分化,整合(目前只能做很简单的积分),基本替代,任意精度的整数和有理数,标准(Python)的浮点,基本复杂的数字和符号的限制。

软件功能

核心功能包括基本算术、函数、替换、模式匹配等。

多项式

微积分

解方程

组合学

离散数学

矩阵

几何学

绘图

物理学

统计数据

密码学

解析

印刷

SymPy使用教程

SymPy

SymPy 是用于符号数学的 Python 库。 它旨在成为功能齐全的计算机代数系统。 SymPy 包括从基本符号算术到微积分,代数,离散数学和量子物理学的功能。 它可以在 LaTeX 中显示结果。

$ pip install sympy

PySymPy 是使用pip install sympy命令安装的。

Rational值

SymPy 具有用于处理有理数的Rational。 有理数是可以表示为两个整数(分子 p 和非零分母 q)的商或分数 p / q 的任何数字。

rational_values.py

#!/usr/bin/env python

from sympy import Rational

r1 = Rational(1/10)

r2 = Rational(1/10)

r3 = Rational(1/10)

val = (r1 + r2 + r3) * 3

print(val.evalf())

val2 = (1/10 + 1/10 + 1/10) * 3

print(val2)

Py该示例使用有理数。

val = (r1 + r2 + r3) * 3

print(val.evalf())

Py该表达形式为符号形式。 我们使用evalf()方法对其进行求值。

$ rational_values.py

0.900000000000000

0.9000000000000001

Py注意,当不使用有理数时,输出中会有一个小错误。

SymPy pprint

pprint()用于在控制台上漂亮地打印输出。 LaTeX 可以达到最佳效果,例如 在 Jupyter 笔记本中。

prettify.py

#!/usr/bin/env python

from sympy import pprint, Symbol, exp, sqrt

from sympy import init_printing

init_printing(use_unicode=True)

x = Symbol('x')

a = sqrt(2)

pprint(a)

print(a)

print("------------------------")

c = (exp(x) ** 2)/2

pprint(c)

print(c)

Py程序会美化输出。

init_printing(use_unicode=True)

Py对于某些字符,我们需要启用 unicode 支持。

$ prettify.py

√2

sqrt(2)

------------------------

2⋅x

────

2

exp(2*x)/2

Py这是输出。 请注意,使用 Jupyter 笔记本会提供更好的输出。

平方根

平方根是一个数字,乘以它会产生指定的数量。

square_root.py

#!/usr/bin/env python

from sympy import sqrt, pprint, Mul

x = sqrt(2)

y = sqrt(2)

pprint(Mul(x, y, evaluate=False))

print('equals to ')

print(x * y)

Py程序输出一个包含平方根的表达式。

pprint(Mul(x, y, evaluate=False))

Py我们使用evaluate属性推迟对乘法表达式的求值。

$ square_root.py

√2⋅√2

equals to

2

Py这是输出。

SymPy 符号

符号计算适用于符号,以后可以对其进行求值。 使用符号之前,必须在 SymPy 中定义符号。

def_sym.py

#!/usr/bin/env python

# ways to define symbols

from sympy import Symbol, symbols

from sympy.abc import x, y

expr = 2*x + 5*y

print(expr)

a = Symbol('a')

b = Symbol('b')

expr2 = a*b + a - b

print(expr2)

i, j = symbols('i j')

expr3 = 2*i*j + i*j

print(expr3)

Py该程序显示了三种在 SymPy 中定义符号的方法。

from sympy.abc import x, y

Py可以从sympy.abc模块导入符号。 它将所有拉丁字母和希腊字母导出为符号,因此我们可以方便地使用它们。

a = Symbol('a')

b = Symbol('b')

Py可以用Symbol定义

i, j = symbols('i j')

Py可以使用symbols()方法定义多个符号。

SymPy 规范表达形式

SymPy 会自动将表达式转换为规范形式。 SymPy 仅执行廉价操作; 因此,表达式可能无法求值为最简单的形式。

canonical_form.py

#!/usr/bin/env python

from sympy.abc import a, b

expr = b*a + -4*a + b + a*b + 4*a + (a + b)*3

print(expr)

Py我们有一个带有符号a和b的表达式。 该表达可以容易地简化。

$ canonical_form.py

2*a*b + 3*a + 4*b

Py这是输出。

SymPy 扩展代数表达式

使用expand(),我们可以扩展代数表达式; 即该方法尝试消除幂和乘法。

expand.py

#!/usr/bin/env python

from sympy import expand, pprint

from sympy.abc import x

expr = (x + 1) ** 2

pprint(expr)

print('-----------------------')

print('-----------------------')

expr = expand(expr)

pprint(expr)

Py该程序扩展了一个简单的表达式。

$ expand.py

2

(x + 1)

-----------------------

-----------------------

2

x + 2⋅x + 1

Py这是输出。

SymPy 简化表达式

可以使用simplify()将表达式更改为更简单的形式。

simplify.py

#!/usr/bin/env python

from sympy import sin, cos, simplify, pprint

from sympy.abc import x

expr = sin(x) / cos(x)

pprint(expr)

print('-----------------------')

expr = simplify(expr)

pprint(expr)

Py例如将sin(x)/sin(y)表达式简化为tan(x)。

$ simplify.py

sin(x)

──────

cos(x)

-----------------------

tan(x)

Py这是输出。

SymPy 比较表达式

SymPy 表达式与equals()而不是==运算符进行比较。

expr_equality.py

#!/usr/bin/env python

from sympy import pprint, Symbol, sin, cos

x = Symbol('x')

a = cos(x)**2 - sin(x)**2

b = cos(2*x)

print(a.equals(b))

# we cannot use == operator

print(a == b)

Py该程序比较两个表达式。

print(a.equals(b))

Py我们用equals()比较两个表达式。 在应用该方法之前,SymPy 尝试简化表达式。

$ expr_equality.py

True

False

Py这是输出。

SymPy 求值表达式

可以通过替换符号来求值表达式。

evaluating.py

#!/usr/bin/env python

from sympy import pi

print(pi.evalf(30))

Py该示例将 pi 值求值为 30 个位。

$ evaluating.py

3.14159265358979323846264338328

Py这是输出。

evaluating2.py

#!/usr/bin/env python

from sympy.abc import a, b

from sympy import pprint

expr = b*a + -4*a + b + a*b + 4*a + (a + b)*3

print(expr.subs([(a, 3), (b, 2)]))

Py本示例通过用数字替换a和b符号来求值表达式。

$ evaluating.py

3.14159265358979323846264338328

Py这是输出。

SymPy 求解方程

用solve()或solveset()求解方程。

solving.py

#!/usr/bin/env python

from sympy import Symbol, solve

x = Symbol('x')

sol = solve(x**2 - x, x)

print(sol)

Py该示例使用solve()解决了一个简单方程。

sol = solve(x**2 - x, x)

Pysolve()的第一个参数是公式。 该公式以适合 SymPy 的特定形式编写; 即x**2 - x代替x**2 = x。 第二个参数是我们需要解决的符号。

$ solving.py

[0, 1]

Py该方程式有两个解:0 和 1。

或者,我们可以将Eq用于公式。

solving2.py

#!/usr/bin/env python

from sympy import pprint, Symbol, Eq, solve

x = Symbol('x')

eq1 = Eq(x + 1, 4)

pprint(eq1)

sol = solve(eq1, x)

print(sol)

Py该示例解决了一个简单的x + 1 = 4方程。

$ solving2.py

x + 1 = 4

[3]

Py这是输出。

solving3.py

#!/usr/bin/env python

from sympy.solvers import solveset

from sympy import Symbol, Interval, pprint

x = Symbol('x')

sol = solveset(x**2 - 1, x, Interval(0, 100))

print(sol)

Py使用solveset(),我们找到了给定间隔的解决方案。

$ solving3.py

{1}

Py这是输出。

SymPy 序列

序列是其中允许重复的对象的枚举集合。 序列可以是有限的或无限的。 元素的数量称为序列的长度。 与集合不同,同一元素可以在序列中的不同位置出现多次。 元素的顺序很重要。

sequence.py

#!/usr/bin/env python

from sympy import summation, sequence, pprint

from sympy.abc import x

s = sequence(x, (x, 1, 10))

print(s)

pprint(s)

print(list(s))

print(s.length)

print(summation(s.formula, (x, s.start, s.stop)))

# print(sum(list(s)))

Py本示例创建一个由数字 1、2,…,10 组成的序列。 我们计算这些数字的总和。

$ sequence.py

SeqFormula(x, (x, 1, 10))

[1, 2, 3, 4, …]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

10

55

Py这是输出。

SymPy 极限

极限是函数(或序列)“接近”作为输入(或索引)“接近”某个值的值。

limit.py

#!/usr/bin/env python

from sympy import sin, limit, oo

from sympy.abc import x

l1 = limit(1/x, x, oo)

print(l1)

l2 = limit(1/x, x, 0)

print(l2)

Py在示例中,我们具有1/x功能。 它具有左侧和右侧限制。

from sympy import sin, limit, sqrt, oo

Pyoo表示无穷大。

l1 = limit(1/x, x, oo)

print(l1)

Py我们计算1/x的极限,其中 x 接近正无穷大。

$ limit.py

0

oo

Py这是输出。

SymPy 矩阵

在 SymPy 中,我们可以使用矩阵。 矩阵是数字或其他数学对象的矩形数组,为其定义了运算(例如加法和乘法)。

矩阵用于计算,工程或图像处理。

matrix.py

#!/usr/bin/env python

from sympy import Matrix, pprint

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

print(M)

pprint(M)

N = Matrix([2, 2])

print("---------------------------")

print("M * N")

print("---------------------------")

pprint(M*N)

Py该示例定义了两个矩阵并将它们相乘。

$ matrix.py

Matrix([[1, 2], [3, 4], [0, 3]])

⎡1 2⎤

⎢ ⎥

⎢3 4⎥

⎢ ⎥

⎣0 3⎦

---------------------------

M * N

---------------------------

⎡6 ⎤

⎢ ⎥

⎢14⎥

⎢ ⎥

⎣6 ⎦

Py这是输出。

SymPy 绘图

SymPy 包含用于绘图的模块。 它基于 Matplotlib 构建。

simple_plot.py

#!/usr/bin/env python

# uses matplotlib

import sympy

from sympy.abc import x

from sympy.plotting import plot

plot(1/x)

Py该示例绘制了1/x函数的二维图。

∨ 展开

同类推荐

相关下载

热门游戏

下载排行

热门关键字

  • 编程软件
  • 编程控件
  • 编译调试
  • 开发环境
  • 网页制作
  • 安装制作
  • 数据库类
  • Java相关
  • 加壳脱壳
  • 控件下载
  • 源码相关
  • 编程其他