update
This commit is contained in:
		
							
								
								
									
										88
									
								
								2021.06.24_sympy_example/sympy_example.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								2021.06.24_sympy_example/sympy_example.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| """ | ||||
| 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() | ||||
		Reference in New Issue
	
	Block a user