目录

  • 微分方程的意义
  • sympy求解微分方程的方式
    • symbols()+Eq()
    • Function()
    • solveset()
  • 求解实际问题
    • 1. 降落伞问题
      • 假设变量
      • 建立模型
      • 求解微分方程模型
      • sympy求解
    • 2. 放射性元素衰变问题
      • 假设变量
      • 构建与求解模型
      • sympy求解

微分方程的意义

函数是客观事物内部联系的量化,利用函数关系可以研究客观事物的内在规律,因此,如何寻找函数关系在实践中有着极其重要的意义!
但是在很多问题当中,往往是若干“因”导致若干“果”,想要通过观察直接找出变量之间的函数关系比较困难,那么我们该怎么办呢?
我们可以通过问题中反映的情况,列出含有要找的函数及其导数关系式,这样的关系式就是微分方程
微分方程建立之后,需要对其进行研究进而找到未知函数来,这一过程就是解微分方程

引自《高等数学 第七版 同济大学出版社》

sympy求解微分方程的方式

symbols()+Eq()

求解下面微分方程
y ′ ′ − 2 y ′ ′ + y = 0 y''-2y''+y=0 y′′−2y′′+y=0

import sympy as spx=sp.symbols('x')
y=sp.symbols('y',cls=sp.Function)eq1 = sp.Eq(y(x).diff(x, x) - 2*y(x).diff(x) + y(x), 0)
res1=sp.dsolve(eq1,y(x))
print(res1)
>>> Eq(y(x), (C1 + C2*x)*exp(x))

Function()

求解下面微分方程
y ′ ′ − 2 y ′ + y = 0 , 其中 y ( 0 ) = 0 , y ′ ( 0 ) = 1 y''-2y'+y=0,其中y(0)=0,y'(0)=1 y′′−2y′+y=0,其中y(0)=0,y′(0)=1

from sympy.abc import x
import sympy as sp
y=sp.Function('y')
eq=sp.diff(y(x),x,2)-2*sp.diff(y(x),x)+y(x)con={y(0):0,sp.diff(y(x),x).subs(x,0):1}
res=sp.dsolve(eq,ics=con)
res
>>> Eq(y(x), x*exp(x))

solveset()

求解下面微分方程
y ′ + y + y 2 = 0 ,其中 y ( 0 ) = 1 y'+y+y^2=0,其中y(0)=1 y′+y+y2=0,其中y(0)=1

from sympy import *
f = symbols('f', cls=Function)
x = symbols('x')
eq = Eq(f(x).diff(x,1)+f(x)+f(x)**2, 0)
dsolve(eq, f(x))
>>>  Eq(f(x), -C1/(C1 – exp(x)))
C1 = symbols('C1')
eq1 = -C1/(C1 - exp(x))
eq2 = eq1.subs(x, 0)
solveset(eq2 - 1, C1)
>>> {1/2}

求解实际问题

知道了如何使用sympy库求解各种各样的微分方程,下面我们来解决一点现实中遇到的问题

1. 降落伞问题

某降落伞在下降过程中,受到的空气阻力与速度成正比,设降落伞的初始速度为0,求降落伞下降速度与时间的函数关系

假设变量

降落伞的速度:v(t)
重力:P,大小为mg,方向与v一致,
阻力:R,大小为kv,方向与v相反
降落伞所受到的合力为:F

建立模型

根据题目中给出的比那变量之间的函数关系可得
F = m g − k v F=mg-kv F=mg−kv
根据牛顿第二定律
F = m a , t 时刻降落伞的加速度 a = d s 2 d 2 t = d v d t F=ma,\\t时刻降落伞的加速度a=\frac{ds^2}{d^2t}=\frac{dv}{dt} F=ma,t时刻降落伞的加速度a=d2tds2​=dtdv​

那么列出微分方程:
m d v d t = m g − k v ,其中 v t = 0 = 0 m\frac{dv}{dt}=mg-kv,其中v_{t=0}=0 mdtdv​=mg−kv,其中vt=0​=0

求解微分方程模型

d v m g − k v = d t m \frac{dv}{mg-kv}=\frac{dt}{m} mg−kvdv​=mdt​
两端积分得到
∫ 1 m g − k v d v = ∫ 1 m d t \int \frac{1}{mg-kv}dv=\int \frac{1}{m}dt ∫mg−kv1​dv=∫m1​dt

由于mg-kv>0,则
− 1 k l n ( m g − k v ) = t m + C 1 -\frac{1}{k}ln(mg-kv)=\frac{t}{m}+C_1 −k1​ln(mg−kv)=mt​+C1​


m g − k v = e − k m t − k C 1 mg-kv=e^{-\frac{k}{m}t-kC_1} mg−kv=e−mk​t−kC1​

于是
v = m g k ( 1 − e − k m t ) v=\frac{mg}{k}(1-e^{-\frac{k}{m}t}) v=kmg​(1−e−mk​t)

sympy求解

from sympy import *m,g,k,t=symbols('m g k t')
v=Function('v')
eq=Eq(m*diff(v(t),t),m*g-k*v(t))
con={v(0):0}
res=dsolve(eq,ics=con)
res
>>> Eq(v(t), g*m/k - g*m*exp(-k*t/m)/k)

从上面我们可以看出,我们在求解微分方程时经过这么多步骤推导出的 v 与 t v与t v与t的函数关系式,被sympy的几行代码就解决了!不得不叹服sympy库的便利

2. 放射性元素衰变问题

镭元素的衰变规律如下,衰变速度与其现存量R成正比现在已知1600年后,镭的衰变变为原来质量的 1 2 \frac{1}{2} 21​,求镭元素现存量R与时间t之间的函数关系

假设变量

现存量R
衰变常数 λ \lambda λ
衰变速度v

构建与求解模型

根据题目中的已知关系

v = d R d t = − λ R v=\frac{dR}{dt}=-\lambda R v=dtdR​=−λR
那么
d R R = − λ d t \frac{dR}{R}=-\lambda dt RdR​=−λdt
两边积分得到
∫ 1 R d R = ∫ − λ d t \int \frac{1}{R}dR=\int -\lambda dt ∫R1​dR=∫−λdt

l n R = − λ t + l n C R = C e − λ t lnR=-\lambda t+lnC\\ \ R=Ce^{-\lambda t} lnR=−λt+lnC R=Ce−λt
由于
t = 0 时, R = R 0 t = 1600 , R = 1 2 R 0 t=0时,R=R_0 \\t=1600,R=\frac{1}{2}R_0 t=0时,R=R0​t=1600,R=21​R0​
代入上式可得
λ = l n 2 1600 = 0.000433 \lambda=\frac{ln2}{1600}=0.000433 λ=1600ln2​=0.000433

于是
R = R 0 e − 0.000433 t R=R_0e^{-0.000433t} R=R0​e−0.000433t

sympy求解

from sympy import *
t, k ,R0= symbols('t,k,R0')
R = Function('R')
R_ = Derivative(R(t),t)
Eqn = Eq(R_,-k*R(t))
res = dsolve(Eqn,ics={R(0):R0})
print(res)
>>> Eq(R(t), R0*exp(-k*t))
kk=solve(res,k)
k0=kk[0].subs({t:1600,R(t):0.5*R0})# 求式子中的参数k(元素衰变系数)
print(kk,k0)
>>> [log(R0/R(t))/t] 0.000433216987849966
k1=res.args[1]
k11=k1.subs({t:99999,k:k0})
print(k11)
>>> 1.53395780934154e-19*R0   # 99999年之后元素的剩余量

高等数学--微分方程的求解(sympy库)相关推荐

  1. sympy 求微分方程_python中sympy库求常微分方程的用法代码解析

    本篇文章小编给大家简单分享一下python中sympy库求常微分方程的用法代码解析,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 问题1: 程序,如下 ...

  2. 利用sympy库求解常微分方程:dsolve()函数

    [小白从小学Python.C.Java] [计算机等级考试+500强双证书] [Python-数据分析] [sympy库的使用] 使用sympy库求解常微分方程 .dsolve()方法 选择题 下列说 ...

  3. 用python和sympy库解决方程组问题_使用Python的SymPy库解决数学运算问题的方法

    摘要:在学习与科研中,经常会遇到一些数学运算问题,使用计算机完成运算具有速度快和准确性高的优势.Python的Numpy包具有强大的科学运算功能,且具有其他许多主流科学计算语言不具备的免费.开源.轻量 ...

  4. 【sympy】python 求常微分方程 sympy库

    问题1: f ′ ′ ( x ) − 2 f ′ ( x ) + f ( x ) = s i n ( x ) f''(x)-2f'(x) + f(x) = sin(x) f′′(x)−2f′(x)+f ...

  5. 信号与系统 chapter9 关于信号与系统中微分方程的求解

    微分方程的求解 许多同学之所以觉得信号与系统难的原因之一就在于它的数学推导,特别是对于一些高等数学基础比较薄弱的同学来说,且不说后面的求解傅里叶变换部分,目前的LTI连续系统微分方程的求解,已经是的有 ...

  6. 用python和sympy库解决方程组问题_Python语言 SymPy库数学方程问题——线性方程组篇...

    本文主要向大家介绍了Python语言 SymPy库数学方程问题--线性方程组篇,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 这里我的本机的操作系统是 Ubuntu 14.04  ...

  7. 用sympy库解常微分方程

    1. sympy库简介:Sympy是一个数学符号运算库.能解决积分.微分方程等各种数学运算方法,用起来也是很简单,可以和Matlab想媲美. 2. 解常微分方程举例:比如解下面这道常微分方程 Pyth ...

  8. 用python和sympy库解决方程组问题_使用 Python 解数学方程

    说到数学题,相信大家都不陌生,从小学到大学都跟数学打交道. 其中初中的方程组,高中的二次曲线,大学的微积分最为头疼, 这个项目 就使用python 来解决方程组问题,微积分问题,矩阵化简. SymPy ...

  9. Python中sympy库的使用方法(详细)

    Python中sympy库的使用方法(详细) python拥有强大的数学计算能力,Matlab确实有很强的计算能力,但是python在这方面更加灵活,运行速度更快,所以python在这方面拥有较大优势 ...

最新文章

  1. initBuilder注解接收多个对象
  2. Vuebnb:一个用vue.js和Laravel构建的全栈应用
  3. 如何从开发人员走向架构师
  4. POS 收款机资料整理
  5. 非常棒的jQuery排版用插件
  6. Appium 命令行安装教程
  7. android控制小米设备吗,智能设备一指连:小米 UWB 技术发布,手机指向设备直接操控...
  8. cout输出数组_让程序从1开始一直执行++操作,10秒钟能输出最大的数是多少
  9. android动态设置文本居中显示图片,Android DrawableTextView图片文字居中显示实例
  10. Stanford_NLP_TOOLS:CRFClassifier
  11. sap未分摊差异怎么处理_物料主数据价格控制及差异问题
  12. Java.Lang.NoSuchMethod 错误
  13. namenode 优化 mv慢的问题
  14. 盘点当下稳定又好用的远程控制方案,软硬全覆盖
  15. 安装linux没有raid驱动程序,LINUX 无法在 RAID 上安装的问题
  16. VS2017 远程调试linux(centos).net core
  17. 【UVA133】The Dole Queue(环下标的求法)
  18. 台式计算机风扇一直响,为什么电脑风扇一直响
  19. 【Hello,互联网】百家争鸣的互联网时代
  20. android获取安卓版本,Android获取手机系统版本等信息的方法

热门文章

  1. 17.商品业务-首页
  2. 【uniapp】JS中拼接字符串的写法
  3. 一篇所有研究生都该读的好文:阳光温热,科研静好!
  4. Nacos系列3---源码刨析naming服务的server列表核心管理类ServerListManager
  5. [附源码]计算机毕业设计JAVA毕业生离校管理系统
  6. 目前最好用的软件下载网站
  7. 小鸟从不怕树枝折断,因为它有翅膀
  8. 2022-2028全球与中国紫外线发生器市场现状及未来发展趋势
  9. window 获取文件md5值dos 脚本
  10. 年薪30万+!卖菜小哥到高薪程序员之路,我的三种人生境界