天天看點

python實作matlab中的diff,用matlab和python實作符号運算

前言

在matlab中可以使用syms定義符号變量,友善數學公式推導;在python中也有類似的功能,SymPy是Python強大的數學符号計算庫。

在下面的例子中,我們定義函數

python實作matlab中的diff,用matlab和python實作符号運算

MATLAB符号變量

>> syms x y; % 定義符号變量

>> f = x^2 + 2*y;

>> f

f =

x^2 + 2*y

分别對x 和y 求導

>> diff(f, x)

ans =

2*x

>> diff(f, y)

ans =

2

将具體值賦予指定變量時

>> subs(f, {x, y}, {2, 1})

ans =

6

>> subs(f, {x}, {3})

ans =

2*y + 9

>>

求函數

python實作matlab中的diff,用matlab和python實作符号運算

,例如對求極值點時非常有用

>> f = x + 1

f =

x + 1

>> solve(f, x)

ans =

-1

Python符号變量

>>> from sympy import *

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

>>> f = x**2 + 2*y

>>> print f

x**2 + 2*y

分别對x 和y 求導

>>> print diff(f, x)

2*x

>>> print diff(f, y)

2

将具體值賦予指定變量時

>>> print f.evalf(subs = {x:2, y:1}) # 求表達式的浮點數-evalf()函數

6.00000000000000

>>> print f.subs({x:2, y:1})

6

>>> print f.subs(x, 3)

2*y + 9

同樣,求解函數

python實作matlab中的diff,用matlab和python實作符号運算

時的x 值

>>> f = x + 1

>>> print f

x + 1

>>> print solve(f, x)

[-1]

一個例子

from sympy import *

apples = []

letters = [chr(i) for i in range(97,123)]

str = ''

for i in range(0,4):

apples.append(symbols(letters[i]))

func = 0

for i in range(0, 4):

for j in range(0, 4):

if i != j:

func = func + apples[i] * apples[j]

func = func / 2

print func

Reference