【数学建模】微分方程的数值求解

微分方程的数值求解

  • 一阶差分求解微分方程原理:
  • 四阶龙格-库塔方法
    • 应用:小船渡河问题:
  • 进阶求二阶微分方程

一阶差分求解微分方程原理:

d y d x = f ( x n , y n ) \dfrac{dy}{dx}=f(x_n,y_n) dxdy=f(xn,yn)

y n + 1 − y n x n + 1 − x n = f ( x n , y n ) \dfrac{y_{n+1}-y_n}{x_{n+1}-x_n}=f(x_n,y_n) xn+1xnyn+1yn=f(xn,yn)

h = x n + 1 − x n h = x_{n+1} - x_n h=xn+1xn

y n + 1 = y n + h f ( x n , y n ) y_{n+1}=y_n+hf(x_n,y_n) yn+1=yn+hf(xn,yn)

例子:
{ d y d x = x y y 0 = 1 \begin{cases} \dfrac{dy}{dx}=xy\\ y_0 = 1 \end{cases} dxdy=xyy0=1

通过高等数学可以求得解析解为: y = e 1 2 x 2 y=e^{\frac{1}{2}x^2} y=e21x2

如果通过一阶差分求解
{ y n + 1 = y n + h x n y n x n + 1 = x n + h y 0 = 1 x 0 = 0 \begin{cases} y_{n+1}=y_n+hx_ny_n\\ x_{n+1}=x_n+h\\ y_0 = 1\\ x_0 = 0 \end{cases} yn+1=yn+hxnynxn+1=xn+hy0=1x0=0

matlab求解:

y = zeros(1,1000);
x = zeros(1,1000);
y(1)=1;
x(1)=0;
h=0.1;for n=1:1000y(n+1)=y(n)+h*x(n)*y(n);x(n+1)=x(n)+h;
end
plot(x,y,'-');
xlim([0,6]);
ylim([0,100]);

在这里插入图片描述
如果再加上解析解

y = zeros(1,1000);
x = zeros(1,1000);
y(1)=1;
x(1)=0;
h=0.1;for n=1:1000y(n+1)=y(n)+h*x(n)*y(n);x(n+1)=x(n)+h;
end
plot(x,y,'-');
hold on;
ezplot('exp(x^2/2)');
xlim([0,6]);
ylim([0,100]);

在这里插入图片描述
h=0.01如下图
在这里插入图片描述

四阶龙格-库塔方法

原理/公式
在这里插入图片描述

优点:精度高

ezplot('exp(x^2/2)');
hold on;
%四阶龙格-库塔方法
y = zeros(1,1000);
x = zeros(1,1000);
y(1)=1;
x(1)=0;
h=0.1;
for n=1:1000k1 = h*(x(n)*y(n));%h*f(x(n),y(n))k2 = h*((x(n)+h/2)*(y(n)+k1/2));%h*f(x(n)+h/2,y(n)+k1/2)k3 = h*((x(n)+h/2)*(y(n)+k2/2));%h*f(x(n)+h/2,y(n)+k2/2)k4 = h*((x(n)+h)*(y(n)+k3));%h*f(x(n)+h,y(n)+k3)y(n+1)=y(n)+(1/6)*(k1+2*k2+2*k3+k4);y(1)=1;x(n+1)=x(n)+h;
end
plot(x,y,'-');
xlim([0,6]);
ylim([0,100]);

在这里插入图片描述
细看是两条线
在这里插入图片描述

应用:小船渡河问题:

河宽100米,A(0,100) , O(0,0),水流速 V 1 V_1 V1,小船速度 V 2 V_2 V2,水流速度始终垂直OA并向下流冲(方向不变)
从O到A点,求轨迹路线图和时间
V 2 V_2 V2平行的相量 ( − x , 100 , − y ) (-x,100,-y) (x,100,y)

c o s θ = − x x 2 + ( 100 − y ) 2 cos_{\theta} = \dfrac{-x}{\sqrt{x^2}+(100-y)^2} cosθ=x2 +(100y)2x

s i n θ = 100 − y x 2 + ( 100 − y ) 2 sin_{\theta} = \dfrac{100-y}{\sqrt{x^2}+(100-y)^2} sinθ=x2 +(100y)2100y

{ d y d t = V 2 s i n θ d x d t = X 1 + V 2 c o s θ \begin{cases} \dfrac{dy}{dt}=V_2sin_{\theta}\\ \dfrac{dx}{dt}=X_1+V_2cos_{\theta} \end{cases} dtdy=V2sinθdtdx=X1+V2cosθ

d y d x = V 2 s i n θ V 1 + V 2 c o s θ = V 2 ( 100 − y ) x 2 + ( 100 − y ) 2 V 1 − V 2 x \dfrac{dy}{dx}=\dfrac{V_2sin_{\theta}}{V_1+V_2cos_{\theta}}=\dfrac{V_2(100-y)}{\sqrt{x^2+(100-y)^2}V_1-V_2x} dxdy=V1+V2cosθV2sinθ=x2+(100y)2 V1V2xV2(100y)

因为 x x x变量随着 y y y增大有增有减,而 y y y变量随着 x x x增大有递增,所以 y y y为自变量可以求解

变换后:
d x d y = V 1 + V 2 c o s θ V 2 s i n θ = x 2 + ( 100 − y ) 2 V 1 − V 2 x V 2 ( 100 − y ) \dfrac{dx}{dy}=\dfrac{V_1+V_2cos_{\theta}}{V_2sin_{\theta}}=\dfrac{\sqrt{x^2+(100-y)^2}V_1-V_2x}{V_2(100-y)} dydx=V2sinθV1+V2cosθ=V2(100y)x2+(100y)2 V1V2x

x 0 = y 0 = 0 x_0 = y_0 = 0 x0=y0=0

y = zeros(1,1000);
x = zeros(1,1000);
x(1)=0;
y(1)=0;
v1=30;
v2=200;
h=0.1;
%差分求解轨迹
for n=1:1000 %1000*h = 100x(n+1)=x(n)+h*((sqrt(x(n)^2+(100-y(n))^2)*v1-v2*x(n))/(v2*(100-y(n))));y(n+1)=y(n)+h;
endplot(x,y,'-');
hold on;
%四阶龙格-库塔方法求轨迹
y = zeros(1,1000);
x = zeros(1,1000);
x(1)=0;
y(1)=0;
for n=1:1000k1 = h*((sqrt(x(n)^2+(100-y(n))^2)*v1-v2*x(n))/(v2*(100-y(n))));%h*f(x(n),y(n))k2 = h*((sqrt((x(n)+h/2)^2+(100-(y(n)+k1/2))^2)*v1-v2*(x(n)+h/2))/(v2*(100-(y(n)+k1/2))));%h*f(x(n)+h/2,y(n)+k1/2)k3 = h*((sqrt((x(n)+h/2)^2+(100-(y(n)+k2/2))^2)*v1-v2*(x(n)+h/2))/(v2*(100-(y(n)+k2/2))));%h*f(x(n)+h/2,y(n)+k2/2)k4 = h*((sqrt((x(n)+h)^2+(100-(y(n)+k3))^2)*v1-v2*(x(n)+h))/(v2*(100-(y(n)+k3))));%h*f(x(n)+h,y(n)+k3)x(n+1)=x(n)+(1/6)*(k1+2*k2+2*k3+k4);y(n+1)=y(n)+h;
end
plot(x,y,'-');
%(sqrt(x(n)^2+(100-y(n))^2)
%差分求解时间
t = zeros(1,1000);
for n=1:1000t(n+1)=t(n)+h*(1/(v2*(100-y(n))/(sqrt(x(n)^2+(100-y(n))^2))));
endxlim([0,10]);
ylim([0,100]);

在这里插入图片描述
使用特解验证时间算的对不对
在这里插入图片描述在这里插入图片描述

进阶求二阶微分方程

例子:
{ y ′ ′ − 2 y ′ + y = 0 y 0 = 1 y 0 ′ = 2 \begin{cases} y''-2y'+y=0\\ y_0=1\\ y'_0=2 \end{cases} y′′2y+y=0y0=1y0=2
解析解为: y = e x + x e x y=e^x+xe^x y=ex+xex
差分求解:
y 1 = y , y 2 = y ′ y_1=y,y_2=y' y1=y,y2=y

{ y 1 ′ = y 2 y 2 ′ = 2 y 2 − y 1 y 1 0 = 1 y 2 0 = 2 \begin{cases} y_1'=y2\\ y_2'=2y_2-y_1\\ y_{1_0}=1\\ y_{2_0}=2 \end{cases} y1=y2y2=2y2y1y10=1y20=2

y1 = zeros(1,1000);
y2 = zeros(1,1000);
x = zeros(1,1000);
y1(1)=1;
y2(1)=2;
x(1)=0;
h=0.01;
xlim([0,6]);
ylim([0,100]);for n=1:1000y2(n+1)=y2(n)+h*(2*y2(n)-y1(n));y1(n+1)=y1(n)+h*y2(n);x(n+1)=x(n)+h;
end%plot(x,y1,'-');
hold on;
%四阶龙格-库塔方法
y1 = zeros(1,1000);
y2 = zeros(1,1000);
x = zeros(1,1000);
y1(1)=1;
y2(1)=2;
x(1)=0;
for n=1:1000k1 = h*(2*y2(n)-y1(n));%h*f(x(n),y(n))k2 = h*(2*(y2(n)+k1/2)-(y1(n)+h/2));%h*f(x(n)+h/2,y(n)+k1/2)k3 = h*(2*(y2(n)+k2/2)-(y1(n)+h/2));%h*f(x(n)+h/2,y(n)+k2/2)k4 = h*(2*(y2(n)+k3)-(y1(n)+h));%h*f(x(n)+h,y(n)+k3)y2(n+1)=y2(n)+(1/6)*(k1+2*k2+2*k3+k4);k1 = h*y2(n);%h*f(x(n),y1(n))k2 = h*(y2(n)+h/2);%h*f(x(n)+h/2,y(n)+k1/2)k3 = h*(y2(n)+h/2);%h*f(x(n)+h/2,y(n)+k2/2)k4 = h*(y2(n)+h);%h*f(x(n)+h,y(n)+k3)y1(n+1)=y1(n)+(1/6)*(k1+2*k2+2*k3+k4);x(n+1)=x(n)+h;
end
plot(x,y1,'-');%解析解ezplot('exp(x)+x*exp(x)');
xlim([0,6]);
ylim([0,100]);

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware导入vmdk文件(亲测有效)

场景:从别的地方拷贝了一个系统镜像,实际测试案例是从vulnhub下载的Kioptix Level #4靶场解压缩以后的文件是【Kioptrix4_vmware.vmdk】后缀为名为vmdx,使用常规的方式【文件-----打开】的方式,不能导入虚拟机,现在演示如何导入到…

Java——类和对象

在Java中,类与对象是面向对象编程(OOP)的核心概念。那面向对象又是什么呢。 一、面向对象和面向过程 1、面向对象 面向对象(Object-oriented)是一种程序设计的方法和编程范式,它以对象作为程序的基本单位…

matlab 异常值检测与处理——Z-score法

目录 一、算法原理1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、算法概述 使用Z分数法,可以找出距离平均值有多少个标准差值…

品牌渠道健康发展的关键与方法

一个品牌的渠道健康与否对其长期发展至关重要。品牌虽多,但并非所有产品都能成为品牌,创建品牌需大量精力,而让品牌长久健康发展则需多方面努力。 力维网络服务众多知名品牌,总结出一些渠道治理方法供品牌参考。首先,管…

前端JS必用工具【js-tool-big-box】学习,获取当前浏览器向上滚动还是向下滚动,获取当前距离顶部和底部的距离

这一小节,我们说一下 js-tool-big-box 添加的最新工具方法,在日常前端开发工作中,如果网页很长,我们就需要获取当前浏览器是在向上滚动,还是向下滚动。如果向上滚动,滚动到0的时候呢,需要做一些…

【Mongodb】Mongodb亿级数据性能测试和压测

一,mongodb数据性能测试 如需转载,请标明出处:https://zhenghuisheng.blog.csdn.net/article/details/139505973 mongodb数据性能测试 一,mongodb数据性能测试1,mongodb数据库创建和索引设置2,线程池批量…

React+TS前台项目实战(六)-- 全局常用组件Button封装

文章目录 前言Button组件1. 功能分析2. 代码注释说明3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局按钮组件封装,可根据UI设计师要求自定义修改。 Button组件 1. 功能分析 (1)可以通过className属性自定义按钮样式,传递…

【计算机网络基础】OSI七层网络模型 TCPIP四层网络模型

文章目录 ISO介绍网络模型介绍OSI七层模型OSI七层模型介绍OSI七层特点一、TCP/IP四层模型介绍二、TCP/IP四层模型TCP/IP协议簇一次C/S通信 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分…

校验参数个数工具类

项目中有个需求:前后端参数一致性校验,在某业务场景下后端代码需要校验参数个数,因此设计了1个工具类方便大伙使用,特此简单记录下。 校验参数个数工具类 一、校验工具类CheckNumInsideParamters二、单元测试ParameterSizeTest三…

从零手写实现 nginx-17-nginx.conf 全局的默认配置

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

哪里有宣传海报制作模板?盘点可以套用的海报软件

不论是精心筹备的盛会、充满爱意的婚礼仪式,还是家庭聚会的温馨时光,一份设计精巧的邀请函都是主人诚挚邀请的最好证明。它不仅传递着邀请,更承载着对宾客的尊重与期待。但你知道在哪里可以找到那些让人眼前一亮的邀请函海报制作模板吗&#…

Simscape Multibody与RigidBodyTree:机器人建模

RigidBodyTree:主要用于表示机器人刚体结构的动力学模型,重点关注机器人的几何结构、质量和力矩,以及它们如何随时间变化。它通常用于计算机器人的运动和受力情况。Simscape Multibody:作为Simscape的一个子模块,专门用…

ICRA 2024:北京工业大学马楠教授联合中科原动力公司推出番茄采摘自主机器人AHPPEBot,实现32.46秒快速准确采摘

当前,农业生产正深受劳动力短缺困扰,这一现状对生产规模的进一步拓展构成了严重制约。为了突破这一瓶颈,实施自动化已成为提升农业生产力的关键途径,这也使得机器人采收技术备受关注。 现今的机器人采收系统普遍采用先进感知方法&…

Android面试题之说说系统的启动流程(总结)

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 启动流程 Boot Rom -> Boot Loader -> Kernel -> 启动Init进程 -> Zygote进程 -> system_server进程 -> 启动AMS、WMS、PMS…

linux 服务器上离线安装 node nvm

因为是离线环境 如果你是可以访问外网的 下面内容仅供参考 也可以继续按步骤来 node 安装路径 Node.js — Download Node.js nvm 安装路径 Tags nvm-sh/nvm GitHub 后来发现 nvm安装后 nvm use 版本号 报错 让我去nvm install 版本 我是内网环境 install不了 下面 你要 把安…

Nginx 配置防护 缓慢的 HTTP拒绝服务攻击+点击劫持:X-Frame-Options未配置

一 安全团队检测网站 1 检测到目标主机可能存在缓慢的HTTP拒绝服务攻击 缓慢的HTTP拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络,对目标Web服务器进行海量HTTP请求攻击,直到服务器带宽被打满,造成了拒绝服务。 慢…

Macbook M芯片Homebrew与git的安装与配置

Macbook M芯片Homebrew与git的安装与配置 Homebrew的安装与配置 搜索Homebrew; 找到如下网址https://brew.sh/ 把以上命令复制到终端 执行后,发现并不能下载; 如果你像我一样也是不通的,可以使用国内源,将如下命令复制到终端:…

选课清单--数据结构课程设计(十字链表+哈希表实现)

题目如上(九院版,被老师要求选这个题目做,不知道还有没有别的学校是这种题目,都可以相互借鉴hh) 代码写的有冗余,结构体应该有三个,一个学生,一个课程,一个十字链表的结构体,如果公…

数据结构初阶 · 链式二叉树的部分问题

目录 前言: 1 链式二叉树的创建 2 前序 中序 后序遍历 3 树的节点个数 4 树的高度 5 树的叶子节点个数 6 树的第K层节点个数 前言: 链式二叉树我们在C语言阶段已经实现了,这里介绍的是涉及到的部分问题,比如求树的高度&am…

2024年6月8日,骑行杨柳冲峡谷:一场心灵与自然的交响曲

引言:寻找生活的节奏在这个快节奏的时代,我们常常迷失在都市的喧嚣中,忘记了如何聆听内心的声音。2024年6月8日,我与一群志同道合的校卡骑行群骑友,踏上了前往杨柳冲峡谷的旅程,这不仅仅是一次简单的户外活…