- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:
* R5 }& R. @6 V# p简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
7 y! s+ l9 h1 j# W4 M' Q功能特点:
3 v* s- I$ Y8 i- Q提供了丰富的数学函数和常用的科学计算工具。
0 V. _' H3 k( A3 o8 t# {包含了多种数值优化算法和方程求解方法。
, Q* v D2 Z" ?0 o( _: A8 H/ s提供了各种插值、积分、微分方程求解等功能。
$ }' x7 {9 w7 c* [! ]2 o内置了统计分析、概率分布等统计工具。3 \8 R7 ]( W9 |0 P
支持信号处理、图像处理、稀疏矩阵处理等功能。0 |7 H- b0 C1 f8 v7 c' {7 c) X
SymPy:
1 n {7 h8 W8 h9 X- }' w' `. N简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。
9 B& y( s P& c$ C2 `4 L# l功能特点:3 `& E( R( h u2 w( I
提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
) j) Z( o' g9 {) s支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
5 K3 h0 X0 r3 P! U0 I' _* a可以用于数学符号推导、证明和解决问题。1 A! Z& i3 ~$ V1 I) U, e j
可以生成 LaTeX 代码以用于文档和演示。& q6 R; j' N; d+ t2 ?4 L( z k6 o
Y. V' E% ]; i! x; @: a
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。& O# m! j$ y7 z* H7 ]) m
1.导入模块:
/ L/ i7 |1 b' D b# X9 E8 X
/ c; t6 J/ S* A( I import numpy as np
9 U9 N9 c. X4 V from scipy.integrate import odeint# m. |8 K4 _ e! q; J0 v
from sympy import *
9 T% c" S8 b3 O
+ s6 ~; W% \% G& ]0 ^1 ~4 C" N3 ?: K. _( T
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。
+ W9 F, G4 m+ {' v0 Q2 M3.scipy.integrate 模块包含了用于积分和解微分方程的函数。5 y* N$ I2 `4 b* t' H
4.sympy 是一个符号计算库,用于进行符号数学计算。
9 o# z1 b4 r; H7 P/ P8 \$ I+ C! ^$ Y- v9 F3 C
4 n( ] k( ?- [; s, b' c5.微分方程和数值范围:5 X- H) Y: O3 L N! g
8 [+ b" _" W* q" s$ P O; x dy = lambda y,x:-2*y + x**2 + 2*x& p, V ^7 p$ {6 g1 {8 Y+ ~
x1 = np.linspace(1,10,20). R/ Z& n1 f R; w
$ }% Y; U1 ]7 _. \
& U- F4 T1 ~% Y/ P& E6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。+ H3 x( B3 r( s/ n
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。& _% H+ b3 B, K
6 }; Y& z, S, R% n7 }: e4 N
) A. ]( A2 ]. z* s8.使用 SciPy 进行数值解:. b! a2 H$ Q# ?$ T& ]
1 ]1 \) K6 X, Q. U8 v- P0 O
y1 = odeint(dy, 2, x1)+ Y0 x8 A7 a/ J: A0 _! T
9 W- J* e% j, k" M+ E! Q
( p* n& A# `- d4 Z5 W1 r
9.调用 odeint 函数对微分方程进行数值求解。
) @1 z8 u/ Y( ?% q+ R2 V10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。* e% \1 Z' P# \2 f- g
11.数值解存储在 y1 中。7 {" v# |7 V$ q, R" w1 v
_: f5 J3 G/ p6 C) Y. p8 V! _
1 W) u, V" z& I8 j1 p6 Y8 C2 V12.使用 SymPy 进行解析解:$ h: Z7 U0 S+ F$ ?. x% i. Q
, t. M. [; C3 X/ l2 t' B+ ]
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x
4 N5 e9 ` J- F; q) |) M( ` con = {y(1): 2}
* l& u/ s; | u8 T& g; T f = simplify(dsolve(eq, ics=con))
4 t+ w+ d4 G% C7 p2 ^
- z6 G! {3 ]! \% z: T: p
! _4 P2 J$ G- D+ i( J' ~) i13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
) J. R+ M. `9 H9 b: X14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
2 ~) B1 }% a4 Y
/ R6 h# K; d5 C7 H8 \7 c$ K4 ~* Z( K- h; j K$ h8 S
15.代入值并求解:
1 B4 n E* H$ }( f6 c
4 m4 b0 h3 v; J7 t$ S% G x2 = np.linspace(1,10,100)
8 g3 v% O* s3 v7 @& o. j6 J y2 = []
2 n, ~2 l1 H% L# s5 U- x! R for each in x2:1 y! O& {* x! T
y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])
5 O7 f- S! X: T8 p
9 i' }; A% M! B8 J
/ n3 O. k0 S4 A/ g$ W16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。2 h( l) D/ C* y" t
17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。* B9 H& z1 X5 p4 P- f- f
4 A2 Y- z3 W, L
8 p( _* w+ F. Z7 |
18.绘制图形:4 B; `6 A7 B- f0 ?5 _+ D2 N
3 K! F1 \ O# G% {
plt.scatter(x1,y1, label='x1', color='coral')
) F6 K4 v9 H* m# X, h* U+ g plt.plot(x2,y2, label='x2')
* j- y1 Y) W( d! @ plt.legend()" \7 @" K9 {9 j
( f. M2 g: B0 s
7 ?% A* i8 W/ v: B7 ]19.使用 Matplotlib 绘制了数值解和解析解的图形。
C; v. `7 b# ], r) R$ A20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。
/ n T6 W- J6 L" [. e% c1 h/ W21.使用 plt.plot 绘制了解析解的连续曲线。6 F4 N& p0 s4 W7 u9 X
22.添加了图例。, L4 y- n: }* c
. k# b1 ~- L' O) o D7 `这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。
% ^% G1 T, z. U( o' A8 r0 ]) r5 c+ K4 E( W$ P
$ ~0 `% r# v- e" b |
zan
|