- 在线时间
- 479 小时
- 最后登录
- 2026-5-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7813 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2931
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1173
- 主题
- 1188
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:
$ i) R: M4 G. t E- h简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
+ S- T( Q9 d9 c# n L功能特点:
/ Q+ [# X: t& ?' T+ z5 ^提供了丰富的数学函数和常用的科学计算工具。
! i" h' U# L7 W' k A包含了多种数值优化算法和方程求解方法。: I) |4 ?8 |4 _% D
提供了各种插值、积分、微分方程求解等功能。7 t1 G1 w) F* V* k2 O
内置了统计分析、概率分布等统计工具。
9 |0 N9 _- @% ~0 I" g7 t+ @支持信号处理、图像处理、稀疏矩阵处理等功能。
4 I2 b% H D/ [9 z" `9 YSymPy:
; e3 W1 a- x8 L8 L) l. i b: D# s+ [简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。8 R4 F7 P2 ` d
功能特点:
# S9 v6 @$ _7 J+ W+ q) F提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
4 t% c5 z3 S2 v8 N5 A支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
* ^9 i% D4 P9 O j& w' |+ h( D可以用于数学符号推导、证明和解决问题。
9 D( d, a! {8 e A可以生成 LaTeX 代码以用于文档和演示。+ [! [3 L9 o: J5 e
9 D8 l4 ]" ?! I9 @! G6 ^# y Z总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。
& x- F( |$ T7 R; g9 t- D7 R1.导入模块:
7 L3 c/ w( J4 D# A! H8 y1 N: d
' U0 U/ K6 b# J& X import numpy as np
: {. P9 x* j2 {1 J2 d* f& y from scipy.integrate import odeint
* ^7 d1 j7 o( r$ T) m$ J. j from sympy import *
1 {( E/ z3 z E7 W$ d' w* _/ n
. S2 u& M7 Y1 M" ]4 j( {- S- u4 ^; ?0 `+ f8 w
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。 D: c: I0 i3 L
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。
1 {* Y; [- S' i$ l0 |4 L4.sympy 是一个符号计算库,用于进行符号数学计算。
, T1 ?8 i2 ^' r% z0 v i5 u9 c4 r ~ X- `& t8 c- V, ]) b
5 e9 C5 _6 y7 B) V
5.微分方程和数值范围:4 w; P8 z) h) w- }/ K7 e D
# T; F: V9 _: U- Q) Q dy = lambda y,x:-2*y + x**2 + 2*x
& G: p* w, R7 ?; d* n* u x1 = np.linspace(1,10,20)
8 ?) O! g" e' @3 j4 `+ i L& }- `' K9 x% d0 C$ F; a2 i, k# f
; h7 I7 ]7 X1 q5 K# ~, l
6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。
9 X/ h1 C1 H( M% n7 u7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。6 X y+ |, ] \6 }
4 x' E: U: T4 b" Z: I2 [" ~7 z6 L' K) J3 ~: J% e+ [5 h
8.使用 SciPy 进行数值解:+ j' j, d1 L M! q- W8 l% o5 m
& `' y0 }2 q( i2 F0 D) Z y1 = odeint(dy, 2, x1)
, W' {" e# f \; t6 ]; @, Y" `& v0 f, l, Q% F' ^- ^
# F/ n% A6 w" C9.调用 odeint 函数对微分方程进行数值求解。
6 T$ y; Y. H3 d& w# G5 V: ]4 p10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。4 u6 f0 B+ @% T- t, K
11.数值解存储在 y1 中。
# Z$ Z) v, h4 w" e8 R% v1 r M% C t9 u0 ?' b2 e, Q4 |
/ p7 h3 z; v0 R) y1 {$ N* ^+ F% I
12.使用 SymPy 进行解析解:! N+ r J, g: s8 J1 Q% ~
( F9 O2 `8 q& g" `# x6 F eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x
, o/ k5 s1 e9 l/ D( u0 c0 `8 X1 X; C con = {y(1): 2}6 e2 ?$ _. e/ _& \* L
f = simplify(dsolve(eq, ics=con))& W# P1 e9 l# \2 ]8 b% ]4 `
& N- @/ G. _" s u
- D# ~1 _ p4 v/ M$ M/ b13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。; e- n$ {* \( V
14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。4 [" g. ] `1 M: s, X
, p9 O# v" L0 H9 `: |9 j# t: ^3 ]& F* i) n' p y1 D4 a: Y& ]
15.代入值并求解:# V8 ]9 ?" @9 N" a
# G, Q/ x# m' M5 g& I s5 I7 C
x2 = np.linspace(1,10,100)
! l2 @6 c& `" P: w: g. i y2 = []' o; F2 W0 S, f8 \. [! B
for each in x2:
$ I& L) q1 b. Y0 h; x. Z y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])
1 [5 G6 J: c( y8 s2 F+ F% h; Z9 v
: S1 u6 q! {+ S A2 q5 C5 s4 b
) @- z' d7 K1 n; i- L# H16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。0 {# G7 C {6 M; d
17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。- Z& {; _' l5 F- ]8 r M0 U* m
$ D9 h* v% r* `; D9 c0 V/ }/ z' ]7 n+ K- W
18.绘制图形:
& ^& {) t: X0 q* l! u A7 _2 r; f7 T3 |
plt.scatter(x1,y1, label='x1', color='coral')9 U+ p% `# v+ Z+ p, _
plt.plot(x2,y2, label='x2')
6 L4 J) x( `2 t' ]7 G$ O* P0 { plt.legend()" ]3 r6 l$ d1 V0 _( s# G9 g, L. @: W
) N& N; Z0 Q& f4 j
, } U2 s* Y; P0 x, ]19.使用 Matplotlib 绘制了数值解和解析解的图形。/ c$ Y c& u" N0 j3 y
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。# ^' @% B% ~( k' c/ C0 a, w
21.使用 plt.plot 绘制了解析解的连续曲线。
, y" @) A) F" P) U3 @22.添加了图例。* t* p+ b) H# W( c1 c
$ q) I) E8 m+ P8 t2 Z3 Q4 T2 B% b这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。# c1 T4 ]0 h4 j- }) @1 V
" @7 `2 t& d, Y) D4 g6 z; O: h* l6 s7 U) b" v4 q
|
zan
|