- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:7 V* a) f# ?+ I4 x
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。; Y4 U$ u7 |6 P1 R0 t! S5 t9 V
功能特点:
9 O( {; O: V, N2 n提供了丰富的数学函数和常用的科学计算工具。: v/ s1 e0 ^/ ^8 \# C! N! {
包含了多种数值优化算法和方程求解方法。' N. b! ?) n8 f, u# x+ k
提供了各种插值、积分、微分方程求解等功能。
3 }4 R4 W u( Q2 c5 ?内置了统计分析、概率分布等统计工具。
+ C# q' T0 W( i0 W支持信号处理、图像处理、稀疏矩阵处理等功能。& Y% _6 o' T* P+ F1 c
SymPy:4 m5 |4 |! l5 K* x1 m }1 s
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。
' w5 A& Q5 `% G/ |功能特点:4 A8 I* i6 O, q" h+ Y1 a0 D4 m% \" Q
提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。, W. j: Q& B2 m* s; V' r' d2 y5 l) d6 x
支持符号表达式的构建和操作,可以进行符号运算,推导和化简。- A6 X+ I V3 Z# J7 }& F' R" Q
可以用于数学符号推导、证明和解决问题。
) P, i; a9 @* [5 j, c" F可以生成 LaTeX 代码以用于文档和演示。
% V4 E' N* k9 z7 \1 g" P
" P% m" W+ P$ z+ s) T总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。; @: g( W, z$ Q( g0 m
1.导入模块:
& l. o0 A3 N: v3 K& B6 |: r. W- g$ o
import numpy as np
6 k' c8 S% W6 N1 T6 ?% F from scipy.integrate import odeint
4 K( e* N- t; I( b from sympy import *8 _4 U$ |' h% z8 ?/ N# w( }
+ ]. y6 o, A& e$ V3 @
/ ~% m5 G/ W4 V' _2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。
9 g# \, T! M) {: I3 a8 P3.scipy.integrate 模块包含了用于积分和解微分方程的函数。* q8 _3 }# D( o: U- V! W1 o+ [: J
4.sympy 是一个符号计算库,用于进行符号数学计算。
: y$ ] |" ?9 L
2 d8 N) Q) J' ?+ |. E
+ v" l7 |; B6 ^; o* {+ Y! L5.微分方程和数值范围:
+ w2 N C- b$ k* y- i1 H$ g) ?. J/ d! P1 K. Z' U
dy = lambda y,x:-2*y + x**2 + 2*x' H" v" s: B, V$ x% u/ Z+ {: @! z
x1 = np.linspace(1,10,20)
8 A. y! p( [% r, ]" s, y
) s7 b9 w( [2 [, @ q7 a2 ~: k; z5 \
4 k8 B( w2 w, J; T" k& }3 R6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。( v: n. D/ a: H5 ~& t1 M
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。* K O/ ~4 ]0 F
4 z) O7 Z) h+ V. [2 \$ Z1 n T* D
8.使用 SciPy 进行数值解:
( G5 z: O E( `: L" j
: d0 Y6 [3 y. [ y1 = odeint(dy, 2, x1)7 c/ I1 b4 F; y7 W
! z6 \$ }; r% H4 R
+ J* k$ K5 W7 z; R4 U- w: E9.调用 odeint 函数对微分方程进行数值求解。
+ T' e: n+ J+ e1 u! H10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。, Q* m! @7 y+ B0 M5 ^+ o
11.数值解存储在 y1 中。7 p4 Q% ~) p9 m& C, d O' h7 u( ]
) k. B a [ L2 c2 t: ?$ _8 `" }5 k: r5 W) v. G! N. i
12.使用 SymPy 进行解析解:; j% X8 H9 f9 x$ I& i
# {% ~* S! \& T/ K# A: ?
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x
8 @8 K3 D' ^0 u* H con = {y(1): 2}1 n9 P* z, H: J3 ?% p
f = simplify(dsolve(eq, ics=con))
. F: Q2 G4 p# S9 x/ g
7 H' X5 B' n. H" ]" F* l" n) `
6 y+ {/ A, T- v4 M4 ?13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。* G+ S: i9 }0 ]: E* b( L1 A: N
14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。; l# `$ p; }9 N
+ ~4 s* @1 B1 O" b" }
+ Y) ?1 x& K/ r/ B: e8 P15.代入值并求解:; W9 V2 U1 C$ a$ E& W8 S7 `
! o# E* J! @+ E* a4 O, {" p4 N, e x2 = np.linspace(1,10,100)
: H9 K' ~6 K+ I" Y y2 = []
, g, ^' j. Z; o) Z0 g for each in x2:& e& H8 ?4 y' d# g
y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])
3 J" t$ i, L4 X }, q0 Y) t1 R& F3 m
* G* s3 F1 }" T
( z+ ^; S# S2 b( a# u) F16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。- E' U4 L; p, R* \/ i
17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。
# Y& @2 v$ S6 p- z# i' p: }- s- O4 I9 o: U" x* h
0 g& p/ V Q( L8 ?
18.绘制图形:
) s4 N* {- b1 E- m0 I" `+ A: {+ o
plt.scatter(x1,y1, label='x1', color='coral')$ e+ s; N( N" u. n
plt.plot(x2,y2, label='x2')
* c8 q: ^8 H! G, d O plt.legend()
, M& d; u) B* c/ n) g" N& g" B
) o; S5 V# R- J: T# ?. B19.使用 Matplotlib 绘制了数值解和解析解的图形。
3 [: A& Y0 T! q7 }& X20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。4 t$ m, Y- j: `2 {
21.使用 plt.plot 绘制了解析解的连续曲线。
, Z# D2 }+ g& K# ~' r# H22.添加了图例。' g2 G3 t' w% _( V% \& d( h: g
. Z2 `5 z3 m8 k; f' {+ Q% A" b这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。$ K! U' y) L: P) k5 v" u+ r$ O) ]
5 K# m, W$ R0 l0 S' o7 {" ^* Y- r& Z1 Q; E ~2 b$ W
|
zan
|