- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:' o% F! ?' H2 u& }; g3 P+ ^9 c
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
7 o& ~* `4 G, P+ V; y1 q功能特点:- n0 X1 G. K5 S: F }: m) b( \4 l
提供了丰富的数学函数和常用的科学计算工具。$ z, g7 M3 ]9 E, t/ a3 F# j
包含了多种数值优化算法和方程求解方法。8 e# X; k& u0 J' D: V% t U% h4 `
提供了各种插值、积分、微分方程求解等功能。$ @/ q- _; L, }
内置了统计分析、概率分布等统计工具。
3 O* Q2 ?9 h/ O7 B支持信号处理、图像处理、稀疏矩阵处理等功能。( c, a3 r1 B. q: D ~
SymPy:! G/ A% u, V3 Q/ C. o
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。
' k) Y! J8 X4 ^& t, J功能特点:
2 D6 @4 k" I0 H1 M h9 t提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。7 s/ U9 G) _! S7 P, m
支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
* `) m; V) Q9 m5 c可以用于数学符号推导、证明和解决问题。% f" a; Q+ e- d/ m7 l
可以生成 LaTeX 代码以用于文档和演示。
" b: r' ]! g8 D1 S' v9 v; e# D5 |1 g3 o% G, X; `
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。
: {7 }( ^4 i2 b2 _/ c4 W( U0 H1.导入模块:
+ a) I9 A3 Q1 s
. D$ h: p9 [0 A; ?& u- b1 w+ z import numpy as np4 P* Z& R) `: x; ]7 n1 c8 c
from scipy.integrate import odeint
; `" P8 I3 G2 ?& @4 x from sympy import *5 s9 X R& J W& B: p9 N( t
0 s" _/ o. W: \; t" |" v% C5 S8 e. K# ~$ f1 F
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。8 a) }: K9 B5 U, Q6 I( G
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。, s2 j, h# \+ m3 d
4.sympy 是一个符号计算库,用于进行符号数学计算。7 J8 f& ]% v7 x* l6 t! O, e
0 t* n* ^5 f# s( n) Q
$ {9 H- [1 Q: m X% g2 {0 T0 K5.微分方程和数值范围:
+ y m2 V; K! d6 ]9 g# p6 q S- J2 c
dy = lambda y,x:-2*y + x**2 + 2*x4 a& N6 f5 B% a- `- x' O
x1 = np.linspace(1,10,20)
h7 X; ~. h0 i0 h
9 e' P# A( `. d/ s! d; c3 Z2 o6 l* K+ N8 B) N) l( @8 C" K
6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。6 x! G) n8 h6 N8 {
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。# f, L3 a3 z* V% I* D
~6 c- t V5 s( F, G
: ^: ~( E( _/ t8.使用 SciPy 进行数值解:! t+ }# j5 [. g' Z+ l) @: J8 f, ?8 q, E
6 Z' h% f$ @) z0 V; U
y1 = odeint(dy, 2, x1)' q8 c/ C# @7 Y- z& A- S- R
1 E5 V4 C& f4 Z) V2 N0 p1 ~( _0 Y* T& K- S/ r
9.调用 odeint 函数对微分方程进行数值求解。$ J+ U8 Y' A( {) \& B% w+ _
10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。) c% I8 f9 d9 k3 R
11.数值解存储在 y1 中。
( [4 i7 z) R' @! Z
3 u6 G Z5 Z0 d$ r; F# w# X& I+ \: ?1 X# f: [: g: b7 ~, B
12.使用 SymPy 进行解析解:
" | \2 R+ _: G# [+ Q; t+ u! u$ @, ~* c' }
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x& d7 ~, r d; X% z
con = {y(1): 2}& u7 L- }# K0 M" l+ u
f = simplify(dsolve(eq, ics=con))4 p* P+ n8 S2 W- x' S2 L: L( J) f7 G
, B' m4 A! D3 j) \& h6 _% d4 b- J
3 g6 B" K, _! N$ y13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
) O4 g A- e, V( q14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。; r, l0 p9 x7 I V# l3 e
: p, S0 S- d* v- H
9 E. ]* A$ ^& i: S9 k5 |15.代入值并求解:- p5 F9 f* r c" Y# S8 o, u- E
0 ^' c& v1 t1 Z3 s: G4 C
x2 = np.linspace(1,10,100)
) r0 q+ w3 a4 }0 W: | y2 = []+ i0 J# \; l. _$ Z
for each in x2:
$ p/ S% h6 N! E y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])
0 A( |( c# M7 y
/ a8 X \; }* }! B9 N" P
/ A/ g$ D4 {; i8 m16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。7 M7 d+ o3 {! i+ k! m/ I8 i0 V
17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。
7 v1 I8 g0 i( \% m6 R& G5 }: v" y1 R1 K0 R( w
- }3 i/ r6 v* R7 A2 q; s. A: |
18.绘制图形:
5 P. G! j) Z/ K, ~' L; M3 g
1 p3 d' M; U/ i1 W& B7 a( z( z7 h plt.scatter(x1,y1, label='x1', color='coral')
7 y( \( J9 {+ v* @& X# i plt.plot(x2,y2, label='x2')
( L% B# l, |& o, m plt.legend()
. h: g! k* y: f+ h) o& y$ N N9 O' {. P6 o5 l. _5 P' \ E* ~
1 X. j7 N: ^# G% A# h' ]19.使用 Matplotlib 绘制了数值解和解析解的图形。2 n& @. ]& u6 F3 H1 L
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。3 z/ ?4 |8 p7 z1 d+ m/ b
21.使用 plt.plot 绘制了解析解的连续曲线。. T5 H) _" {. \
22.添加了图例。- w5 ^, Z/ D& p' v
( I' N1 o! l% D. g) s这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。3 L& O8 r8 V- U Y+ A& g* q, Z1 q
9 [% g( G r3 _
* c" K) N- G4 {- y0 ` |
zan
|