- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7953 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2978
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:: q/ K# E( `, B
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
, x8 n o/ v ~0 p; @功能特点:" F# N5 w3 x- }! [1 l5 U! Y
提供了丰富的数学函数和常用的科学计算工具。' t- p) B3 |% G V/ G! ]
包含了多种数值优化算法和方程求解方法。! D& u) V# a. W3 i% d8 U
提供了各种插值、积分、微分方程求解等功能。
2 a' ?. Q" a2 @# O+ e7 X内置了统计分析、概率分布等统计工具。
; ]! B# }1 h; r6 X3 y" n( W支持信号处理、图像处理、稀疏矩阵处理等功能。* D* W# F/ [. x9 T8 y: H
SymPy:& W( G0 x3 O" s
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。
/ J. V* i8 } t! m' X* D功能特点:
/ D6 @1 f# j0 v3 V; F提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。1 ]7 K& @, S% Q% P9 f
支持符号表达式的构建和操作,可以进行符号运算,推导和化简。+ g0 b$ F+ n+ H, e* G/ M
可以用于数学符号推导、证明和解决问题。4 f) A+ N4 m. m1 B- Y
可以生成 LaTeX 代码以用于文档和演示。. T! c3 M7 n r0 P9 L
* H5 }( T9 q' v7 _* p2 b( I) I* M0 F0 j) g总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。 {% h- G0 \0 w* r" h: w
1.导入模块:
$ r$ N5 i( w" Q0 d: Z+ i; p0 z. S; L. c9 W
import numpy as np
+ U$ w: i$ Q6 J4 R- O2 Q/ w7 W7 M from scipy.integrate import odeint
. T" K U$ O% k ~# O6 ~& f from sympy import *( D1 E! l+ V2 u3 L) l/ O
3 m7 Z+ t% K" r0 Z6 K, ?
- y% m) `" f/ z7 Q
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。 k8 g9 I! S# }8 ^" s- e3 G, W5 J
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。3 q& |0 i. @; a; f
4.sympy 是一个符号计算库,用于进行符号数学计算。& g( i2 z' \1 Y/ I
/ n, C! C2 U9 r$ @( Y' A! z$ m% G! F' o( V
5.微分方程和数值范围:+ y& y- I1 Q: ? Q
0 C4 i: h0 p! y; D @, W" \0 Z# P dy = lambda y,x:-2*y + x**2 + 2*x) j0 y {0 d# I. G' z
x1 = np.linspace(1,10,20)$ Y4 j: m4 _0 V, t( j v) b v
4 a- v, X( o3 N5 s& C% a
" i2 @8 w* \3 s% a5 _* ]6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。$ a! o1 D# V" d2 u" S
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
. b2 u* @2 {8 y. {3 |' F& N2 D1 w3 c* i- F3 Q
3 X- w8 Y2 t" R3 v" y; n( c
8.使用 SciPy 进行数值解:* ]* a& x6 N1 ]! M
0 k8 R" W3 |4 G- N& Z* e5 N. e y1 = odeint(dy, 2, x1)4 l% w* l: e$ n" Z
$ M! @. M, O$ [- @
. R5 m# ^: _& D) O9.调用 odeint 函数对微分方程进行数值求解。" m3 L1 D* h) N8 |0 F
10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。1 i8 Z% @% u+ L
11.数值解存储在 y1 中。" ~1 E0 s- v; Z2 f, l
$ p7 `: J5 S2 n5 J
) c m$ A& n7 G12.使用 SymPy 进行解析解:' ~* h* B) Q. t) U1 C9 |4 L# D
* I) l. I9 ^2 b+ P
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x
! ?; ~2 a2 ~3 Q6 \9 _ x con = {y(1): 2}6 v2 n! m& N h2 X/ L, a
f = simplify(dsolve(eq, ics=con))
9 H. _/ I; C V: K( ]1 |6 m2 z' k% P, o- ]8 l! J6 S
; n% ^: @; }4 M9 k13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
# p' o2 R* j' u) c4 l! [14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。3 b* ]& O% q0 R6 U7 T y
* p4 h1 w/ c1 _7 v- i! R" ?/ l/ a1 Z9 l; N- P' f4 ~) p! ?
15.代入值并求解:
4 H$ L' ~9 p% ~3 b1 _' X
' x' c2 E" H, z% D6 D x2 = np.linspace(1,10,100)3 o; ~; O, t6 u: F
y2 = []
- W5 O1 |! @0 n' ?5 A4 l! R for each in x2:
& x7 {* f9 j' d( w) f/ u y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])* d$ r/ @* s+ y+ K: _
, q4 @1 |0 x8 |1 r5 h
+ I5 |* s( U7 I& O! d16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
0 e( I9 A3 G) C3 `- M8 a7 a( }17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。
3 r; f# r9 I% U$ q7 ~" m/ E* T) W# O9 }7 b. J. e
9 |9 O% s& }$ I, g' d& Y8 d5 T( T, A! Q" b
18.绘制图形:
, d3 E& \; I+ O" @4 W4 y. p ?% y9 r9 j, c9 ~5 ?3 r& n3 S6 X! X
plt.scatter(x1,y1, label='x1', color='coral')
4 [/ ~1 x) @6 H% {3 }% G& H plt.plot(x2,y2, label='x2'); c: }9 F' \4 W1 A3 e
plt.legend()
' l* ~$ p& R+ p8 D- M5 \
% U& z* a3 b) H+ @( G# v+ L/ ~0 o+ u: T, o- i) g: d- y! K
19.使用 Matplotlib 绘制了数值解和解析解的图形。* w7 D6 K: m: i. X; L/ E ]
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。0 d, V, s# [' H: k
21.使用 plt.plot 绘制了解析解的连续曲线。
2 A) [& r4 Z6 p+ g4 B22.添加了图例。- G' t! G2 }4 }) U$ o3 l3 u
: S o8 R6 w" K# `# `0 K/ [/ v* Z; z这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。# R) d/ Z7 _/ S* T0 t( s
( i( J/ @% w. ~
4 J7 s% z+ S4 E. Y2 J+ v |
zan
|