Brachistochrone:使用变分法找到最快下降曲线

news2024/11/16 17:52:39

一、说明

        对于任何对数学和科学感兴趣的人,您可能已经知道了急速线,因为它经常在各种流行的教学频道(例如 Vsauce 和 3Blue1Brown)上谈论。虽然有多种方法可以解决急速线问题,但在这篇文章中,本文将使用变分法来推导急速线的方程。

        现在,在继续之前,如果有些人不知道什么是急速线,请考虑在空间中有两个点(具有不同的水平垂直位置),并用一些任意曲线连接这两个点,如下所示。

        如果我们让一个球从 A 点滚动,在大多数情况下,它会在一段时间后到达 B 点(假设没有摩擦或空气阻力)。那么问题是,什么曲线形状可以最小化下降时间?虽然人们可能会猜测它只是一条直线,但这根本不正确,事实证明实际形状是我上面已经显示的形状。这就是所谓的“brachistochrone”曲线(来自希腊语“brachistos”和“chronos”,分别表示“最短”和“时间”)。

二、降临之时

        现在我们已经定义了速时线是什么,我们可以尝试推导出代表它的方程。为此,我将使用变分法,这是解决这个问题的自然方法,因为它是一个关于寻找最小化函数的路径的问题。如果你对变分法不太熟悉,可以看看我之前写的这篇文章。

        第一步涉及找到球从A点到B点所需时间的表达式(我现在将其称为 τ),这 可以通过简单地采用以下积分来完成:τ = ∫ dt。然而,这并没有真正帮助我们,因为我们的积分需要我们根本不知道的界限。我们可以做的是利用速度方程v = ds / dt重写这个表达式。重新排列它并将其替换为dt将为我们提供下降时间的新表达式:τ = ∫ ds / v

        虽然我们还不能用这个表达式做任何事情,但我们可以以更方便的方式重写各个术语。从ds项开始,可以使用ds² = dx² + dy²重写。此外,由于x ' = dx / dy我们可以使用ds² = ( x' ² + 1) dy ²。现在,转向速度,我们可以利用能量守恒定律来推导出这个表达式。由于我们是从高点(从静止状态)落下球,因此它的重力势能mg Δ h将转换为动能 1/2 mv ²。如果我们使用下面所示的轴,则曲线上某个点的高度变化 Δ h将是 - y,您可以确认。因此,如果我们替换它并重新排列,我们得到以下速度方程:v ² = -2 gy(请注意,由于曲线位于x轴下方,因此y始终为负值,因此 -2 gy将为正值,即使v真实,因为它应该是)。

        将所有这些信息放在一起,我们将以以下表达式结束从A点到B点所需的时间:

三、推导急速线

        有了这个下降时间的表达式,我们现在可以使用变分法来找到使时间最小化的路径。正如您在上面的表达式中所看到的,我们正在尝试找到一条路径x ( y ),它可以最小化积分的值,这正是我们在变分法中所做的。因此,我们能做的就是使用欧拉-拉格朗日方程,其中函数f是上述积分的被积函数:

        将其代入欧拉-拉格朗日方程得出:

        在第三行中,为了方便起见,我对两边都进行了平方,在最后一行中,我将常数命名为 1/2 a,稍后会用到。然后可以重新排列以获得x'的方程:

        我们现在可以将其与y积分以找到x的表达式。然而,我们需要求解的积分实际上并不那么明显,我们必须使用以下替换来求解:y = -a (1 - cos θ )。这将给出dy = - a sin θ dθ,我们现在可以用它来求解积分:

        (假设我们从原点开始,积分常数将为 0)。虽然从技术上讲我们还没有导出表示曲线的单个函数(例如y ( x ) 或x ( y )),但我们的工作实际上已经完成,因为我们有两个xy参数方程,如下所示:

        如果我们愿意的话,我们实际上可以继续绘制这些参数方程,看看曲线是什么样的(我使用的是 Desmos,但任何其他支持参数方程的图形计算器都可以):

        上面显示的曲线正是我们正在寻找的急速曲线,其形状就是所谓的“摆线”。摆线是在轮子边缘标记一个点并在轮子沿x轴滚动时沿着该点描绘的路径创建的形状(如果搜索“摆线”,您可能会找到动画描述了这一点)。正如我之前展示的,两点之间下降最快的曲线只是该摆线形状的一部分。虽然沿着曲线滚动的球与水平滚动的轮子有任何关系确实很奇怪,但我们通过使用变分法成功地确认了摆线确实是急速曲线。但是,如果您想要以更直观的方式了解急速线和摆线之间的关系,我强烈建议您查看3Blue1Brown 的视频,因为他采用了与我在本文中完全不同的方法。

        感谢您的阅读。

四、参考

     泰勒,JR(2005)。经典力学。大学科学书籍。

坂本健诚

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

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

相关文章

【C++】哈希应用——海量数据面试题

哈希应用——海量数据面试题 一、位图应用1、给定100亿个整数,设计算法找到只出现一次的整数?2、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?(1)用一个位图…

Mac安装nginx(Homebrew)

查看需要安装 nginx 的信息 brew info nginxDocroot 默认为 /usr/local/var/www 在 /opt/homebrew/etc/nginx/nginx.conf 配置文件中默认端口被配置为8080,从而使 nginx 运行时不需要加 sudo nginx将在 /opt/homebrew//etc/nginx/servers/ 目录中加载所有文件 …

Springboot+vue的学生考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的学生考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的学生考勤管理系统,采用M(model&a…

Gin框架--参数接收函数

1.get 请求 穿参数 #根据返回的bool 判断是否正确传值 _p, err : c.GetQuery("pkg") if !err {p.ReError(c, http.StatusBadRequest, "params pkg empty", "")return} #默认值接收方法_p : c.DefaultQuery("pkg", "hmf") …

【java计算机毕设】高校奖学金管理系统 java springmvc vue mysql 送文档+ppt

目录 1.项目功能截图 2.项目简介 3.源码下载地址 1.项目功能截图 2.项目简介 ssm奖学金系统 医院系统 idea mysql5.7/8 tomcat8 html jdk1.8 奖学金管理系统。基于SpringBootVue框架开发,方便学生直观得查看学校奖学金的评选时间、评选资格和评选内容&#xff0…

C语言学习系列->动态内存管理

文章目录 前言概述🚩malloc and free🔜malloc🔜free 🚩calloc and realloc🔜calloc🔜realloc 前言 要想学好数据结构,在C语言学习过程中就需要把指针、结构体和动态内存管理学好。在前面的文章&…

2006-2019年全国30省绿色创新效率、绿色投资效率:基于SBM-DEA测算面板数据(数据+Stata代码)

1、来源:各省年鉴、统计局、科技年鉴 2、时间:2006-2019 3、范围:全国 30 个省份 4、指标: 原始数据指标:R&D 全时人员当量 (万人年)、R&D 资本存量 (亿元;利用以 1999 年为初期永续存量法&a…

css之Flex弹性布局(父项常见属性)

文章目录 🐕前言:🏨定义flex容器 display:flex🏨在flex容器中子组件进行排列🪂行排列 flex-direction: row🪂将行排列进行翻转排列 flex-direction: row-reverse🏅按列排列 flex-direction: col…

postman自动化运行接口测试用例

做过接口测试的人,应该都知道postman ,我们在日常的时候都可以利用postman做接口测试,我们可以把接口的case保存下来在collection里面,那么可能会有这样的需求,我们怎么把collection的用例放到jenkins中定时执行呢&…

C++STL的迭代器(iterator)

一、定义 迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。 【引用自:C迭代器(iterator)_c iterator_NiUoW的博客-CSDN博客】迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C更趋向于使用迭代器而不是数组下…

【GESP】2023年06月图形化三级 -- 自幂数判断

文章目录 自幂数判断【题目描述】【输入描述】【输出描述】【参考答案】其他测试用例 自幂数判断 【题目描述】 自幂数是指N位数各位数字N次方之和是本身,如153是3位数,其每位数的3次方之和是153本身,因此153是自幂数,1634是4位数…

STM32进行LVGL裸机移植

本文的移植参考的是正点原子的课程《手把手教你学LVGL图形界面编程》 基于该课程和《LVGL开发指南_V1.3》“第二章 LVGL 无操作系统移植”,然后结合自身的实际情况进行整理。 先根据自己的习惯,创建基础的单片机工程,然后在APP业务层和DRIVE…

cdm解决‘ping‘ 或者nslookup不是内部或外部命令,也不是可运行的程序或批处理文件的问题

当我们在执行cmd时,会出现不是内部或外部命令,也不是可运行的程序的提示。 搜索环境变量 点开高级 >> 环境变量 打开Path,看是否在Path变量值中存在以下项目: %SystemRoot%/system32; %SystemRoot%; %SystemRoot%/Syste…

【JVM系列】- 探索·运行时数据区的私有结构

探索运行时数据区的私有结构 文章目录 探索运行时数据区的私有结构运行时数据区的结构与概念认识线程了解守护线程和普通线程JVM系统线程 程序计数器(PC寄存器)概述PC寄存器的特点PC寄存器的作用 透过案例了解寄存器为什么需要用PC寄存器来存放字节码的指…

C语言基础-循环与数组

目录 循环 while 循环: for 循环: do while 循环: 中断循环: break continue: 数组 数组:用来装一组数的类型。声明形式如下: 定义数组类型变量: 下标:即各元素…

初出茅庐的小李博客之ESP8266获取自己B站粉丝数据

获取方式 ESP8266发起HTTP请求解析json数据 获取粉丝API: https://api.bilibili.com/x/relation/stat?vmid349513188API浏览器测试返回结果 {"code": 0,"message": "0","ttl": 1,"data": {"mid": 349513188, …

Python+Appium实现自动化测试

一、环境准备 1.脚本语言:Python3.x IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows,官网地址 Redirecting 点击下载按钮会到GitHub的…

【safetensor】介绍和基础代码

Hugging Face, EleutherAI, StabilityAI 用的多 介绍 文件形式 header,体现其特性。如果强行将pickle或者空软连接 打开,会出现报错。解决详见:debug 连接到其他教程结构和参数 安装 with pip:Copied pip install safetensors with con…

阶段六-Day05-MyBatis3

一、多表查询(面试题) 1. 介绍 多表查询是在企业中必不可少的,无论多么简单的项目里通常会出现多表查询的操作。因为只要是关系型数据库,在设计表时都需要按照范式进行设计,为了减少数据冗余,都会拆成多个…

String、StringBuffer、StringBuilder 适合的应用场景

文章目录 String适用场景示例代码 StringBuffer适用场景示例代码 StringBuilder适用场景示例代码 性能比较总结 🎉欢迎来到Java学习路线专栏~String、StringBuffer、StringBuilder 适合的应用场景 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&#xff…