当前位置:   article > 正文

数学建模比赛有关Python解决常微分方程的一些总结_python求特解

python求特解

微分方程

一、涉及的库&基本语法语句有:

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. 关于函数的定义

        ① 对于进行绘图的题目,定义函数的形式为:

  1. def f(u, t):
  2. x, y = u
  3. dxdt = 3*x-x*y
  4. dydt = 2*x-y+e**t
  5. dudt = [dxdt, dydt]
  6. return dudt

        ② 对于求通解/特解的题目,定义函数的形式为:

  1. x = sp.Symbol(‘x’)
  2. f = sp.Function(‘f’)
  3. y = f(x)
  4. 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语句

        ② 对于进行绘图的题目,中间还有如下一段:

  1. u0 = [0, 0]
  2. t = np.linspace(0, 10, 100)

        用来定义因变量的初始值和决定图中取点的情况

三、总结

求解:x′(t)=4∗x(t)−2∗y(t)    方程组,包括图像和通解

           y′(t)=2∗x(t)−y(t)​

  1. # 求通解
  2. import sympy as sp
  3. # 定义自变量、因变量和函数
  4. t = sp.symbols("t")
  5. f1 = sp.Function("f1")
  6. f2 = sp.Function("f2")
  7. x = f1(t)
  8. y = f2(t)
  9. # 将两个等式带入
  10. equation1 = x.diff(t, 1)- 4 * x + 2 * y
  11. equation2 = y.diff(t, 1)- 2 * x + y
  12. # 求解公式
  13. ans = sp.dsolve([equation1, equation2], [x, y])
  14. print(ans)
  15. sp.pprint(ans)
  1. # 作出图像
  2. import numpy as np
  3. from scipy.integrate import odeint
  4. import matplotlib.pyplot as plt
  5. # 定义函数
  6. def f(t, u):
  7. x, y = u
  8. dxdt = 4 * x - 2 * y
  9. dydt = 2 * x - y
  10. dudt = [dxdt, dydt]
  11. return dudt
  12. # 对自变量和因变量的处理
  13. u0 = [1, 1]
  14. t = np.linspace(0, 1, 100)
  15. # 求解函数
  16. solution = odeint(f, u0, t, tfirst=True)
  17. # 作图
  18. plt.plot(t, solution[:,0], label='x')
  19. plt.plot(t, solution[:,1], label='y')
  20. plt.legend()
  21. plt.grid()
  22. plt.xlim(0, 1)
  23. plt.show()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/814127
推荐阅读
相关标签
  

闽ICP备14008679号