- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:
; Z& c/ C9 A0 }% \+ F; Q简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。: ~; ^) h5 U6 M. `2 ~$ r, \
功能特点:3 c( \- G) s: m" ]& M
提供了丰富的数学函数和常用的科学计算工具。% g+ \5 V4 k. E: l: v4 H! l# G
包含了多种数值优化算法和方程求解方法。, q- i9 M6 z5 \( O K
提供了各种插值、积分、微分方程求解等功能。
1 a: q1 F+ `: I6 U, ?7 B" x; r3 c, X内置了统计分析、概率分布等统计工具。4 j {* e, k* |* n" X; D7 a6 L7 v# O' F0 ]
支持信号处理、图像处理、稀疏矩阵处理等功能。4 S, K) q* L2 r: D
SymPy:
' S/ j* N0 B+ q: B/ {- R8 F0 ?简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。( f8 L$ o6 S( U+ n
功能特点:
/ m O5 Z; O, F/ Z, j0 W7 i# p9 w提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。) x' N# A4 a3 K- y2 x
支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
- {' p& H" X N- b可以用于数学符号推导、证明和解决问题。 S8 p/ A5 L2 N+ r
可以生成 LaTeX 代码以用于文档和演示。
( T" w, Q' P0 f3 B" m' z' @: g# Z: f8 c0 h* |/ m3 l6 T, U
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。
* k# {$ G+ q `: c; {% j# `1.导入模块:
3 D7 W% i9 j" A! [: j7 m* h7 E: Y, d
import numpy as np
, ]; L* }# }. [* E5 P from scipy.integrate import odeint
! Z7 F: s! m% D/ z+ H* c from sympy import *5 F- o0 F! U' B4 U% k [3 a
( G9 D& }3 \# c
. } k# M% U; r8 u D2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。& L/ }9 R- T- U
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。
+ D5 |2 {2 i) |1 l4.sympy 是一个符号计算库,用于进行符号数学计算。
" ?" ~$ f7 w& j+ v3 r3 ]2 [# ]+ S# c1 r- t. `$ Y
2 W. T* G+ T; s ?, e5.微分方程和数值范围:( k. O' s/ T5 p. G, }
3 M8 ^2 \+ F* h8 u! G dy = lambda y,x:-2*y + x**2 + 2*x
6 b7 u& D2 N2 O( O" \ x1 = np.linspace(1,10,20)( { a$ a" I: G$ E& v/ t3 e0 Z7 ^, g
- U" n; c# a7 x- n( w
6 P. o X+ Q8 ~, e6 I. ^6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。6 h2 n1 X7 ] [/ M
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
! \: G9 X1 K0 {8 I
# M" h1 ]' c) r
2 D9 ^8 l3 P; K+ Q8.使用 SciPy 进行数值解:
6 U! z' a+ g, T
3 u& i- m% g _5 O- e- I! V y1 = odeint(dy, 2, x1)+ \+ P* g7 P9 g# \0 h+ t# T
% j1 _- ]( w' @! e
) D T. ]7 j2 I" L1 y1 p9.调用 odeint 函数对微分方程进行数值求解。
: ?2 H) m0 x9 y10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。
$ B! v! J7 N4 {0 L3 A11.数值解存储在 y1 中。
* i+ @2 W' g$ _ G1 G1 m% a
8 [& v8 S4 @, H* G% h7 r$ B7 w/ K: Y _
% p, e; p& @$ T: z, H3 I, q12.使用 SymPy 进行解析解:
) W+ h# d8 ]/ M' a: I/ ^2 F: v! v2 q+ k7 S2 \8 a7 y
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x
2 L; ?, h9 g, A& @ con = {y(1): 2}
( U$ b* ~1 \& V& e' ^: t f = simplify(dsolve(eq, ics=con))
) A# |' e) ~0 Y- V/ x. u f$ P
4 U- n' y/ @( U: f, [" n2 r3 _# \2 V( I- I
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。. @) y% S" K& g+ \& N
14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
; p: B1 z K3 e
0 c; G; I+ L/ J' n n7 A
7 ?. {2 j" U5 l" Y, A1 r15.代入值并求解:1 T- O0 A( P1 a$ N
7 ?3 B( O2 N* b% [) \, N
x2 = np.linspace(1,10,100)
( x5 n# h2 e! ?1 m: B" E8 m- ] y2 = []
) [. T6 P6 Z6 Z8 f, | ~ for each in x2:
# k9 }. u3 G' J2 t5 g y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])
- h2 h1 B. h! a2 r+ `( D) y$ J
- f2 a0 U! m3 p3 Q" r+ K& P3 `' `5 s, U/ _' L
16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。 B* U- m: T! i% d4 a. u- m. r
17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。
L: P: A1 b- }: v5 i$ ^* i: m& u. D4 N* N7 z, X+ J* d
. ^, p5 J/ Z* d: J
18.绘制图形:4 o; M2 f' d( f
8 u" b7 e) u8 W/ m plt.scatter(x1,y1, label='x1', color='coral')
1 U2 g2 y. H: t1 u1 J plt.plot(x2,y2, label='x2')
; ~+ X) |9 f$ ^7 R9 X8 n5 o4 E* x plt.legend()8 |. C* ^1 m: H1 M, B v( [
' t8 a; T/ b$ D# ?" T3 l
- O$ z' b4 K6 N2 Q2 f
19.使用 Matplotlib 绘制了数值解和解析解的图形。1 B3 o4 }' o8 M. _# {
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。
" F/ Z" l& L& |* O" R21.使用 plt.plot 绘制了解析解的连续曲线。& S" ~: n, S! I8 X5 H. k E4 u t# V
22.添加了图例。1 w/ d/ j9 K, {( u; Y s( p
2 K% q) t6 t: ~
这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。. P, F2 j' f: p/ b: F( H
1 M, `6 }/ L2 y
4 C4 A# d) ^5 g# x& `' _ |
zan
|