Python求解常微分數值解

2021-10-10 15:31:07 字數 2822 閱讀 3317

sympy是乙個python的科學計算庫,用一套強大的符號計算體系完成諸如多項式求值、求極限、解方程、求積分、微分方程、級數展開、矩陣運算等等計算問題。雖然matlab的類似科學計算能力也很強大,但是python以其語法簡單、易上手、異常豐富的三方庫生態,個人認為可以更優雅地解決日常遇到的各種計算問題。

目錄1.解方程組solve()

2.求極限limit()

3.微分(導數)diff()

4.積分

4-1.定積分integrate()

4-2.求不定積分integrate(),dsolve()

5.序列sequence()

6.矩陣matrix()

7.其他

0.準備工作

from sympy import *

1.解方程組solve()

x,y = symbols(『x y』)

result = solve([eq(y,1-x),eq(3x+2y,5)],[x,y])

print(result)

2.求極限limit(?

n = symbol(『n』)

print(limit(((n+3)/(n+2))**n, n, oo))

e3.微分(導數)diff()

x = symbols(『x』)

f = x**2 + 2*x + 1 # 定義函式f(x)

f\displaystyle x^ + 2 x + 1

diff(f,x,1) # 函式f(x)對x求1次導

\displaystyle 2 x + 2

4.積分

4-1.定積分integrate()

x,t = symbols(『x t』)

fx = integrate(sin(t)/(pi-t),(t,0,x))

s = integrate(fx,(x,0,pi))

print(s)fx2

\displaystyle \operatorname + \operatorname

4-2.求不定積分integrate(),dsolve()

x = symbol(『x』)

s = integrate(e**x + 2*x,x)

s\displaystyle x^ + e^

f = function(『f』)

eq1 = eq(derivative(f(x),x),x*cos(x))

pprint(eq1)

y = dsolve(eq1,f(x))

pprint(y)

integrate(eq1)

d──(f(x)) = x⋅cos(x)

dxf(x) = c₁ + x⋅sin(x) + cos(x)

\displaystyle f = x \sin + \cos

5.序列sequence()

s = sequence(x, (x, 1, 10))

print(list(s))

print(summation(s.formula, (x, s.start, s.stop)))

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

556.矩陣matrix()

m = matrix([[1, 2], [3, 4], [0, 3]])

n = matrix([2, 2])

m*n\displaystyle \left[\begin6\14\6\end\right]

7.雜項

『』『1.常用的sympy內建符號』』』

i # 1-1.虛數單位i

e # 1-2.自然對數的底e

oo # 1-3.無窮大oo

pi # 1-4.圓周率pi

『』『2.sympy的初等運算:加+減-乘*除/,次方開方,對數,階乘,三角函式,表示式求值』』』

23 # eg:2的3次方

8(1/3) # eg:8開3次方

log(1000,10) # eg:以10為底1000的對數

log(e) # eg:自然對數

factorial(4)

sin(pi) # 以sin函式為例

x,y = symbols(『x y』)

f = 2*x + y

f.evalf(subs=)

f.subs()

n = symbol(『n』,integer = true)

summation(2 * n,(n,1,100))

eq(3x+2y,5)

r1 = rational(1/10)

r2 = rational(1/10)

r3 = rational(1/10)

val = (r1 + r2 + r3) * 3

print(val.evalf())

print((1/10 + 1/10 + 1/10) * 3) # 沒有有理化會存在小錯誤

cos(x).series(x, 0, 10)

『』『3.其他』』』

pprint(e**x + 2*x)

x,y,z = symbols(『x y z』)

print(latex(x**2+y/1+z))

expand((x + 1) ** 2)

simplify((x2-x-6)/(x2-3*x))

a = cos(x)**2 - sin(x)**2

b = cos(2*x)

a.equals(b)

0.900000000000000

0.9000000000000001

x2⋅x + ℯ

x^ + y + z

true

常微分方程數值解上機

二步顯式 adams 法和gear 法求解,y 0 1,步長分別為h 0.1和h 0.05 1.程式文字 二步顯式 adams法 clc y 1 1 h 0.1 y 2 y 1 2 h y 1 3 h n 1 h fori 2 n y i 1 y i 3 h y i h y i 1 3 h endt...

常微分方程數值解法 python實現

研究生課程 應用數值分析 結課了,使用python簡單記錄了下常微分方程數值解法。y y i h i f x i,y i y 0 y a end right y x y 1 0 leq x leq 1 y 0 1 end right yi format xi,yi xi,yi xi h,y retu...

MATLAB學習筆記 常微分方程的數值解

常微分方程數值求解的命令 求常微分方程的數值解,matlab的命令格式為 t,y solver odefun tspan,y0,options 其中solver選擇ode45等函式名,odefun為根據待解方程或方程組編寫的m檔名,tspan為自變數的區間 t0,tf 即準備在那個區間上求解,y0表...