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


我们根据题目给出的微分方程编写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公式等,感兴趣的可以进一步去了解这些算法!

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

  1. 静电场的有限差分法与matlab 仿真课程设计,计算物理和MATLAB课程设计--自激振动系统的MATLAB仿真.doc...

    东北石油大学课程设计任务书 课程 计算物理和MATLAB课程设计 题目 自激振动系统的MATLAB仿真 专业 姓名 学号 主要内容.基本要求.主要参考资料等 主要内容: 研究范?德?波耳(Van de ...

  2. matlab求解微分方程解析解

    解析解 1求解微分方程方程组用函数"dsolve" dsolve('方程1','方程2'-'方程n','初始条件','自变量') clc,clear %% %求解du/dt=i+u ...

  3. 基于MATLAB的微分方程的定步长与动步长算法对比解法(附完整代码)

    目录 一.  四阶定步长Runge-Kutta算法 二.  四阶五级Runge-Kutta-Felhberg算法 三. 微分方程求解函数 3.1 求解格式 3.2 描述微分方程组 例题1 例题2 一. ...

  4. matlab求解微分方程6,牛津大学出版社数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解:经典爱情语录大全...

    漳州理工职业学院-酒会礼仪 注:上机作业文件夹以自己的班级姓名学号命名,文件夹包括如下上机报告和Matlab程序. 上机报告模板如下: 佛山科学技术学院 上 机 报 告 课程名称 数学应用软件 上机项 ...

  5. matlab解无解析解微分方程组,数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解...

    <数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解>由会员分享,可在线阅读,更多相关<数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解(12页 ...

  6. matlab求解微分方程的解析解

    简 介:本文将研究微分方程的解析解算法,介绍在MATLAB 环境中如何用微分方程求解函数直接得出线性微分方程组的解析解,并对一阶简单的非线性微分方程的解析解求解进行探讨,从而得出结论,一般非线性微分方 ...

  7. 用matlab求微分方程系数,用Matlab软件求解微分方程的解析解和数值解.pdf

    用Matlab软件求解微分方程的解析解和数值解.pdf Matlab软件求解微分方程 的解析解和数值解 数学与信息科学学院 孔祥庆 数学建模实验项目2 (1) 一.实验名称: Matlab软件求解微分 ...

  8. 机器学习(MACHINE LEARNING)MATLAB中微分方程的求解

    文章目录 1 MATLAB之极限.积分.微分 2 matlab中微分方程的求解 2.1 一阶微分方程 2.2 求解二阶线性微分方程 是指含有未知函数及其导数的关系式.解微分方程就是找出未知函数.微分方 ...

  9. matlab求微分方程精确解,matlab求微分方程精确解及近似解.ppt

    matlab求微分方程精确解及近似解.ppt 还剩 24页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 求微分方程的解q 自牛顿发明微积分以来,微分方 ...

最新文章

  1. iphone11看信号强度_iPhone11信号怎么样_iPhone11信号差原因|解决办法-太平洋IT百科...
  2. 写出程序删除链表中的所有接点
  3. 《设计模式 基于C#的工程化实现及扩展》 - 书摘精要
  4. 新项目UX设计0到1的正确开启方式
  5. 战友!6.19决战光荣日,一个真实的魔兽世界在等你!
  6. 类变量与实例变量辨析
  7. 什么是JNDI,SPI,CCI,LDAP和JCA?
  8. CentOS 6与7对比【转】
  9. 网络_简单实现远程唤醒与远程控制(Teamviewer)
  10. mysql按条件提取数据库_UIPath中级系列一之读取MySQL记录集
  11. 关于使用VS.Net2003调试器出现的问题及相关解决方法[转]
  12. 【Inpho精品教程】任务一:Inpho预处理准备(Pix4d生成未畸变图像、Pix4d生成相机参数文件)
  13. maven 打包命令的使用
  14. 最新Flutter 微信分享功能实现
  15. C语言 汉字名字排列组合
  16. android 获取邮箱账号,android获取google邮箱
  17. 【解决】Failed to process import candidates for configuration class [cn.itcast.eureka.EurekaApplication]
  18. JavaScript(JS) date.getDate()
  19. 人人商城互动直播(与通信服务器连接失败)
  20. Codeforces1153D-Serval and Rooted Tree(树形dp)

热门文章

  1. 基于不注意视盲的研究
  2. Silverlight - 控件和对话框 源自MSDN 参考
  3. 免费的量化交易软件的交易策略?
  4. 介绍几种js脱敏加密(手机号邮箱等)
  5. ~30万 | 上海交大鲁洪中课题组2023年诚招系统生物学和合成生物学方向博士后2名...
  6. 如何查找计算机操作系统序列号,如何从安装光盘找出操作系统的序列号?
  7. 虚拟机无法创建新虚拟机,拒绝访问,解决方法
  8. GEE学习笔记一 利用GEE获取Sentinel-2 1C与2A级影像
  9. 笙科A7169 Sub1GHz RFIC 低功耗3mA射频收发芯片
  10. 推荐系统 - FM模型原理和实践