- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:. {- U0 X1 T$ r" T, |
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。4 L9 ^9 S" z9 h7 M, x
功能特点:3 T" R, d2 R9 z% t
提供了丰富的数学函数和常用的科学计算工具。, B( W9 {3 e0 v8 c
包含了多种数值优化算法和方程求解方法。
5 f/ e% \( g$ M' `. s提供了各种插值、积分、微分方程求解等功能。
+ v( @. B+ N A( ^内置了统计分析、概率分布等统计工具。
# Z& e$ K. Z- K2 d, ~8 [支持信号处理、图像处理、稀疏矩阵处理等功能。6 [( m. G* K3 R( L; G9 b
SymPy:2 d7 ?. }$ B0 H3 N
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。( u* k4 u) ]+ P
功能特点:
) ]. p; Q+ k9 d3 _" J m提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
5 b' d/ L, X. Z2 }) u' e支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
0 q" k* z# _# h可以用于数学符号推导、证明和解决问题。
2 l1 n a, K+ C. G2 u$ Y7 [7 c可以生成 LaTeX 代码以用于文档和演示。2 z j2 q/ H) z1 M0 y- w& k* J
+ E1 l2 G/ P4 s$ p9 [1 }' x总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。
3 ?( j! ]) R N2 c; U3 }! E1.导入模块:
4 \8 [1 |( N$ ], O- f, p7 d1 t; z6 E" d
import numpy as np
4 s( O3 G! O6 L& ` from scipy.integrate import odeint2 f2 q$ ~' {6 i2 a F9 B
from sympy import *
! H9 R# u6 Z( b4 m, E4 h% X# ^/ z2 h# g, j+ o2 l& P2 C1 J
7 q1 y4 Z: Z1 `0 k6 C6 Y' B+ G I/ |! {2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。
* g% M% j; w2 X4 O, g6 O% W' @3.scipy.integrate 模块包含了用于积分和解微分方程的函数。
5 h- y( G5 i5 s5 W7 K" i4.sympy 是一个符号计算库,用于进行符号数学计算。- u5 \0 N* S* O( y" q
* g0 U# Q* q) W$ w. ]! L, H3 r7 t- _1 E1 I
5.微分方程和数值范围:8 n' E# O# k& k- c G6 ?) V0 p* i
/ \- V9 T; f8 X \& P1 i
dy = lambda y,x:-2*y + x**2 + 2*x
! [2 S m: |' U x1 = np.linspace(1,10,20)
% Z0 \! _7 D( A+ b
5 ^8 L. K [, D+ Y( j# K% Y& L. n; Q" P; N& D9 ]. J" I
6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。
+ D% V5 }! k' w( h# \$ {4 i7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。, A* p7 f* G: ~8 Q( S
/ ?+ w0 n, |2 J) g
# f* E8 F( P" ?1 A0 h% V1 M8.使用 SciPy 进行数值解:
5 j8 a, ^0 C+ i; m7 X f* U* H3 }5 F+ J
y1 = odeint(dy, 2, x1)+ E' K/ C4 h( W
, E [" Q7 |$ {( f+ n: e0 _5 j& b( R
9.调用 odeint 函数对微分方程进行数值求解。# l( ^$ }* P$ x8 e7 z# l$ _
10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。
2 z/ ~7 d4 i. q8 @11.数值解存储在 y1 中。/ k# } b. g& d, O
; Q( x9 Q) g" h0 Q4 e {9 W' F1 V6 d; h
12.使用 SymPy 进行解析解:
" p( O% q4 Z- {) G. c' c. |6 U( c! ?5 j" a$ y- Z2 a
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x7 F' {& Z. D' F
con = {y(1): 2}, p+ M; Q1 L# [+ T$ S! p
f = simplify(dsolve(eq, ics=con))' ]# {" o/ e- J& i
6 R5 `- c0 U+ U5 [8 y4 |3 c+ C- o
8 y+ Q4 w) ~" U
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
" U7 i" J& ?" Z$ U2 P+ r14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
6 X0 P+ q9 ^: l# {, u; w
- C+ `9 ?* A; g
' \% f' b& R4 ]! Q! `15.代入值并求解:, i3 A: P& R. Q7 X2 L
) [, n' f. ^7 N B3 P6 x) ]
x2 = np.linspace(1,10,100)3 H$ ]( M& c0 {% S1 X% S
y2 = []" S% u; K$ ^1 h9 q0 w A4 W
for each in x2:
6 i' L: P+ b+ H0 ~. F% {4 x+ B2 z" e y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])6 Y' Q* u/ ^: d# g P
& b n5 {8 C- t& b2 B
+ c' w9 D0 }, ^6 _& ?) x16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。9 S6 F# n( e: J/ U, R% c' S( T/ z4 D3 }6 N
17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。; ^4 L! O V3 _ N
, R/ U0 O5 u+ h4 h
2 C$ n" d* _; S" C# Y* G" ~# d* m18.绘制图形:
4 h3 \+ T) c& C6 s; T( D5 c) M5 r- O4 G; v' @3 L1 H$ u
plt.scatter(x1,y1, label='x1', color='coral')9 [* _- Q, Q& ^4 n5 e: z
plt.plot(x2,y2, label='x2')
2 X( v a" K* ?8 B plt.legend()
3 @% g! e- A; U$ U
2 q7 ^2 ~. H7 c& I+ W* t
3 U& G5 ^9 T. S! R& g( k/ i19.使用 Matplotlib 绘制了数值解和解析解的图形。8 @8 {/ C- i) Z b! S0 e9 c8 o2 I3 i
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。# h" t$ f; N9 {- |, A2 j
21.使用 plt.plot 绘制了解析解的连续曲线。% H& l& e* U* d0 i3 v) z
22.添加了图例。
p+ I4 i4 h, ^& [) M9 _. _; X8 N9 d; i) G' a( D3 x6 G+ D
这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。
8 x$ h( }& ?, ~" ^ w* Z8 ?- d- }) p7 j' ~+ } |
) l$ P5 ]& J7 C9 m) r: n4 R0 Q. V
|
zan
|