栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

sympy —— Python 符号运算

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

sympy —— Python 符号运算

0. 素因子分解
>> import sympy
>> from sympy.ntheory import factorint
>> factorint(100)
{2: 1, 3: 1, 5: 2}

1. sympy:Python 自带符号运算库
  1. from sympy import *

  2. 自带常量E和复数单位I

  3. 简单测试

>>>x = Symbol('x', real=True)
>>>y = Symbol('y', real=True) 
>>>(x+y)**2
(x + y)**2
>>>expand((x+y)**2, real=True)
x**2 + 2*x*y + y**2

比如我们使用 sympy 来验证如下的等式:

x2+y2=(x+(2xy)1/2+y)(x−(2xy)1/2+y)

>> from sympy import Symbol, expand
>> from fractions import Fraction

>> x = Symbol('x')
>> y = Symbol('y')
>> expand((x+(2*x*y)**Fraction(1, 2)+y)*(x-(2*x*y)**Fraction(1, 2)+y))
x**2 + y**2

该等式的简单证明如下:

x2+y2==(x+y)2−2xy(x+y+2xy−−−√)(x+y−2xy−−−√)

2. sympy:多项式运算

x⋅(x2+x−1)2

>> from sympy import poly
>> from sympy.abc import x
>> poly(x*(x**2+x-1)**2)
Poly(x**5 + 2*x**4 - x**3 - 2*x**2 + x, x, domain='ZZ')

Polynomials Manipulation Module Reference

3. 解方程

使用 Python 解数学方程

  • 解一元一次方程: 3x−6=0

    >> from sympy import Symbol, solve
    >> x = Symbol('x')
    >> solve(x*3-6, x)
    [2]
  • 解 二元一次方程组:

    {y=1−x3x+2y=5

    >> x = Symbol('x')
    >> y = Symbol('y')
    >> f1 = y+x-1
    >> f2 = 3*x+2*y-5
    >> solve([f1, f2], [x, y])
    {x: 3, y: -2}

4. python 仿真
class array(object):
    def __init__(self, value, name=None):
        self.value = value
        if name:
            self.grad = lambda g: {name : g}
            # 定义梯度函数,返回一个字典

    # '+' 加号运算符重载
    def __add__(self, other):
        assert isinstance(other, int)
        ret = array(self.value+other)
        ret.grad = self.grad
        return ret

    # '*' 乘法运算符重载
    def __mul__(self, other):
        assert isinstance(other, array)
        ret = array(self.value*other.value)
        def grad(g):
            x = self.grad(g*other.value)
            x.update(other.grad(self.value*g))
                #  也即x*y,对x(self)的导数等于y(other),反之亦然
            return x
        ret.grad = grad
        return ret
x = array(1, 'x')
y = array(2, 'y')
w = x*y
z = w + 1
print(z.value)
print(z.grad(1))
            # z.grad是成员函数,而不是一个变量,或者一个字典

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/833990.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号