用python如何得到一个方程的多个解

Python014

用python如何得到一个方程的多个解,第1张

方法/步骤

用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)