方法/步骤
用Python解数学方程,需要用到Python的一个库——SymPy库。
SymPy是符号数学的Python库,它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁、易于理解和扩展。
如果你的电脑上还没有安装sympy库,那就赶紧安装吧,安装命令:
pip3 install sympy
请点击输入图片描述
先来解一个简单点的方程吧。
题目: 5x + 20 = 100
先直接上代码:
from sympy import *
x = Symbol('x')
print(solve([5*x + 20 - 100], [x]))
请点击输入图片描述
再来一个复杂点的二元一次方程吧。
题目:3x + 4y =49, 8x- y = 14
代码如下:
from sympy import *
x = Symbol('x')
y = Symbol('y')
print(solve([3*x + 4*y - 49, 8*x - y - 14], [x, y]))
请点击输入图片描述
有没有发现规律呢,简单总结一下:
1)变量赋值,使用symbol函数转换;
2)将方程式移到方程的左边,使右边等于0;
3)使用solve函数解方程。
当然了,python的基础语法必须掌握,至少需要掌握python最基础的算数运算符。
+ 加 ---- 两个对象相加
- 减 ----- 得到负数或是一个数减去另一个数
* 乘 ----- 两个数相乘或是返回一个被重复若干次的字符串
/ 除 ----- x 除以 y
% 取模 ----- 返回除法的余数
** 幂 ----- 返回x的y次幂
log() 对数-----对数 log()
下面来个难度大点的方程。
请点击输入图片描述
代码如下:
from sympy import *
t = Symbol('t')
x = Symbol('x')
m = integrate(sin(t)/(pi-t), (t, 0, x))
print(integrate(m, (x, 0, pi)))
请点击输入图片描述
给你串代码,用来求LQR的import numpy as np
from scipy import c_
def lqr(A,B,Q,R):
dim = A.shape[0]
H1 = np.hstack((A,[email protected](R,B.T)))
H2 = np.hstack((-Q,-A.T))
H = np.vstack((H1,H2))
[e,g] = np.linalg.eig(H)
i_p = np.where(e>0)[0]
i = np.argsort(e[i_p])
i_p = i_p[i[::-1]]
i_m = np.where(e<=0)[0]
i = np.argsort(e[i_m])
i_m = i_m[i]
i = np.hstack((i_m,i_p))
e = e[i]
g = g[:,i]
g11 = g[0:dim,0:dim]
g21 = g[dim:2*dim,0:dim]
g12 = g[0:dim,dim:2*dim]
g22 = g[dim:2*dim,dim:2*dim]
P = np.linalg.solve(g11.T,g21.T).real
K = np.linalg.solve(R,B.T)@P
return [K,P]
if __name__ == '__main__':
from scipy import stats
A = stats.norm.rvs(size = [5,5])
B = stats.norm.rvs(size = [5,5])
Q = stats.norm.rvs(size = [10,5])
Q = Q.T@Q
R = stats.norm.rvs(size = [10,5])
R = R.T@R
[K,P] = lqr(A,B,Q,R)