matlab 含阻力单摆微分方程可视化
文章目录:
- 1.简介
- 2.效果
- 3.基本步骤
- 3.1 解方程
- 3.2 背景绘制
- 3.3计算并绘图
- 3.4完整代码
1.简介
这是一期将单摆微分方程可视化的博文,我们都知道单摆常微分方程求解过程中会涉及到椭圆积分,难以用常见函数表示其结果,所以我们这篇博文想办法将其数值解可视化。
2.效果
其中横坐标为: θ(t),θ(t)∈[−2.5π,2.5π]\theta(t),\theta(t)\in[-2.5\pi,2.5\pi]θ(t),θ(t)∈[−2.5π,2.5π]
纵坐标为:θ˙(t),θ˙(t)∈[−2π,2π]\dot{\theta}(t),\dot{\theta}(t)\in[-2\pi,2\pi]θ˙(t),θ˙(t)∈[−2π,2π]
3.基本步骤
3.1 解方程
首先我们有微分方程:
θ¨(t)=−μθ˙(t)−gLsin(θ(t))\ddot{\theta}(t)=-\mu\dot{\theta}(t)-\frac g Lsin(\theta(t)) θ¨(t)=−μθ˙(t)−Lgsin(θ(t))
我们将其变形得到微分方程组:
ddt[θ(t)θ˙(t)]=[θ˙(t)θ¨(t)]=[θ˙(t)−μθ˙(t)−gLsin(θ(t))]\frac d {dt} \begin{bmatrix} \theta(t)\\\dot{\theta}(t) \end{bmatrix}= \begin{bmatrix} \dot{\theta}(t)\\\ddot{\theta}(t) \end{bmatrix}= \begin{bmatrix} \dot{\theta}(t)\\-\mu\dot{\theta}(t)-\frac g Lsin(\theta(t)) \end{bmatrix} dtd[θ(t)θ˙(t)]=[θ˙(t)θ¨(t)]=[θ˙(t)−μθ˙(t)−Lgsin(θ(t))]
对此我们均匀的在平面上取点,并计算不同[θ(t)θ˙(t)]\begin{bmatrix} \theta(t)\\\dot{\theta}(t) \end{bmatrix}[θ(t)θ˙(t)]对应的ddt[θ(t)θ˙(t)]\frac d {dt} \begin{bmatrix} \theta(t)\\\dot{\theta}(t) \end{bmatrix}dtd[θ(t)θ˙(t)]就可完成微分方程的可视化。
3.2 背景绘制
如果你看过我之前写的小游戏,可会下意识的这样写:
axis([-2.5,2.5,-2,2].*pi)
set(gca,‘color’,[0 0 0.0078])
set(gca,‘xtick’,[],‘ytick’,[],‘xcolor’,‘w’,‘ycolor’,‘w’)
但这样写后的效果是这个样子的:
很明显不够高端大气,至少不如效果图里显得大气
我们不妨重新定义一个大的figure,并且重新设置axes大小:
penduium.fig=figure(‘units’,‘pixels’,…
‘position’,[350 100 800 500],…
‘Numbertitle’,‘off’,…
‘menubar’,‘none’,…
‘resize’,‘off’,…
‘name’,‘simple_penduium’,…
‘color’,[0.95 0.95 0.95]);
axes(‘position’,[0 0 1 1])
axis([-2.5,2.5,-2,2].*pi)
set(gca,‘color’,[0 0 0.0078])
set(gca,‘xtick’,[],‘ytick’,[],‘xcolor’,‘w’,‘ycolor’,‘w’)
像这样的到的背景长这样:
没有边框帅气很多,之后我们(残暴的)为其增添坐标系:
hold on
plot([1;1]*(-2.5:0.1:2.5).*pi,[-2;2]*ones(1,51).*pi,'color',[0.1569 0.2039 0.1882],'linewidth',0.01)
plot([-2.5;2.5]*ones(1,41).*pi,[1;1]*(-2:0.1:2).*pi,'color',[0.1569 0.2039 0.1882],'linewidth',0.01)
plot([-2.5;2.5].*pi,[0 0],'color',[0.9373 0.9569 0.9569],'linewidth',1)
plot([0 0],[-2;2].*pi,'color',[0.9373 0.9569 0.9569],'linewidth',1)
plot([-2.5;2.5]*ones(1,6).*pi,[1;1]*[1.5,1,0.5,-0.5,-1,-1.5].*pi,'color',[0.2353 0.4235 0.4745],'linewidth',0.8)
plot([1;1]*[2,1.5,1,0.5,-0.5,-1,-1.5 -2].*pi,[-2;2]*ones(1,8).*pi,'color',[0.2353 0.4235 0.4745],'linewidth',0.8)
就得到了效果图中的背景:
3.3计算并绘图
只需要 写一个双层for循环计算方向向量,将其归一化后画在图中,并且根据不同的长度为其赋予不同的颜色就好了
for i=(-2.5+1/6:1/6:2.5-1/6).*pifor j=(-2+1/4:1/4:2-1/4).*pia=f([i,j],M,g,L);len=norm(a);a=a/len;a=a.*vector_len;Spoint=pos_exchange([i,j]);Epoint=pos_exchange([i,j]+a);if ~any(isnan(a))annotation('arrow',[Spoint(1),Epoint(1)],[Spoint(2),Epoint(2)],...'color',color_exchange(len,max_len,color_map),...'linewidth',0.2)endend
end
其中f,pos_exchange,color_exchange三个匿名函数为:
%========================================================= f=@(theta,M,g,L) [theta(2),-M*theta(2)-g/L*sin(theta(1))];
%theta(1) ->theta
%theta(2) ->theta'
%==============================================pos_exchange=@(pos) pos./[pi*5,pi*4]+[0.5,0.5];
%==============================================color_map=[0.9725 0.3804 0.35290.9725 0.3804 0.35290.9020 0.3843 0.37650.9020 0.3843 0.37650.9333 0.4118 0.37650.9686 0.5804 0.22350.9765 0.8392 0.10980.9882 0.9804 0.05880.7961 0.8353 0.25100.6510 0.7373 0.20000.5961 0.7059 0.4039];color_exchange=@(value,maxvalue,color_map) color_map(12-(floor(value/(maxvalue/11))+1),:);
%=========================================================================================
3.4完整代码
function simple_penduium
M=1.4;
g=9.8;
L=2;
vector_len=0.75;
%========================================================= f=@(theta,M,g,L) [theta(2),-M*theta(2)-g/L*sin(theta(1))];
%theta(1) ->theta
%theta(2) ->theta'
%==============================================pos_exchange=@(pos) pos./[pi*5,pi*4]+[0.5,0.5];
%==============================================color_map=[0.9725 0.3804 0.35290.9725 0.3804 0.35290.9020 0.3843 0.37650.9020 0.3843 0.37650.9333 0.4118 0.37650.9686 0.5804 0.22350.9765 0.8392 0.10980.9882 0.9804 0.05880.7961 0.8353 0.25100.6510 0.7373 0.20000.5961 0.7059 0.4039];color_exchange=@(value,maxvalue,color_map) color_map(12-(floor(value/(maxvalue/11))+1),:);
%=========================================================================================
max_len=norm(f([pi/2,2*pi],M,g,L));
global penduium
penduium.fig=figure('units','pixels',...'position',[350 100 800 500],...'Numbertitle','off',...'menubar','none',...'resize','off',...'name','simple_penduium',...'color',[0.95 0.95 0.95]);
axes('position',[0 0 1 1])
axis([-2.5,2.5,-2,2].*pi)
set(gca,'color',[0 0 0.0078])
set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w')
hold onplot([1;1]*(-2.5:0.1:2.5).*pi,[-2;2]*ones(1,51).*pi,'color',[0.1569 0.2039 0.1882],'linewidth',0.01)
plot([-2.5;2.5]*ones(1,41).*pi,[1;1]*(-2:0.1:2).*pi,'color',[0.1569 0.2039 0.1882],'linewidth',0.01)
plot([-2.5;2.5].*pi,[0 0],'color',[0.9373 0.9569 0.9569],'linewidth',1)
plot([0 0],[-2;2].*pi,'color',[0.9373 0.9569 0.9569],'linewidth',1)
plot([-2.5;2.5]*ones(1,6).*pi,[1;1]*[1.5,1,0.5,-0.5,-1,-1.5].*pi,'color',[0.2353 0.4235 0.4745],'linewidth',0.8)
plot([1;1]*[2,1.5,1,0.5,-0.5,-1,-1.5 -2].*pi,[-2;2]*ones(1,8).*pi,'color',[0.2353 0.4235 0.4745],'linewidth',0.8)for i=(-2.5+1/6:1/6:2.5-1/6).*pifor j=(-2+1/4:1/4:2-1/4).*pia=f([i,j],M,g,L);len=norm(a);a=a/len;a=a.*vector_len;Spoint=pos_exchange([i,j]);Epoint=pos_exchange([i,j]+a);if ~any(isnan(a))annotation('arrow',[Spoint(1),Epoint(1)],[Spoint(2),Epoint(2)],...'color',color_exchange(len,max_len,color_map),...'linewidth',0.2)endend
end
%text(pi,-0.1,'\pi','fontsize',20,'color','w','HorizontalAlignment', 'center')
%text(-pi,-0.1,['-','\pi'],'fontsize',20,'color','w','HorizontalAlignment', 'center')
%text(2*pi,-0.1,' \pi','fontsize',20,'color','w','HorizontalAlignment', 'center')
%text(2*pi-0.1,-0.18,'2','fontsize',13,'color','w','HorizontalAlignment', 'center')
%text(-2*pi,-0.1,'- \pi','fontsize',20,'color','w','HorizontalAlignment', 'center')
%text(-2*pi-0.08,-0.18,'2','fontsize',13,'color','w','HorizontalAlignment', 'center')
%text(2.5*pi-0.3,0.5,'\theta','fontsize',25,'color','w','HorizontalAlignment', 'center')
%text(0.5,2*pi-0.3,['\theta','’'],'fontsize',25,'color','w','HorizontalAlignment', 'center')
end
matlab 含阻力单摆微分方程可视化相关推荐
- Matlab实现 线性动态电路可视化分析
Matlab实现 线性动态电路可视化分析 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 编程思路 这个编程总体采用面向过程的编程思想,将人在 ...
- matlab恶狼追兔问题,MATLAB恶狼追兔的可视化问题.doc
MATLAB恶狼追兔的可视化问题 <MATLAB>课程设计 恶狼追兔的可视化问题 院(系)名称 信息工程学院 专 业 班 级 09普本信计1班 学 号 MATLAB 课程设计评阅书 题目恶 ...
- matlab电学成像,利用MATLAB进行电磁学计算及可视化教学.PDF
利用MATLAB进行电磁学计算及可视化教学.PDF 第 2 8 卷 第 2 期 电气电子教学学报 Vol . 28 No . 2 2006 年 4 月 J OU RN AL O F EEE Ap r ...
- Matlab含新能源(风电光伏)和多类型电动汽车配电网风险评估
Matlab含新能源(风电光伏)和多类型电动汽车配电网风险评估 软件:matpower+Matlab: 关键词:蒙特卡洛.时序.电网风险.风险评估.风光不确定性 介绍:由于电动汽车负荷与风电光伏出力的 ...
- Matlab含新能源(风电光伏)和多类型电动汽车配电网风险评估 由于电动汽车负荷与风电光伏出力的不确定性,造成配电网运行风险,运用蒙特卡洛概率潮流计算分析电压和线路支路越限
Matlab含新能源(风电光伏)和多类型电动汽车配电网风险评估 软件:matpower+Matlab: 关键词:蒙特卡洛.时序.电网风险.风险评估.风光不确定性 介绍:由于电动汽车负荷与风电光伏出力的 ...
- Matlab点云处理及可视化第1期—基于KD树的邻域点搜索(柱状邻域、球状邻域及KNN)
目录 1 概述 2 代码实现 3 可视化验证 数据及完整代码获取方式: 观前提示:本文文字内容请勿直接用于论文写作,否则后果自负. 特别提示:<Matlab点云处理及可视化>系列文章旨在为 ...
- MATLAB(SimMechanics)机器人可视化运动仿真-关节位置控制篇
MATLAB(SimMechanics)机器人可视化运动仿真-关节位置控制篇 摘要: 一 导入机器人URDF模型 二 建立关节电机控制的物理模型 三 仿真结果 1-整体物理模型 2-各关节电机PID位 ...
- matlab怎么求三次微分,matlab课设三阶微分方程多种方法求解.doc
matlab课设三阶微分方程多种方法求解 目录 一.课程设计题目及意义 -------- 1 页 二.课程设计任务及要求 --------2 页 三.课程设计详细过程及结果 --------3至10页 ...
- matlab使用杂谈4-偏微分方程求解之pdede函数使用
matlab使用杂谈4-偏微分方程求解之pdede函数使用 偏微分方程 求解偏微分方程的数值方法 Matlab解偏微分方程 pdepe()函数 pdepe函数使用示例 PDE方程求解格式 PDE方程初 ...
最新文章
- R语言message函数、warning()函数和stop()函数输出程序运行健康状态信息实战
- Python TCP聊天器
- 自然语言处理中的Attention Model:是什么以及为什么[一]
- fopen php 读取_PHP使用fopen与file_get_contents读取文件实例分享
- CombineFileInputFormat 文件分片总结
- Java案例:读取XML文档
- Transaction rolled back because it has been marked as rollback-only 原因 和解决方案
- 我开发的kvm虚拟化虚拟机批量生产脚本
- 在 Linux 上部署 Django 应用,nginx+gunicorn+supervisor
- c++字符串加密_【网络爬虫教学】快速定位拼多多加密算法入口(四)
- Python 之父:移动设备中的 Python 应用“又大又慢”!
- 瑞友天翼应用虚拟化系统V6.0之设备重定向
- 《应用时间序列分析:R软件陪同》——2.6 MA 模型
- html中字体 楷体_(收藏)css怎么设置字体为楷体?
- 使用JQuery TreeTable实现树形表格
- The RSpec Book笔记《四》Describing Code with RSpec用RSpec描述代码
- Excel入门(一)
- android遥控杆控件,Android自定义滑杆控件SeekBar多功能版本
- SQL Server Performance 分析
- Linux:ftrace: 为什么有些函数没有在available_filter_functions
热门文章
- 网站建设如何选择专业的网站建设公司
- 【个人成长】《西游记》的至高境界,看懂者无几
- Matplotlib任务实现:绘制国民生产总值构成分布饼图
- 14.学习Camera之——camera基本知识
- 创建一个Node.js项目
- 编写一个程序,实现以下功能:(1)输入一系列的学生数据(包括学生的学号、姓名和成绩等基本信息),将学生信息写入二进制文件 student . dat 中。。。。。。
- 痔疮需要用php吗,长了痔疮,一定要做手术根除?辟谣:2种情况才考虑切除
- 联通物联网卡ICCID号校验位算法
- 深耕精品智能小车市场,推动奇瑞新能源品牌产品智能化
- 深入解析:如何修复SSL / TLS握手失败错误(中)