如何用Python求解微分方程组

news2025/7/11 15:16:47

文章目录

    • odeint简介
    • 示例

odeint简介

scipy文档中将odeint函数和ode, comples_ode这两个类称为旧API,是scipy早期使用的微分方程求解器,但由于是Fortran实现的,尽管使用起来并不方便,但速度没得说,所以有的时候还挺推荐使用的。

其中,odeint的参数如下

scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0, tfirst=False)

其中func为待求解函数;y0为初值;t为自变量列表,其他参数都有默认选项,可以不填,而且这些参数非常多,其中常用的有

  • args func中除了t之外的其他变量
  • Dfun func的梯度函数,当此参数不为None时,若将col_deriv设为True,则可提升效率。
  • full_output 如果为True,则额外返回一个参数字典
  • ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5,
  • printmessgTrue时打印信息。
  • tfirst 当为False时,func的格式为func(y,t...),否则格式为func(t, y...)

示例

对于常微分方程

θ ′ ′ ( t ) + b θ ′ ( t ) + c sin ⁡ θ ( t ) = 0 b = 0.25 ; c = 5 θ ( 0 ) = π − 0.1 ; θ ′ ( 0 ) = 0 \theta''(t)+b\theta'(t)+c\sin\theta(t)=0\\ b=0.25;\quad c=5\\ \theta(0)=\pi-0.1;\quad \theta'(0)=0 θ′′(t)+bθ(t)+csinθ(t)=0b=0.25;c=5θ(0)=π0.1;θ(0)=0

将其中的二阶导数项用一个新变量替代, ω ( t ) = θ ′ ( t ) \omega(t)=\theta'(t) ω(t)=θ(t),则常微分方程可拆分成微分方程组

θ ′ ( t ) = ω ( t ) ω ′ ( t ) = − b ω ( t ) − c sin ⁡ θ ( t ) \begin{aligned} \theta'(t)&=\omega(t)\\ \omega'(t)&=-b\omega(t)-c\sin\theta(t) \end{aligned} θ(t)ω(t)=ω(t)=(t)csinθ(t)

y = [ θ , ω ] y=[\theta, \omega] y=[θ,ω],则 y ′ = [ θ ′ , ω ′ ] y'=[\theta', \omega'] y=[θ,ω],据此可设计函数func

import numpy as np
def pend(y, t, b, c):
    th, om = y
    dydt = [om, -b*om - c*np.sin(th)]
    return dydt

然后调用并求解

from scipy.integrate import odeint
y0 = [np.pi-0.1, 0]
t = np.linspace(0, 10, 101)
sol = odeint(pend, y0, t, args=(0.25, 5))

然后绘制一下结果

import matplotlib.pyplot as plt
plt.plot(t, sol[:,0], label="theta")
plt.plot(t, sol[:,1], label="omega")
plt.legend()
plt.show()

在这里插入图片描述

这个形状还是比较离奇的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/406239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript基础(详细总结)

目录 1、JavaScript简介 1.2、JavaScript的发展史 1.3、JavaScript的功能 1.4、JavaScript的特点 1.5、JavaScript组成 2、JavaScript基础语法 2.1、HTML引入JS 2.1.1、内部引入 2.1.2、外部引入 2.2、JS输出数据的三种方式 2.2.1、浏览器弹窗 2.2.2、输出HTML页面…

IDEA实现前端页面登录,注册、增、删、改、查操作-完整版

分层思想:entity层:存放实体类vo层:消息模型(重复使用的一些属性)mapper层:接口(写方法的)mapper.xml:MyBatis与数据库相关的一些内容controller(web)层:接收前端传回的参…

谈谈ES5和ES6的区别

我们都知道JavaScript是由三部分组成: 1. ECMAScript(核心):规定了语言的组成部分>语法、类型、语句、关键字、保留字、操作符、对象 2. BOM(浏览器对象模型): 支持访问和操作浏览器窗口,可以控制浏览器显示页面以外的部分。 3. DOM(文…

基于Python构建机器学习Web应用

目录 一、内容介绍 1.Onnx模型 ①skl2onnx库安装 2.Netron安装 二、模型构建 1.数据加载 2.划分可训练特征与预测标签 3.训练模型 ①第三方库导入 ②数据集划分 ③SVC模型构建 ④精度评价 二、模型转换及可视化 1.参数配置 2.Onnx模型生成 3.可视化模型 四、构…

报错ValidationError: Progress Plugin Invalid Options

背景:我改了文件的名字 他很多配置都没有了 我只能重新来 中途删了删掉node_modules和package-lock.json 也找了很多方法来重复配置着两个文件 最快的方法是 npm i -D vue 后面复原了之后又出现了很多问题 一直困恼我的是下面那个图片内容 背景:他…

Java Web入门 Web环境的搭建

文章目录 一、JDK开发工具包 a、下载JDK b、如何安装 c、配置Java环境变量。 d、测试环境变量是否安装成功 二、下载Tomcat服务器 a、Tomcat是什么?为啥要用它? b、如何下载 c、了解Tomcat的目录 d、如何知道自己Tomcat服务器有没有问题呢&#…

在 js 中,reduce() 的详解 以及使用方法

reduce(): reduce()方法为归并类方法,最常用的场景就是,计算数组中的每一项的总和。 reduce() 方法会遍历数组的每一项,他接收两个参数: 第一个…

22.信息系统安全管理-策略7定.方案.安全体系架构.PKI.PMI

信息系统的安全威胁分成七类,从风险源的角度划分,可以将安全威胁划分为:自然事件风险、人为事件风险、软件风险、软件过程风险、项目管理风险、应用风险、用户使用风险。 信息系统安全四个层次:设备安全、数据安全、内容安全、行为安全。数据…

vite打包配置(静态资源合并打包/清除log/gzip压缩/ENV配置等)

2022/6/2更新 传了一下本项目代码,文章里写到的基本都有用到,可以clone了看一下 下载地址https://github.com/shinjie1210/vite-config.git---------------------------------------------------------------------------------------------------------------------------- …

基于vue的uni-app生态——学习笔记001

目录 vue的简介 什么是vue.js vue相比传统的js开发优势有哪些 vue的优势 与传统的开发文件相比的类型变换 与传统的开发相比开发文件内部架构的变化 uni-app生态(编辑器的使用) 编辑器的下载 编辑器的使用 基于vue开发的uni-app生态的文件结构…

CANoe中使用CAPL刷写流程详解(Trace图解)(CAN总线)

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

Vue初入,了解Vue的发展与优缺点

作者简介:一名计算机萌新、前来进行学习VUE,让我们一起进步吧。 座右铭:低头赶路,敬事如仪 个人主页:我叫于豆豆吖的主页 前言 从本章开始进行Vue前端的学习,了解Vue的发展,以及背后的故事。 一.vue介…

一、Django基础介绍

一、Django介绍 Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 …

【Spring Cloud Alibaba】(二)微服务调用组件Feign原理+实战

系列目录 【Spring Cloud Alibaba】(一)微服务介绍 及 Nacos注册中心实战 本文目录系列目录前言什么是RPC?Feign和OpenFeign都是什么?HTTP调用 vs Feign(RPC)调用单独使用Feign实战Feign核心源码解读Feign整体设计架构Spring Clo…

学生为什么要在CSDN写博客?

学生为什么要在CSDN写博客?引言写博客的好处构建知识体系提升写作能力扩展人脉为简历加分帮助他人为什么是CSDN如何写博客记录学习总结错误总结与展望引言 就目前来说,学生应该是使用各种博客最多的人,但却不是写博客的主体。在我看来&#…

软考-软件设计师 知识点整理(一篇就过了 建议收藏)

文章目录一 计算机组成CPU寻址方式校验码奇偶校验码(只能检一位错,并且不能纠错)循环冗余校验码CRC(只能检错,不能纠错)海明码计算机体系结构分类Flynn分类法(理论存在:多指令单数据…

我用Python写了一个下载网站所有内容的软件,可见即可下,室友表示非常好用

Python 写一个下载网站内容的GUI工具,所有内容都能下载,真的太方便了!前言本次要实现的功能效果展示代码实战获取数据GUI部分最后前言 哈喽大家好,我是轻松。 今天我们分享一个用Python写下载视频弹幕评论的代码。 之前自游写了…

VMware17虚拟机:下载和安装教程

签名:但行好事,莫问前程。 文章目录前言一、VMware虚拟机是什么?二、如何下载VMware虚拟机?1.打开VMware官方网站2.找到VMware17下载地址三、安装VMware17虚拟机1.双击exe文件2.点击下一步3.勾选许可协议,点击下一步4.…

Java单元测试介绍

文章目录单元测试单元测试基本介绍单元测试快速入门单元测试常用注解单元测试 单元测试基本介绍 单元测试: 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进…

Error: EPERM: operation not permitted, mkdir ‘D:\software\nodejs\node_cache\_cacach两种解决办法

目录 报错情况:operation not permitted, mkdir ‘D:\software\nodejs\node_cache\_cacach 解决办法: 第一种:选择管理员身份运行命令行 第二种:node安装目录下设置users用户完全控制权限 报错情况:operation not …