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)22xy(x+y+2xy)(x+y2xy)

2. sympy:多项式运算

x(x2+x1)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 解数学方程

  • 解一元一次方程: 3x6=0

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

    {y=1x3x+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是成员函数,而不是一个变量,或者一个字典
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值