计算物理中matlab处理微分方程解析解和欧拉法数值解的算法演示

我先来看一个问题的引入:

在这里插入图片描述
我们根据题目给出的微分方程编写matlab求解代码如下:

syms cd m g v(t);
eqn = diff(v,t) == g - cd/m*v^2;
vt = dsolve(eqn,cond)

求解结果如下:
在这里插入图片描述
在得知相关初始条件后,对代码进一步设置求解:

syms cd m g v(t);                   % 定义符号变量
eqn = diff(v,t) == g - cd/m*v^2;    % 微分方程
cond = v(0) == 0;                   % 设置初始速度
vt = dsolve(eqn,cond);              % 解微分方程vt = subs(subs(subs(vt,'m',68.1),'g',9.8),'cd',0.25);   % 迭代赋值for i = 0:30vvt(i+1) = double(subs(vt,'t',i));  % 循环计算0~30s每隔1s的速度,并放入数组vvt
end% 判断级数是否收敛
fn = vt;                       % 定义级数表达式(速度随时间变化的表达式,即微分方程的解)
sum = symsum(vt,t,0,inf);      % 对级数进行求和
vpa(sum)        % 输出近似值%绘图
ft = 0:30;
plot(ft,vvt,'r-o','LineWidth',2)
title('前30s物体运动速度随时间的变化关系');
xlabel('时间t(s)');
ylabel('对应时刻的速度v(m/s)');
grid on; %打开栅格
hold on; %保持图像窗口,继续添加
plot(12,vvt(13),'b-+','LineWidth',2) %标明关注点
text(10,54,'12s时速度');

绘制的图像如下:
在这里插入图片描述
以上即为解析解图像,接下来我们利用欧拉法近似逼近得到数值解:
首先编写近似函数:

function vt = Numerical_solution(m,v0,cd,dt,t)
g=9.8;  % 重力加速度
for i = 0:dt:tv2 = v0 + (g-cd/m*v0^2)*dt; % v2为dt时间结束时的速度,v0为dt时间内开始时的速度vt(i+1,1) = i;              % 将循环0~ts内间隔dt的时刻保存在数组vt第一列vt(i+1,2) = v0;             % 将循环0~ts内间隔dt的速度保存在数组vt第二列v0 = v2;                    % 将上一次的末速度设置为下一次的初速度
end
plot(vt(:,1),vt(:,2),'b-','LineWidth',2);   % 绘图

与此同时在主脚本中调用函数,并将其与解析解绘制在同一图中:

syms cd m g v(t);                   % 定义符号变量
eqn = diff(v,t) == g - cd/m*v^2;    % 微分方程
cond = v(0) == 0;                   % 设置初始速度
vt = dsolve(eqn,cond);              % 解微分方程vt = subs(subs(subs(vt,'m',68.1),'g',9.8),'cd',0.25);   % 迭代赋值for i = 0:30vvt(i+1) = double(subs(vt,'t',i));  % 循环计算0~30s每隔1s的速度,并放入数组vvt
end% 判断级数是否收敛
fn = vt;                       % 定义级数表达式(速度随时间变化的表达式,即微分方程的解)
sum = symsum(vt,t,0,inf);      % 对级数进行求和
vpa(sum)        % 输出近似值%绘图
ft = 0:30;
plot(ft,vvt,'r-o','LineWidth',2)
title('前30s物体运动速度随时间的变化关系');
xlabel('时间t(s)');
ylabel('对应时刻的速度v(m/s)');
grid on; %打开栅格
hold on; %保持图像窗口,继续添加
plot(12,vvt(13),'b-+','LineWidth',2) %标明关注点
Numerical_solution(68.1,0,0.25,1,30); %数值解图像
text(10,54,'12s时速度');
legend('解析解','关注点','数值解','Location','best')

最终运行代码得到以下结果:
在这里插入图片描述
我们发现解析解与数值解存在一定的偏差,这是由于数值解采用的是近似逼近的求解算法,接下来我们将源代码脚本中的时间dt修改为0.1,即:
Numerical_solution(68.1,0,0.25,0.1,30); %数值解图像
与此同时避免函数文件报错,在此做如下修改:

function vt = Numerical_solution(m,v0,cd,dt,t)
g=9.8;  % 重力加速度
i = 0;
for di = 0:dt:tv2 = v0 + (g-cd/m*v0^2)*dt; % v2为dt时间结束时的速度,v0为dt时间内开始时的速度vt(i+1,1) = di;              % 将循环0~ts内间隔dt的时刻保存在数组vt第一列vt(i+1,2) = v0;             % 将循环0~ts内间隔dt的速度保存在数组vt第二列v0 = v2;                    % 将上一次的末速度设置为下一次的初速度i = i+1;
end
plot(vt(:,1),vt(:,2),'b-','LineWidth',2);   % 绘图  

重新运行代码得:
在这里插入图片描述
我们可以看到,随着数值解的求解精度提高,数值解的结果逐步趋近于解析解并最终与之重合,而在大部分实际应用问题中,很少存在解析解的情况,大多数情况都需要采取数值解近似逼近求解的方法!
而常用的数值解求解方法有:欧拉法公式,Runge-Kutta公式,Adams公式等,感兴趣的可以进一步去了解这些算法!

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

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

相关文章

chatgpt赋能python:Python解代数方程,让你轻松求解复杂方程!

Python解代数方程,让你轻松求解复杂方程! 代数方程一直都是数学领域一个非常关键的研究领域,而求解这些方程也是一个非常复杂而又繁琐的任务。Python作为一门高效且强大的编程语言,可以帮助我们快速、准确地解决代数方程问题。在…

matlab解方程

工具/材料 matlab 2016a 打开matlab,首先定义变量x: syms x; matlab中solve函数的格式是solve(f(x), x),求解的是f(x) 0的解。 第一个例子,求解最常见的一元二次方程x^2-3*x10: solve(x^2-3*x1,x),解出的结果用精确的…

欧拉法与梯形法求解微分方程【含matlab源代码】

本文介绍两种入门级求解微分方程的方法 —— 梯形法与欧拉法。 将上述方程组改写成matlab语言: function F fun(t,Y)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % 程序作…

【计算方法】python求解常微分方程|显式欧拉、改进欧拉、龙格库塔

显式欧拉 import numpy as np from scipy.integrate import odeintdef f(x,y):return y-2*x/y def f_ode(y,x):return y-2*x/ydef Explicit_Euler(f,a,b,y0,h):x_p np.linspace(a,b,int(1/h)1)n len(x_p)value np.zeros(n)value[0] y0for i in range(1,n):value[i] value…

【Matlab】求解微分方程{上}(通解和特解)

求解微分方程 desolve函数实例1实例2实例3实例4 求解有条件的微分方程微分方程显示隐式解未找到显式解决方案时查找隐式解决方案求微分方程级数解为具有不同单边限制的函数指定初始条件(特解)练习题 desolve函数 S dsolve(eqn)求解微分方程eqn&#xf…

常微分方程数值解——差商、欧拉公式详细推导及代码实现

引言 在自然科学的许多领域特别是科学与工程计算中,经常会遇到常微分方程的求解问题。然而只有非常少数且十分简单的微分方程可以用初值等方法求得它们的解,多数只能近似方法求解。 一、预备知识 (差商的推导) 二、 一阶常微分方…

PINN解偏微分方程实例3(Allen-Cahn方程)

PINN解偏微分方程实例3之Allen-Cahn方程 1. Allen-Cahn方程2. 损失函数如下定义3. 代码4. 实验细节及复现结果参考资料 1. Allen-Cahn方程 考虑偏微分方程如下: u t − 0.0001 u x x 5 u 3 − 5 u 0 u ( 0 , x ) x 2 c o s ( π x ) u ( t , − 1 ) u ( t , 1 …

chatgpt赋能python:用Python解方程

用Python解方程 介绍 解方程是数学中最基础的技能之一,也是很多实际问题中必须掌握的技能。Python是一种功能强大的编程语言,通过它,我们可以编写程序来解方程。在本篇文章中,我们将介绍如何使用Python来解方程。 Python中的方…

PINN解偏微分方程--程函方程

目录 前言 一、什么是程函方程? 二、配置环境及库的导入 三、构建训练数据集 四、用Pytorch搭建PINN网络 1.网络搭建 2.一些基本参数变量的确定以及数据格式的转换 五、用Pytorch搭建PINN网络 六、查看loss下降情况 七、导入网络模型,输入验证数据&#…

【免费下载】2023年1月份热门报告合集(附下载链接)

省时查报告-专业、及时、全面的报告库 省时查方案-专业、及时、全面的方案库 2023年1月份省时查报告平台十大热门报告新鲜出炉,本期的热门报告关键词有:2023、趋势、投资、房地产、展望、消费、短视频、抖音、直播电商、零售等;快来看看都谁上…

【免费下载】2023年2月份热门报告合集(附下载链接)

省时查报告-专业、及时、全面的报告库 省时查方案-专业、及时、全面的方案库 2023年2月份省时查报告平台十大热门报告新鲜出炉,本期的热门报告关键词有:ChatGPT、AIGC、人工智能、情人节、营销、直播电商、跨境电商、数字化等;快来看看都谁上…

【免费下载】2023年3月份热门报告合集(附下载链接)

省时查报告-专业、及时、全面的报告库 省时查方案-专业、及时、全面的方案库 【限时免费】无需翻墙,ChatGPT4直接使用 2023年2月十大热门报告盘点 2023年3月份省时查报告平台十大热门报告新鲜出炉,本期的热门报告关键词有:ChatGPT、GPT4、小红…

初学Python到月入过万最快的兼职途径(纯干货)

不错过任何一次干赚钱干货 1.兼职薪资,附行哥工资单 2.兼职门槛,附学习知识清单 3.兼职途径,附入职考核过程 4.行哥的兼职感受 答应行友的第一篇赚钱干货推文来啦,行哥第一个在读书期间通过兼职赚到的10w收入,这也…

AIGC|我让AI来写今年高考作文

作者:谢凯 | 神州数码云基地-需求分析师 目录 一、人工智能究竟强在哪 //以ChatGPT为例,人工智能其优势何在? 二、BingAI如何处理高考作文 三、总结 一、人工智能究竟强在哪 随着ChatGPT(Chat Generative Pre-trained Transfo…

ChatGPT|谷歌首席决策科学家Cassie Kozyrkov介绍 ChatGPT

文章目录 介绍 ChatGPT!对抗网络GANs使用 ChatGPT 编写代码 大揭秘一些自动生成的废话 介绍 ChatGPT! 原文:地址 作者:Cassie Kozyrkov 谷歌首席决策科学家。 ❤️ 统计、ML/AI、数据、双关语、艺术、戏剧、决策科学。 有句话介绍…

新媒体如何借势进行热点营销

互联网营销时代,眼花缭乱的信息在消费者眼中总是昙花一现,碎片化的信息分散着当代人的注意力。为了聚焦用户碎片化的注意力,吸引消费者眼球,“蹭热点”就成为了各大品牌方“借势”惯用的方法。“蹭热点”其实就是借势营销&#xf…

2022年的告别

契子 2022年即将过去,没想到年末成了杨过。坐在家里电脑前,看了看窗外,回想了一整年的时光,虽然很多时刻有过彷徨迷茫,但总归都是成长。今年看了不少人性和哲学相关的书籍,其主要原因是因为在管理方面&…

基于Qt的网络音乐播放器(五)实现歌词滚动显示

2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 文章目录 1.思路和效果图2.歌词的解析与存储3.onDurationChanged()4.总结 网络播放器系列: qt 布局和样式表基于Qt的网络音乐播放器&am…

为什么停更ROS2机器人课程-2023-

机器人工匠阿杰肺腑之言: 我放弃了ROS2课程 真正的危机不是同行竞争,比如教育从业者相互竞争不会催生ChatGPT…… 技术变革的突破式发展通常是新势力带来的而非传统行业的升级改革。 2013年也就是10年前在当时主流视频网站开启分享: 比如 …

chatgpt赋能Python-mac上的python

在Mac上使用Python编程的好处 作为一名有10年Python编程经验的工程师,我必须说Mac是一个出色的编程工作台。Mac操作系统本质上就是一个整合了各种开发工具的平台,为Python编程提供了很好的支持。这篇文章将介绍在Mac上使用Python编程的好处。 简单易用…