- 在线时间
- 481 小时
- 最后登录
- 2026-8-25
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7859 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2946
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1177
- 主题
- 1192
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:$ m8 a- z* H/ J) D h) |, |1 }' `
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。' O7 i* J2 ^6 s, D% s# k
功能特点:8 q5 i5 x& P. ]
提供了丰富的数学函数和常用的科学计算工具。' O0 \# @1 [+ P ~! P w% ?' r- X- u) u: a
包含了多种数值优化算法和方程求解方法。# j6 R( B# R% P4 ]5 e
提供了各种插值、积分、微分方程求解等功能。0 Y( b4 D7 L4 U. Q! H; i& t4 V
内置了统计分析、概率分布等统计工具。$ y: _' R* F2 D
支持信号处理、图像处理、稀疏矩阵处理等功能。* ? {' ~- U J) H
SymPy:
4 \/ x$ h( S- X0 z简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。/ s3 v3 N1 U- m, o2 n# ~, y
功能特点:$ U/ s. E+ k) T& f( i) j
提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
1 t* ~. y. T: j- u: _% c支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
% s" Z& F* \, S, E& C可以用于数学符号推导、证明和解决问题。( a) R' `, D! X) C4 g) V
可以生成 LaTeX 代码以用于文档和演示。7 X4 S' c) p4 \1 ?6 n' x
& y3 m, o/ }% t1 b/ Q8 p
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。
; F2 _3 B" F. Y7 s/ e. j1.导入模块:- y3 j( Y& f( {* i- s+ G% B/ g
, r; z/ y1 y: X* A/ M import numpy as np
7 v, u4 \: D x8 M0 A4 R0 ~# M from scipy.integrate import odeint% X) k! L1 t+ x; j5 b
from sympy import *: i0 j! l* ^: X
7 i( k8 r' `+ y& }
) G; q4 J; c' m, _
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。8 x6 Z. ^; |* B# d9 s3 w
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。
" f6 }. n7 C3 k; h5 G5 m4.sympy 是一个符号计算库,用于进行符号数学计算。
+ b* @/ n; L8 @" U; E3 l* m! l3 I3 P% d3 p9 s
# H( C7 h' ?5 H' \1 _* g5 n! l5.微分方程和数值范围:
7 C& i$ s- h" l5 G k, @: G; q! t; j8 N( D8 j, |
dy = lambda y,x:-2*y + x**2 + 2*x
: d8 L* m% W; Z- V# B8 h x1 = np.linspace(1,10,20)# P4 ^3 r4 E0 z7 J1 y& W
4 c2 z( P; y4 t* v4 M
6 M* h* ?9 x# j4 b6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。9 h/ q5 T7 Y `
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
3 X& M5 c. R4 `2 n" U- [5 G) M, p
( j) R# [8 p7 D! b) G7 V5 N
* k: P2 R8 I* w- C: U3 \. g8.使用 SciPy 进行数值解:
5 w& K) v( V5 m( z+ x* r- d$ ^. z* r! }0 e+ i+ K8 _' u2 s, i- W
y1 = odeint(dy, 2, x1). ]/ `- _# |1 E1 Z7 o' p5 J
+ u% k* A9 v, d- M3 G) z9 H
# o) O% N# K$ c2 }9.调用 odeint 函数对微分方程进行数值求解。
8 O5 Y7 [6 Z, q0 X5 a8 \10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。7 V. {% }* e+ x) d9 {, B
11.数值解存储在 y1 中。
/ Y1 D# J0 b q, B$ S2 V* m+ X6 I" K+ q2 f; p, L# `1 t8 I O+ K2 H
5 }5 O, z1 F& R. B6 s7 i6 N12.使用 SymPy 进行解析解:
/ U) U% {# p# W' A, b/ }& W3 m6 ~
7 I; i1 D+ A! r- O1 W6 }, O4 i eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x
* Z" T8 X2 g6 `6 O con = {y(1): 2}8 [! m! f0 l" g, T- Z# @
f = simplify(dsolve(eq, ics=con))* v' V9 j$ e/ p9 n' l$ J( w7 L5 p
& F+ L$ q' n8 B2 ?6 n+ E
/ ]4 c, P- J$ D/ p+ Y2 `
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。5 F9 X7 R& U! o$ n/ w* o
14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。2 O9 |6 W) Y( {7 n# ^* v# _
! ^# b/ H4 L; t% ^7 e- j
& T; b/ F9 v% ^' e' B& A8 B15.代入值并求解:
$ j/ H0 I5 _4 p( b. H, ?: I
* B3 b' W+ o$ t2 ~8 F, a2 ? x2 = np.linspace(1,10,100)7 j, [, `+ K9 p$ {, c" w: p
y2 = []
6 ^0 v* S6 ^6 ^/ D( Z for each in x2:" n9 n X9 I o1 D
y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])2 l: I0 q- E( v$ W; {' H9 E
, J: P" g& h3 T& {% I5 d# c# {9 u1 f" G2 u
16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
0 o9 Q* U1 }% x F3 }7 n! L17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。9 Y0 y5 J% T) R! f+ x# s
3 @0 ~& s- |4 l/ j2 ?. Y
6 H4 z! [# t6 c) n+ n0 J18.绘制图形:7 M9 X" Z3 z6 F, t+ r
% c( s3 j! r* }" _3 U plt.scatter(x1,y1, label='x1', color='coral'), ^/ e, V4 K! I
plt.plot(x2,y2, label='x2')% n S3 t! S7 m- y, q
plt.legend()) o" X8 j1 V! K6 k1 ]1 ^
! S3 L; ~+ J! x# G% q4 q' {" J* J* q# [0 _$ o8 n% G
19.使用 Matplotlib 绘制了数值解和解析解的图形。! B0 @1 A, v7 f
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。* Z6 ^$ z" x4 r
21.使用 plt.plot 绘制了解析解的连续曲线。+ D, p9 u7 E+ z, y7 ]) [2 p$ N
22.添加了图例。/ H2 c0 j1 U5 x# Y8 y
( g6 g9 g' i4 }; P9 X
这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。
' X: U; ?( a% N" |7 K
( h. l, C3 G. s% f- ]
# D$ M; G! @# Y% L1 [4 D |
zan
|