当前位置: 首页 > java >正文

在Mathematica中,使用鸟枪法求解在无穷远处的边值常微分方程

边界值问题最简单的例子是定义在区间a ≤ x ≤ b上的二阶常微分方程y′′ = f (x, y, y′),其边界条件为y(a) = α和y(b) = β,其中α和β是给定的常数。需要注意的是,由于自变量通常表示空间坐标,因此常用x表示(此处符号'≡d/dx)。
我们将探讨几种计算上述二阶边值问题解的方法。第一种方法利用时间步进算法(注意此处"时间"指代x变量),具体步骤如下:
步骤分解
  1. 方程转换将y′′ = f (x, y, y′)改写为一阶常微分方程组:u′ = f (x, u),其中u = (y, y′)ᵀ(符号ᵀ表示列向量转置)
  2. 初值问题求解
  • 选取初始斜率S作为y′(a)的猜测值
  • 使用时间步进算法求解初值问题:u′ = f (x, u),初始条件u(a) = (α, S)ᵀ从x = a积分至x = b
  • 检查x = b处的解值:
    • 若计算值大于目标值β → 初始斜率S导致过冲
    • 若计算值小于目标值β → 初始斜率S导致欠冲
  1. 斜率范围确定
  • 找到另一个初始斜率值,使其在x = b处产生相反的过冲/欠冲现象
  • 此时获得两个初始斜率值S₁和S₂,分别对应过冲和欠冲
  1. 根查找算法应用设̃y(x; S)表示使用初始斜率S计算的近似解,本质上是寻找使表达式̃y(b; S) - β为零的根S*。由于:
  • ̃y(b; S) - β的显式公式通常未知
  • 但已知根S*位于S₁和S₂之间因此适合使用以下方法:
  • 二分法(利用区间套原理)
  • 割线法(基于线性插值)来迭代求解满足边界条件的初始斜率S*
(*Define a finite version of "infinity"*)
inf = 5;(*Define the differential equation and its initial conditions, parameterized by the initial gradient y'[0] == dy0. For simplicity, set y[0] == 1*)
deqn = {y''[x] - x y[x] == 0, y[0] == 1, y'[0] == dy0};(*Compute the numerical solution parameterised by dy0*)
ydysol = ParametricNDSolve[deqn, y, {x, 0, inf}, dy0][[1]](*Find the value of the initial gradient dy0 that makes the solution go to zero at "infinity".  choose to minimise y[inf]^2 w.r.t. dy0*)
dysol = FindMinimum[((y[dy0] /. ydysol)[inf])^2 // Evaluate, {dy0, -1}]
(*{7.51024*10^-27, {dy0 -> -0.729012}}*)Plot[(y[dy0] /. ydysol /. dysol[[2]])[x] // Evaluate, {x, 0, inf}]

http://www.xdnf.cn/news/8735.html

相关文章:

  • 动态规划算法:字符串类问题(2)公共串
  • 简单血条于小怪攻击模板
  • 【Linux】深刻理解OS管理
  • Java 8 Stream操作示例
  • 《仿盒马》app开发技术分享-- 原生地图展示(端云一体)
  • 【Python】1. 基础语法(1)
  • webpack优化方法
  • 学习日记-day15-5.25
  • 云原生安全之HTTP协议:从基础到实战的安全指南
  • JavaSE核心知识点03高级特性03-05(注解)
  • 后经济时代开源链动2+1模式AI智能名片S2B2C商城小程序驱动零售企业转型研究
  • JAVA 项目中 maven pom.xml 和 properties 配置文件、spring 配置文件,以及环境变量的关系
  • 《STL--list的使用及其底层实现》
  • 基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统
  • Win11 系统登入时绑定微软邮箱导致用户名欠缺
  • 【TDengine源码阅读】taosMemoryDbgInit函数
  • 基于MATLAB实现传统谱减法以及两种改进的谱减法(增益函数谱减法、多带谱减法)的语音增强
  • 全面理解类和对象(下)
  • 5.25本日总结
  • 计算机网络-WebSocket/DNS/Cookie/Session/Token/Jwt/Nginx
  • DAY36
  • GitLab-CI简介
  • 单链表的排序
  • Collection集合遍历的三种方法
  • multiprocessing多进程使用案例
  • 用神经网络对信贷项目进行预测
  • java三种常见设计模式,工厂、策略、责任链
  • 原生php单元测试
  • bun全栈开发尝鲜:用bun-react-template实现Markdown文章展示
  • removeIf() 方法,结合 Lambda 表达式