sympy —— Python 符號運算
0. 素因子分解
>> import sympy
>> from sympy.ntheory import factorint
>> factorint(100)
{2: 1, 3: 1, 5: 2}
1. sympy:Python 自帶符號運算庫
from sympy import *
自帶常量
E
和複數單位I
簡單測試
>>>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 來驗證如下的等式:
\begin{split}
x^2+y^2=&(x+(2xy)^{1/2}+y)(x-(2xy)^{1/2}+y)\\
\end{split}
>> 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
該等式的簡單證明如下:
\begin{split}
x^2+y^2=&\left(x+y\right)^2-2xy\\
=&\left(x+y+\sqrt{2xy}\right)\left(x+y-\sqrt{2xy}\right)
\end{split}
2. sympy:多項式運算
x\cdot \left(x^2+x-1\right)^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. 解方程
解一元一次方程:
3x−6=0 3x-6=0>> from sympy import Symbol, solve >> x = Symbol('x') >> solve(x*3-6, x) [2]
解 二元一次方程組:
{y=1−x3x+2y=5 \left\{ \begin{split} y=1-x\\ 3x+2y=5 \end{split} \right.>> 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是成員函式,而不是一個變數,或者一個字典
相關文章
- Sympy玩轉邏輯符號運算符號
- python函式符號sympy的用法Python函式符號
- Verilog有符號數、無符號數之間的賦值與運算符號賦值
- python 中 *符號Python符號
- Linux中MAXIMA符號運算軟體的簡介(轉)Linux符號
- JavaScript >> 有符號右移運算子JavaScript符號
- kingofark's Ineffective C/C++:自白2:有符號、無符號還有位運算,我的天! (轉)GoC++符號
- JavaScript >>> 三個大於號無符號右移運算子JavaScript符號
- python的識別符號Python符號
- matlab符號運算結果的分數怎麼轉化為小數Matlab符號
- 關於Matlab中符號運算的因式分解、展開與合併Matlab符號
- python 負數去掉符號位Python符號
- 有符號浮點運算的基本步驟:以雙線性插值為例符號
- 無符號數相減得到的是無符號還是有符號?符號
- [C]有符號數和無符號數符號
- Python多行註釋符號是什麼?Python符號
- Python—三目運算Python
- Python邏輯運算Python
- python運算元據Python
- CSS @ 符號CSS符號
- 特殊符號符號
- 符號使用符號
- 符號(註釋符+轉義符+接續符)符號
- 警惕python中的*重複符(運算子)Python
- python:LEGB識別符號解析順序Python符號
- Python的符號、對齊和用0填充Python符號
- 遞迴 | 第k個語法符號(Python)遞迴符號Python
- [Python影象處理] 九.形態學之影象開運算、閉運算、梯度運算Python梯度
- 關於有符號與無符號的位元組符號
- Python基礎運算分享Python
- Python-資料運算Python
- python-布林運算Python
- Python 賦值與運算子和連線符Python賦值
- 符號連結符號
- Google Map 符號Go符號
- Html 特殊符號HTML符號
- PHP基本符號PHP符號
- Shell 符號(轉)符號