赞
踩
一、涉及的库&基本语法语句有:
1. import sympy as sp
用于求解微分方程(组)的通解或特解,只能求一个或一组两个方程的解
① x = sp.Symbol(‘x’) 定义自变量
② f = sp.Function(‘f’) 定义函数
③ equation = sp.Eq(方程左边, 方程右边)
④ ans = sp.dsolve(equation, f(x))
当要求特解时,则为:
ans = sp.dsolve(equation, f(x), ics={f(x0): 相应的y值})
当要求微分方程组(一组两式)解时,则为:
ans = sp.dsolve([equation1, equation2])
⑤ sp.pprint(ans) sympy自带的输出形式
⑥ sp可以用以引出数学特殊符号
sp.exp(指数) 或 sp.sin(x)
2. import numpy as np
① 在作图时生成数列的函数
x = np.linspace(start, stop, num of steps)
此函数用于生成数列,start与因变量初始值相对应
Eg:x = np.linspace(0,1,100)
x = np.arrange(start, stop, length of steps)
与上式效果相同
② np可以用以引出数学特殊符号,与sp的功能相同
np.exp(指数) 或 np.sin(x)
3. import matplotlib.pyplot as plt
绘图的包
① 生成图像:
plt.plot(自变量, 解决变量)
需要生成标签时:
plt.plot(自变量, 解决变量, label=’名称’)
Eg: solution = odient(f, y0, x)
plt.plot(x, solution, label=’x’)
② plt.xlim(a, b) 控制图中坐标轴范围
plt.ylim(a, b)
③ plt.legend() 在图中展示标签
④ plt.title(‘标题’) 在图中展示图名
⑤ plt.grid() 画格子
⑥ plt.show() 输出图像
4. from scipy.integrate import odient
在生成图像时解微分方程的包
① solution = odient(函数名, 因变量初始值, 自变量, tfirst=True/False, args=([常数1, 常数2]))
Eg:solution = odient(f, y0, x, tfirst=True)
args部分可以不加;tfirst部分也可以不加,True代表定义的函数中自变量
在前,False反之
5. from scipy.integrate import solve_ivp
知道语法但不知道怎么用……总之是用来画图的
ans = solve_ivp(函数名, 自变量范围, 因变量初始值, args=(常数1, 常数2))
args=()部分不可以省略!
二、一些全局的视角概念
1. 关于函数的定义
① 对于进行绘图的题目,定义函数的形式为:
- def f(u, t):
- x, y = u
- dxdt = 3*x-x*y
- dydt = 2*x-y+e**t
- dudt = [dxdt, dydt]
-
- return dudt
② 对于求通解/特解的题目,定义函数的形式为:
- x = sp.Symbol(‘x’)
- f = sp.Function(‘f’)
- y = f(x)
-
- equation = y.diff(x, 2) + sp.exp(2*y) # y.diff(x, 2)即y对x求两次导
2.关于最后求解的公式
① 对于进行绘图的题目,最后求解的公式为:
solution = odeint(f, u0, t)
② 对于求通解/特解的题目,最后求解的公式为:
ans = sp.dsolve(equation, y, ics={f(1): 2 * sp.exp(1)})
3. 中间的其他部分
① 对于求特解通解的题目,equation语句后面直接跟ans=sp.dsolve语句
② 对于进行绘图的题目,中间还有如下一段:
- u0 = [0, 0]
- t = np.linspace(0, 10, 100)
用来定义因变量的初始值和决定图中取点的情况
三、总结
求解:x′(t)=4∗x(t)−2∗y(t) 方程组,包括图像和通解
y′(t)=2∗x(t)−y(t)
- # 求通解
-
- import sympy as sp
-
- # 定义自变量、因变量和函数
- t = sp.symbols("t")
- f1 = sp.Function("f1")
- f2 = sp.Function("f2")
- x = f1(t)
- y = f2(t)
-
- # 将两个等式带入
- equation1 = x.diff(t, 1)- 4 * x + 2 * y
- equation2 = y.diff(t, 1)- 2 * x + y
-
- # 求解公式
- ans = sp.dsolve([equation1, equation2], [x, y])
-
- print(ans)
- sp.pprint(ans)
- # 作出图像
-
- import numpy as np
- from scipy.integrate import odeint
- import matplotlib.pyplot as plt
-
- # 定义函数
- def f(t, u):
- x, y = u
- dxdt = 4 * x - 2 * y
- dydt = 2 * x - y
- dudt = [dxdt, dydt]
- return dudt
-
- # 对自变量和因变量的处理
- u0 = [1, 1]
- t = np.linspace(0, 1, 100)
-
- # 求解函数
- solution = odeint(f, u0, t, tfirst=True)
-
- # 作图
- plt.plot(t, solution[:,0], label='x')
- plt.plot(t, solution[:,1], label='y')
- plt.legend()
- plt.grid()
- plt.xlim(0, 1)
- plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。