Python和MATLAB粘性力接触力动态模型半隐式欧拉算法

🎯要点

🎯运动力模型计算制作过程:🖊相机捕捉网球运动图,制定运动数学模型,数值微分运动方程 | 🖊计算运动,欧拉算法离散积分运动,欧拉-克罗默算法微分运动方程

🎯粘性力模型计算制作过程:🖊绘制雨滴、环境和坐标系下落自由体草图,使用牛顿第二定律制定运动数学模型,定义无空气阻力和恒速简化数学模型,数值模型解析

🎯固体-固体接触力模型计算制作过程:🖊实验绘制悬块弹簧形变量图,使用牛顿第二定律制定平衡模型,定义无空气阻力简化数学模型,欧拉-克罗默算法数值求解,制作三维动态可视图

🎯移动物体间复合力模型计算制作过程:🖊实验绘制电梯,物重和人自由体图,模型使用牛顿第三定律确定力对和牛顿第二定律确定图中运动体,解析无运动和相对运动简化力模型

🎯龙卷风、弹跳球和河流上船只三维运动力模型计算制作过程 | 🎯加速实验车、旋转杆、圆周运动,风中的珠子和地震期间的振荡中约束运动力模型计算制作过程

📜物理学和数学模型用例 | 本文

📜物理数学波形方程:Python数值和符号算法计算及3D视图物理数学波形方程

📜物理数学热力学静电学和波动方程:Python和C++数学物理计算分形热力学静电学和波动方程

📜物理数学拉格朗日和哈密顿动力学:Python计算物理粒子及拉格朗日和哈密顿动力学

📜物理数学气体动能和粒子速度:MATLAB和Python数值和符号计算可视化物理学气体动能和粒子速度

📜物理统计推理模型:Python射频电磁肿瘤热疗数学模型和电磁爆炸性变化统计推理模型

📜物理数学流体力学:C++风流和MATLAB | Python | CUDA 库埃特流泊肃叶流薄膜流体

📜物理数学气体运动模型:C++ | Python气泡表面张力和预期形态及上升速度数值模型
在这里插入图片描述
在这里插入图片描述

🍇Python半隐式欧拉方法

在数学中,半隐式欧拉方法也称为辛欧拉、半显式欧拉、欧拉-克罗默和牛顿-斯托默-韦莱,是欧拉方法的一种改进,用于求解哈密顿方程,哈密顿方程是经典力学中出现的常微分方程组。半隐式欧拉方法是一种辛积分器,因此比标准欧拉方法能得到更好的结果。

半隐式欧拉方法可以应用于一对以下形式的微分方程:
d x d t = f ( t , v ) d v d t = g ( t , x ) \begin{aligned} & \frac{d x}{d t}=f(t, v) \\ & \frac{d v}{d t}=g(t, x) \end{aligned} dtdx=f(t,v)dtdv=g(t,x)
其中 f f f g g g 是给定函数。这里, x x x v v v可以是标量或向量。如果哈密顿量具有以下形式,则哈密顿力学中的运动方程采用这种形式
H = T ( t , v ) + V ( t , x ) H=T(t, v)+V(t, x) H=T(t,v)+V(t,x)
微分方程需在初始条件下求解
x ( t 0 ) = x 0 , v ( t 0 ) = v 0 x\left(t_0\right)=x_0, \quad v\left(t_0\right)=v_0 x(t0)=x0,v(t0)=v0

欧拉方法对于振荡系统存在一个根本问题。再看一下欧拉方法的近似,得到下一个时间间隔的位置:
x ( t i + Δ t ) ≈ x ( t i ) + v ( t i ) Δ t x\left(t_i+\Delta t\right) \approx x\left(t_i\right)+v\left(t_i\right) \Delta t x(ti+Δt)x(ti)+v(ti)Δt
它使用时间间隔开始时的速度值来将解逐步推向未来。

由于欧拉方法通过线性近似将解投影到未来,并假设区间开始时的导数值,因此它对于振荡函数来说不是很好。改进欧拉方法的一个聪明的想法是使用第二个方程的导数的更新值。

纯欧拉方法适用:
x ( t 0 ) = x 0 , x i + 1 = x i + v i Δ t v ( t 0 ) = v 0 , v i + 1 = v i − ω 2 x i Δ t \begin{aligned} x\left(t_0\right)=x_0, & x_{i+1}=x_i+v_i \Delta t \\ v\left(t_0\right)=v_0, & v_{i+1}=v_i-\omega^2 x_i \Delta t \end{aligned} x(t0)=x0,v(t0)=v0,xi+1=xi+viΔtvi+1=viω2xiΔt
如果在 v v v 的方程中您使用了刚刚计算的值 x i + 1 x_{i+1} xi+1 会怎样?像这样:
x ( t 0 ) = x 0 , x i + 1 = x i + v i Δ t v ( t 0 ) = v 0 , v i + 1 = v i − ω 2 x i + 1 Δ t \begin{aligned} & x\left(t_0\right)=x_0, \quad x_{i+1}=x_i+v_i \Delta t \\ & v\left(t_0\right)=v_0, \quad v_{i+1}=v_i-\omega^2 x_{i+1} \Delta t \\ & \end{aligned} x(t0)=x0,xi+1=xi+viΔtv(t0)=v0,vi+1=viω2xi+1Δt
请注意第二个方程右侧的 x i + 1 x_{i+1} xi+1:这是更新后的值,给出时间间隔结束时的加速度。这种修改后的方案称为欧拉-克罗默方法。

代码实现:

def euler_cromer(state, rhs, dt):
  
    mid_state = state + rhs(state)*dt # Euler step
    mid_derivs = rhs(mid_state)       # updated derivatives
    
    next_state = np.array([mid_state[0], state[1] + mid_derivs[1]*dt])
    
    return next_state

模拟数据

w = 2
period = 2*np.pi/w
dt = period/200  
T = 800*period  
N = round(T/dt)

print('The number of time steps is {}.'.format( N ))
print('The time increment is {}'.format( dt ))

t = np.linspace(0, T, N)

x0 = 2    
v0 = 0    

num_sol = np.zeros([N,2])
num_sol[0,0] = x0
num_sol[0,1] = v0

for i in range(N-1):
    num_sol[i+1] = euler_cromer(num_sol[i], springmass, dt)

The number of time steps is 160000. The time increment is 0.015707963267948967

首先,得到解析解。然后,您选择绘制振荡运动的前几个周期:数值和解析。

x_an = x0*np.cos(w * t)
iend = 800 
fig = plt.figure(figsize=(6,4))
plt.plot(t[:iend], num_sol[:iend, 0], linewidth=2, linestyle='--', label='Numerical solution')
plt.plot(t[:iend], x_an[:iend], linewidth=1, linestyle='-', label='Analytical solution')
plt.xlabel('Time [s]')
plt.ylabel('$x$ [m]')
plt.title('Spring-mass system, with Euler-Cromer method.\n');

该图显示,欧拉-克罗默不存在振幅增大的问题。从这个意义上讲,你应该对此感到满意。但是,如果你绘制一段较长模拟的末尾,你就会发现它确实开始偏离解析解。

istart = 400

fig = plt.figure(figsize=(6,4))

plt.plot(t[-istart:], num_sol[-istart:, 0], linewidth=2, linestyle='--', label='Numerical solution')
plt.plot(t[-istart:], x_an[-istart:], linewidth=1, linestyle='-', label='Analytical solution')
plt.xlabel('Time [s]')
plt.ylabel('$x$ [m]')
plt.title('Spring-mass system, with Euler-Cromer method. \n');

观察一段很长的运行中的最后几次振荡,即使时间增量很小,也会发现轻微的相位差。因此,尽管欧拉-克罗默方法解决了欧拉方法的一个大问题,但它仍然存在一些错误。它仍然是一阶方法!

👉参阅:计算思维 | 亚图跨际

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VSCode + GDB + J-Link 单片机程序调试实践

VSCode GDB J-Link 单片机程序调试实践 本文介绍如何创建VSCode的调试配置,如何控制调试过程,如何查看修改各种变量。 安装调试插件 在 VSCode 扩展窗口搜索安装 Cortex-Debug插件 创建调试配置 在 Run and Debug 窗口点击 create a launch.json …

05 threeJs基础---阵列立方体和相机适配体验立方体

1.增加相机视角fov 注: 范围更大,意味着可以看到渲染范围更大,远小近大的视觉效果更明显 fov:眼球张开的角度,0时相当于闭眼。aspect:可视区域横纵比。near:眼睛能看到的最近垂直距离。far:眼睛能看到的最远垂直距离。…

12-Django项目--Ajax请求三

目录 路由 添加与编辑 视图函数 perform_list.html 路由 添加与编辑 视图函数 perform_list.html {% endblock %}{% block js %}<script>var DELETE_ID undefined;var MODIFY_ID undefined;$(function () {bindBtnAdd();bindBtnSave();bindBtnDelete();bindBtnDelet…

ESP32-S3[Wire.cpp:513] requestFrom(): i2cRead returned Error -1报错问题

前言&#xff1a; esp32本来是用的ESPWroom32&#xff0c;连接NFC模块&#xff0c;测试完功能是没有问题的&#xff0c;但是换成ESP32-S3&#xff0c;就会报这个错。 报错代码 EPSWroom32 ESP32-S3 解决办法 其实问题就出再ESP32-S3要多一步初始化I2C的代码&#xff0c;初始…

跟《经济学人》学英文:2024年6月22日这期 The exponential growth of solar power

The exponential growth of solar power will change the world An energy-rich future is within reach 原文&#xff1a; It is 70 years since AT&T’s Bell Labs unveiled a new technology for turning sunlight into power. The phone company hoped it could rep…

Python pip install模块时C++编译环境问题

pip install模块时C编译环境问题 在接触和使用python后&#xff0c;常常会通过pip install命令安装第三方模块&#xff0c;大多数模块可以直接安装&#xff0c;但许多新同学仍会遇见某些模块需要实时编译后才能安装&#xff0c;如报错信息大概是缺乏C编译环境&#xff0c;本文则…

黄子韬揭秘徐艺洋与EXO的不解之缘

黄子韬揭秘&#xff1a;徐艺洋与EXO的不解之缘在娱乐圈的繁华与喧嚣中&#xff0c;总有一些不为人知的故事&#xff0c;它们或温馨、或励志&#xff0c;或是感叹命运的奇妙。近日&#xff0c;黄子韬在一档热门综艺节目中意外爆料&#xff0c;揭开了徐艺洋与EXO之间鲜为人知的秘…

认识100种电路之放大电路

在电子技术的广袤世界中&#xff0c;放大电路犹如一颗璀璨的明珠&#xff0c;发挥着至关重要的作用。那么&#xff0c;为什么电路需要放大&#xff1f;放大的原理又是什么&#xff1f;实现放大又需要用到哪些元器件以及数量如何呢&#xff1f;接着往下看&#xff0c;会解开你的…

企业im(即时通讯)作为安全专属的移动数字化平台的重要工具

企业IM即时通讯作为安全专属的移动数字化平台的重要工具&#xff0c;正在越来越多的企业中发挥着重要的作用。随着移动技术和数字化转型的发展&#xff0c;企业对于安全、高效的内部沟通和协作工具的需求也越来越迫切。本文将探讨企业IM即时通讯作为安全专属的移动数字化平台的…

【Python系列】Python 项目 Docker 部署指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

常微分方程算法之编程示例五(阿当姆斯法)

目录 一、研究问题 二、C++代码 三、计算结果 一、研究问题 本节我们采用阿当姆斯法(Adams法)求解算例。 阿当姆斯法的原理及推导请参考: 常微分方程算法之阿当姆斯法(Adams法)_四步四阶adams显格式;三步四阶adams隐格式;四阶adams预估-校正格式-CSDN博客https://blog…

Installed Build Tools revision xxx is corrupted. Remove and install again 解决

1.在buildTools文件下找到对应的sdk版本&#xff0c;首先将版本对应目录下的d8.bat改名为dx.bat。 2.在lib文件下将d8.jar改名为dx.jar。 3.重新编译工程即可

Django-开发一个列表页面

需求 基于ListView,创建一个列表视图,用于展示"BookInfo"表的信息要求提供分页提供对书名,作者,描述的查询功能 示例展示: 1. 数据模型 models.py class BookInfo(models.Model):titlemodels.CharField(verbose_name"书名",max_length100)authormode…

vscode中快捷生成自定义vue3模板

需求描述 新建 vue 文件后&#xff0c;需要先写出 vue3 的基础架构代码&#xff0c;手动输入效率低下&#xff01; 期待&#xff1a;输入 v3 按 Tab 即刻生成自定义的vue3模板&#xff08;如下图&#xff09; 实现流程 vscode 的设置中&#xff0c;选择 用户代码片段 输入 vue…

基于STM32的温湿度检测TFT屏幕proteus恒温控制仿真系统

一、引言 本文介绍了一个基于STM32的恒温控制箱检测系统&#xff0c;该系统通过DHT11温湿度传感器采集环境中的温湿度数据&#xff0c;并利用TFT LCD屏幕进行实时显示。通过按键切换页面显示&#xff0c;通过按键切换实现恒温控制箱的恒温控制。为了验证系统的可靠性和稳定性&…

密室逃脱——收集版

一、原版修改 1、导入资源 Unity Learn | 3D Beginner: Complete Project | URP 2、设置Scene 删除SampleScene&#xff0c;打开UnityTechnologies-3DBeginnerComplete下的MainScene 3、降低音量 (1) 打开Hierarchy面板上的Audio降低音量 (2) 打开Prefabs文件夹&#xf…

使用 PyQt5 创建一个数字时钟

使用 PyQt5 创建一个数字时钟 效果代码解析定义时钟类初始化界面显示时间 完整代码 在这篇博客中&#xff0c;我们将使用 PyQt5 创建一个简单的数字时钟。 效果 代码解析 定义时钟类 class ClockWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTit…

Swift宏的实现

上篇介绍了Swift宏的定义与生声明&#xff0c;本篇主要看看是Swift宏的具体实现。结合Swift中Codable协议&#xff0c;封装一个工具让类或者结构体自动实现Codable协议&#xff0c;并且添加一些协议中没有的功能。 关于Codable协议 Codable很好&#xff0c;但是有一些缺陷&…

Redis基础教程(三):redis命令

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

仓库管理系统11--物资设置

1、添加用户控件 <UserControl x:Class"West.StoreMgr.View.GoodsTypeView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.openxm…