- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:" G2 o& w( j+ } {7 ?
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。3 _1 S4 i+ x! e/ N! T. |
功能特点:3 P5 ]4 X# w/ j, u8 J" V
提供了丰富的数学函数和常用的科学计算工具。$ L! {4 S+ a" O9 x
包含了多种数值优化算法和方程求解方法。
. y2 K# n$ _& B0 E6 x. z& `提供了各种插值、积分、微分方程求解等功能。
" b9 h+ `! w( g+ C& @内置了统计分析、概率分布等统计工具。
7 a9 M: S F. H, Q3 K支持信号处理、图像处理、稀疏矩阵处理等功能。( D& |8 b; q( l. \
SymPy:0 r8 T% K' I5 h! b% r
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。 z- y X# K d& ]; E' b" O
功能特点:
; y6 q. i* R; \8 W+ l提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。( B/ r7 j, _$ g9 D0 C
支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
4 V# _+ w, E+ j可以用于数学符号推导、证明和解决问题。
3 S4 y' m3 s0 w! y2 ]6 w% m可以生成 LaTeX 代码以用于文档和演示。
/ @# S S2 O7 h6 |+ K( D' }1 O3 P. ?
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。
% [) t, e& M/ q! j1.导入模块:1 T4 B* Y0 u3 V; g9 |1 h; n5 n; K! J
1 Q0 B9 t( W7 e; r2 |0 Z5 |9 {
import numpy as np
6 U+ l5 j7 b4 H7 ]* A0 ? from scipy.integrate import odeint* [4 c$ S3 o% x5 Z1 M
from sympy import *: [( O& r" V$ \9 j$ @
6 D- e1 h5 ?3 W1 }4 i3 b+ Z% u! W7 r. A. Z: \/ q2 Z* B0 P3 i+ K
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。( f: `; ?! l, Y: n- W
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。6 j2 J7 X( G# }1 b2 O3 k1 g8 y
4.sympy 是一个符号计算库,用于进行符号数学计算。& T% C7 [. Y9 ]% H
% J8 b5 G" H1 S& v9 A6 u
9 m9 H0 T1 }4 p( w$ q: r5 h" [5.微分方程和数值范围:
8 _5 A1 o6 O0 |8 A! F- D
9 ]6 b( Z5 W7 K8 p s dy = lambda y,x:-2*y + x**2 + 2*x
( o h. g/ @2 v* B+ }1 z/ R, I9 g x1 = np.linspace(1,10,20). q5 j& b/ S2 P. u3 u: b
- m% N, m, k1 b# ?% T
' d% x% `0 L% N( _# r6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。5 w4 d) C5 z, s1 B& J% ?
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
# z) `- t- R! F
" C4 M( U; k9 p9 G2 N
A9 E) B/ L1 X% ?' q0 h) q8.使用 SciPy 进行数值解:' K8 h+ ]3 U# w8 Y
& o+ _& c% N4 w& `1 ~ y1 = odeint(dy, 2, x1)9 C! j/ q' C) p; J2 @7 c' f
* q& {8 d2 X @6 ^" q
* ~9 O6 e+ q4 C6 w8 C, l, z
9.调用 odeint 函数对微分方程进行数值求解。
. G Z3 f/ Z# ] C1 |9 Z+ c/ [1 Z10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。! n3 ~; t6 Z3 d- u9 x9 B" z$ C9 d
11.数值解存储在 y1 中。
7 W3 j3 H7 b G4 S2 I y, i \+ j, Y! E7 L3 Z
( j# y0 [5 e3 |* Q12.使用 SymPy 进行解析解: ?- v- X$ e3 x% ?3 R. u& I
7 E4 s0 c( x1 `, b* ~
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x; q4 ?/ g# I: u7 g" H
con = {y(1): 2}
: L! K0 E. s/ ^% f: F f = simplify(dsolve(eq, ics=con))1 E% c! |$ Z$ B
( c+ Q$ ?" u) N/ e
. @. T1 e, E2 r. s7 h13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
; z4 _2 g' I1 m1 ?4 B2 w14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。$ @, ~. \3 @, K! c1 c
& r" ]) e! u" N! v! \9 k2 W
8 J' p0 g4 J* u* E; ]. T15.代入值并求解:% h( I7 ~9 R$ R% J6 d' _' g$ t: h: s2 B* g
' m2 C+ K+ z/ V, g& Q$ p. x x2 = np.linspace(1,10,100)
% \9 ?' A/ K; [ y2 = []$ A0 k, n1 e# T$ P0 I
for each in x2:
. z. d5 [! u% q: b# I, s y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])
& D; z# E# G" Q: Q$ s# W8 q5 C0 h$ A0 B' f' J5 L* {6 ]5 |; U; h" s
6 b$ y- ^ I z$ ~
16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
$ {3 J! P {2 C z F R5 T: m+ `17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。; J" O3 |8 N* e! K0 E( D( p8 P# O6 F
/ U0 c2 \6 ]& ?# |" N7 p1 K9 I! k( c# l% ~* A3 `2 L* U
18.绘制图形:( |+ W7 ]/ ?- j4 c9 d* g
2 d' W E, z) r' x; z7 T, u plt.scatter(x1,y1, label='x1', color='coral')
9 ^. c; I4 m- v Q' j! B7 S& G1 k plt.plot(x2,y2, label='x2')
2 F5 K( }. g# c plt.legend()+ a/ H# S0 ~- z3 m
6 J8 z5 W: ~5 @2 N; Z7 J
! Y- |4 {8 L# x( @. B: S4 n' N
19.使用 Matplotlib 绘制了数值解和解析解的图形。5 @- C9 |6 d$ v+ J5 [
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。& G; M* s+ z `5 P( A
21.使用 plt.plot 绘制了解析解的连续曲线。& a4 \% S" [& }
22.添加了图例。* ?4 m4 |* i8 F- X" ?2 v M! D0 B
; e& z }8 |! U9 }& h这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。( S( q$ a# t1 u- I0 S
; C. E% l0 B# c1 L, f ^. R/ u7 z/ I! K4 O
|
zan
|