一、方程式
SymPy中方程式不是用“=”表示相等,而是使用Eq
from sympy import * x, y, z = symbols('x y z') init_printing(use_unicode=True) Eq(x, y)
還可以這樣表達
solveset(Eq(x**2, 1), x) solveset(Eq(x**2 - 1, 0), x) #這里默認等於0 solveset(x**2 - 1, x)
二、求解方程
求解方程是要函數是solveset,使用語法是solveset(equation, variable=None, domain=S.Complexes),分別是等式(默認等於0,),變量,定義域。
請注意,函數solve
也可以用於求解方程式,solve(equations, variables)
solveset(x**2 - x, x) solveset(x - x, x, domain=S.Reals) solveset(sin(x) - 1, x, domain=S.Reals)
如果是無解,返回空,如果找不到解,返回表達式
solveset(exp(x), x) # No solution exists solveset(cos(x) - x, x) # Not able to find solution
三、求線性方程組
求解線性方程組linsolve
方程列表形式:
linsolve([x + y + z - 1, x + y + 2*z - 3 ], (x, y, z))
矩陣形式:
只寫前面的系數
linsolve(Matrix(([1, 1, 1, 1], [1, 1, 2, 3])), (x, y, z))
A * x = b形式
M = Matrix(((1, 1, 1, 1), (1, 1, 2, 3))) system = A, b = M[:, :-1], M[:, -1] system linsolve(system, x, y, z)
四、求非線性方程組
非線性方程組就是自變量和因變量不是線性關系
求解非線性方程組 的函數是nonlinsolve
1.當存在實解時
這個例子我不明白是什么意思,為什么這個解時這個??
a, b, c, d = symbols('a, b, c, d', real=True) nonlinsolve([a**2 + a, a - b], [a, b]) nonlinsolve([x*y - 1, x - 2], x, y)
現在解讀一下上面2個例子
第一個:a**2+a = 0,a-b=0,a**2+a=0推出a=0或者a=-1,將2個解代入a-b=0,即可得到b=0或者b=-1
第二個:x*y-1=0,x-2=0,前面等式推出y=1/x,后面等式推出x=2,就得到結果了
2.當存在復數解時
都看不懂這個復數,直接跳過,復數使用的也不多
nonlinsolve([x**2 + 1, y**2 + 1], [x, y])
3.存在真實和復數解時,實部虛部
from sympy import sqrt system = [x**2 - 2*y**2 -2, x*y - 2] vars = [x, y] nonlinsolve(system, vars)
4.具有無數個解
下面這個例子,第一個表達式x*y=0,推出x=0,y任意數或者y=0,x任意數,第二個表達式x*y-x=0 可以簡化x*(y-1)=0推出x=0,y任意數或者y=1,x任意數,綜合一起可得,x=0,y任意數
nonlinsolve([x*y, x*y - x], [x, y])
5.注意點
(1)解的順序與給定符號的順序相對應,也就是說解和對應變量對應
(2)如果nonlinsolve返回的是數值,熱不是表達式,如果返回的是表達式,可以使用solve
(3)nonlinsolve尚不能解三角函數的方程組,但是solve可以(但不能給出所有的解,因為三角函數的解實在是太多了,無限循環的)
solve([sin(x + y), cos(x - y)], [x, y])
solveset會得到多個解,roots會得到第一個跟是什么,第二個跟是什么,跟和第幾以字典形式
五、解微分方程
定義一個未知方程的微分
f, g = symbols('f g', cls=Function) f(x).diff(x)
表示微分方程 f′′(x)−2f′(x)+f(x)=sin(x)因此我們將使用
diffeq = Eq(f(x).diff(x, x) - 2*f(x).diff(x) + f(x), sin(x))
diffeq
解微分方程
dsolve(diffeq, f(x))
解未知表達式的微分方程
dsolve(f(x).diff(x)*(1 - sin(f(x))) - 1, f(x))