$ g3 P3 W- w- k" X8.使用 SciPy 进行数值解:6 u& @' g5 y, {3 B
/ `$ r3 ]. i& ~ `6 ~' x3 g
y1 = odeint(dy, 2, x1)% V" l! K2 z C& G7 Y: E/ ^) Y
+ `" U; f: w( B1 d( U1 Q
" y5 c! ~7 M: z% Y/ Z
9.调用 odeint 函数对微分方程进行数值求解。 1 j( l2 S O" E10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。 / g( n) z$ z* ^! S% p$ O11.数值解存储在 y1 中。 9 S, n& p' C5 v! h' K6 I: q. [8 `. }% W5 k- a
" e6 `: v2 e4 u8 V3 y' I
12.使用 SymPy 进行解析解:. _# D3 Z; N# V3 j5 O7 c1 R
9 l2 K2 j. o. V7 D7 D% G eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x 9 D& m' k3 H& J. m con = {y(1): 2}. U$ L. _" X, `9 L. |" X# `" `
f = simplify(dsolve(eq, ics=con))" `8 L4 }8 W# N
: {6 w* u& A- e! \! W# p
- m; C/ h Z- m) p
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。 , _9 z; P3 p7 [: U9 V1 N2 {8 Y14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。$ V( p7 S t& y. B
6 w( h4 [! A8 d3 ^# B7 g1 {! r- q4 j1 ?+ T
15.代入值并求解:* P8 w( \! v7 [$ q6 G7 `( a' Q4 U# b
! ]- b! `# u5 L) f/ N
x2 = np.linspace(1,10,100) " T; |* L0 I/ G y2 = []& C! ]: I* e! r4 `4 j4 O
for each in x2: ; P, F0 S$ G1 D' @0 I y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])& h' R$ C* M9 T/ d1 j9 d
2 Q/ h1 ], n, b; q: g9 E
4 f9 ]% U& x$ c' @16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。 5 O# F; E: Z- Y% }0 N% k9 `1 O17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。9 u/ U2 k1 j A3 q# N" P
4 ^% N* ~$ z0 q8 ]- ~
3 T* Y f0 a# E1 f3 e; g4 s. y
18.绘制图形:% ]1 t4 w5 ?8 J6 [& i/ |7 T
1 q( r- ~1 k t8 Y1 x
plt.scatter(x1,y1, label='x1', color='coral')0 R& U8 L& c+ u# h( |2 J
plt.plot(x2,y2, label='x2')4 ?8 X; ?0 _0 F4 l* ~) V& C: ?
plt.legend() % N% r1 ?; I. X. {( m/ S, @) y0 l! E- v& f* B
7 D: \5 R3 U) }# |: q2 q4 {( Q
19.使用 Matplotlib 绘制了数值解和解析解的图形。" l7 |* \0 O( \3 N6 t$ t9 C# Z
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。 1 c' g$ a! O! I$ G% S+ g# i21.使用 plt.plot 绘制了解析解的连续曲线。* h- q$ L! I- w. N) M; n+ d. @
22.添加了图例。" m2 X% A8 P. A4 S- i) G
0 f8 r% R+ U! C& V
这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。 / y4 T) t+ u1 l/ u # @7 P5 a+ m9 n5 w# O0 Z- q+ @3 y8 x6 Y9 |* \