88 lines
2.2 KiB
Python
88 lines
2.2 KiB
Python
"""
|
||
This code is supported by the website: https://www.guanjihuan.com
|
||
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/14684
|
||
"""
|
||
|
||
import sympy
|
||
|
||
|
||
# 定义符号
|
||
print()
|
||
print('定义符号:')
|
||
x, y, z = sympy.symbols('x y z') # 使用sympy.symbols
|
||
print(x)
|
||
print(y+1)
|
||
print(z**2)
|
||
print()
|
||
|
||
|
||
# 替换(Substitution)
|
||
print('变量替换:')
|
||
expression_1 = x**2+1
|
||
value_1 = expression_1.subs(x, 3) # 使用.subs()方法
|
||
print(value_1)
|
||
print()
|
||
|
||
|
||
# 字符串转成符号表达式
|
||
print('字符串转成符号表达式:')
|
||
expression_string = 'x**3+1'
|
||
print(expression_string)
|
||
expression_2 = sympy.sympify(expression_string) # 使用sympy.sympify()
|
||
print(expression_2)
|
||
value_2 = expression_2.subs(x, 2)
|
||
print(value_2)
|
||
print()
|
||
|
||
|
||
# 简化表达式
|
||
print('简化表达式:')
|
||
expression_3 = sympy.simplify(sympy.sin(x)**2 + sympy.cos(x)**2) # 使用sympy.simplify()
|
||
print(expression_3)
|
||
print()
|
||
|
||
|
||
# 符号矩阵
|
||
print('符号矩阵:')
|
||
a, b = sympy.symbols('a b')
|
||
matrix = sympy.Matrix([[1, a], [0, b]]) # 使用sympy.Matrix()
|
||
print(matrix)
|
||
print()
|
||
|
||
|
||
sympy.init_printing(use_unicode=True)
|
||
# 符号矩阵的特征值和特征向量
|
||
print('符号矩阵的特征值和特征向量:')
|
||
eigenvalue = matrix.eigenvals() # 使用.eigenvals()方法
|
||
print('特征值\n', eigenvalue, '\n')
|
||
sympy.pprint(eigenvalue) # 使用sympy.pprint()输出
|
||
print('\n', sympy.pretty(eigenvalue)) # 使用sympy.pretty()美化后输出
|
||
print()
|
||
|
||
eigenvector = matrix.eigenvects() # 使用.eigenvects()方法
|
||
print('特征向量\n', eigenvector, '\n')
|
||
sympy.pprint(eigenvector)
|
||
print('\n', sympy.pretty(eigenvector))
|
||
print()
|
||
|
||
P, D = matrix.diagonalize() # 使用.diagonalize()方法
|
||
print('特征值\n', D, '\n')
|
||
print(sympy.pretty(D), '\n')
|
||
print('特征向量\n', P, '\n')
|
||
print(sympy.pretty(P), '\n')
|
||
print()
|
||
|
||
print('特征值\n', D.subs(a, -4).subs(b, 2), '\n')
|
||
print(sympy.pretty(D.subs(a, -4).subs(b, 2)), '\n')
|
||
print('特征向量\n', P.subs(a, -4).subs(b, 2), '\n')
|
||
print(sympy.pretty(P.subs(a, -4).subs(b, 2)), '\n')
|
||
print()
|
||
|
||
# 和numpy对比
|
||
print('和numpy对比:')
|
||
import numpy as np
|
||
matrix = np.array([[1, -4], [0, 2]])
|
||
eigenvalue, eigenvector = np.linalg.eig(matrix)
|
||
print('特征值\n', eigenvalue)
|
||
print('特征向量\n', eigenvector)
|
||
print() |