天天看点

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