基于MATLAB实现电磁场的动画演示

简介:学习过电磁场的小伙伴们都比较清楚,电磁场由于其抽象的概念,时空分布复杂等问题,成功劝退一大波小朋友,如果我们在学习的时候能够将抽象的概念可视化,再将静态的图片动态实现,那么将会大大提高我们的学习兴趣,同时可以很好的帮助我们理解相关的概念,今天就帮助大家如何实现这种类型的动画演示,当然欢迎小伙伴在评论区里面留言,你们想要的实现的其他的东西,本文做抛砖引玉之用。

动画演示函数简介

驻波与行波

动画演示函数

​ MATLAB中实现动画演示一般分为两个步骤:首先第一步需要调用getframe函数生成每帧的信息;第二步调用movie2avi函数将阵列中一系列的动画帧转化成视频avi文件,但是由于在新版的matlab里面,上面的函数已经被删除,取而代之的是videowriter 的函数,因此我这里将两种函数的写法都罗列出来,供大家选择,这样可以就可以脱离MATLAB 实现播放效果。

getframe函数的调用格式有以下三种:

  • F = getframe, 从当前的图形框中得到动画帧
  • F = getframe(h), 从图形句柄h中得到动画帧
  • F = getframe(h,rect), 从图形句柄h中的指定区域rect得到动画帧

movie2avi函数的调用形式如下:

  • movie2avi(mov,“filename”),将getframe捕捉到的一系列帧图像mov转化并写入到filenama中。

movie函数使用比较简单,基本格式就是movie(mov,n,fps),将保存在mov变量中的帧序列按照fps设定的速度进波播放n次。

videowriter 函数的格式

  • 配合open,writeVideoclose方法从图像*(figure)中创建视频文件、静态图像或Matlab*视频

驻波与行波

​ 在理想介质中传播的电磁波,如果它的电场和磁场是没有传播方向上的纵向分量的,而是只有在与传播方向垂直的横向分量,并且在横向截面上分布均匀,这种电磁波被称为均匀电磁波,又可以称为是横电磁波(Transvers Electromagnetic wave, TEM). 均匀平面波的电场矢量E 和磁场矢量H 在时间的相位是相同的,在空间中是互相垂直的。

​ 假设我们现在的所要讨论的电磁波沿着z 轴的方向进行传播,此时只有电场分量*ExE_{x}Ex​* ,磁场只有*HyH_{y}Hy​* 分量,那么此时的电磁场可以表示为
E(z,t)=Emcos(ωt−kz)exH(z,t)=Hmcos(ωt−kz)ey\boldsymbol{E}(z,t) = E_mcos(\omega t-kz)\boldsymbol{e}_x \\ \boldsymbol{H}(z,t) = H_mcos(\omega t-kz)\boldsymbol{e}_y E(z,t)=Em​cos(ωt−kz)ex​H(z,t)=Hm​cos(ωt−kz)ey​
其中:kz 表示初始相位;k 表示波数。

根据Maxwell functions 我们可以得到电场和磁场之间的关系为:
H(z,t)=1Z×E(z,t)\boldsymbol{H}(z,t)= \frac{1}{Z}\times\boldsymbol{E}(z,t) H(z,t)=Z1​×E(z,t)
其中Z 表示波阻抗。电磁波在无线大的空间中传播的时候,电磁场的能量不断地向前传播,这样地电磁波叫做行波。电磁场如果入射到理想导体的界面的时候,就会发生全发射,此时反射波和入射波进行叠加就会形成驻波。驻波的特点是随着时间的变化,电磁波的波腹和波节的位置是固定的

​ 一维的电磁波问题十分简单,可以直接用plot 函数,这里我们实现如何使用movie2avi 函数实现动画演示:

omega = 2*pi;  %设定行波的角频率
t = 0;
z = linspace(0,15,100);  %方位划分
k = 1;
for  i = 1:300  %设置帧数y = sin(omega*t-k*z);plot(z,y);axis([0 15 -2 2]);  %这里表示的是观察的范围hold onmov(i) = getframe(gcf);  %获取信息pause(0.1);  %时间间隔t = t+0.1;hold off
end
movie2avi(mov,'正弦波传播.avi');

​ 需要注意的是,在新版的matlab里面已经将movie2avi函数已经删除,因此这里我用新的函数的实现操作如下:

omega = 2*pi;  %设定行波的角频率
t = 0;
z = linspace(0,15,100);  %方位划分
k = 1;
writerObj  = VideoWriter('test.avi');  %打开一个文件用于储存动画
open(writerObj);  %首先需要打开这个动画文件句柄
for  i = 1:20  %设置帧数y = sin(omega*t-k*z);plot(z,y);axis([0 15 -2 2]);  %这里表示的是观察的范围hold onmov = getframe(gcf);  %获取信息writeVideo(writerObj,mov);pause(0.1);  %时间间隔t = t+0.1;hold off
end
close(writerObj);  %注意最后需要关闭这个动画句柄

​ 当两列频率相同但是传播方向不同的电磁波相遇的时候,此时就会生成驻波,对于驻波的形式,我们可以直接设置为两束波传播的时候一个沿着z 的方向,一个沿着*-z*的方向即可:

omega = 2*pi;  %设定行波的角频率
t = 0;
z = linspace(0,15,100);  %方位划分
k = 1;
writerObj  = VideoWriter('test.avi');  %打开一个文件用于储存动画
open(writerObj);
for  i = 1:50  %设置帧数y1 = sin(omega*t-k*z); %两列传播方向不同的电磁波y2 = sin(omega*t+k*z);y = y1+y2;plot(z,y1,'b',z,y2,'g',z,y,'r');  %全部绘制到一起axis([0 15 -2.5 2.5]);  %这里表示的是观察的范围hold onmov = getframe(gcf);  %获取信息writeVideo(writerObj,mov);pause(0.1);  %时间间隔t = t+0.1;hold off
end
close(writerObj);

但是,对于一般的一维来说,还是存在一定的问题,还是不能够直观的感受到电磁波的空间传播,因此,绘制三维变化的情况,可以帮助我们更好的理解相关的概念。在MATLAB中我们可以结合quiver3 函数进行三维的绘制,下面我们绘制沿着x方向传播的平面波的三维图像:

t = 0;
k = 2;
omega  = 2*pi;
x = linspace(0,10,100);
nill  = zeros(size(x));
writerObj  = VideoWriter('test.avi');  %打开一个文件用于储存动画
open(writerObj);
for i = 1:100E = cos(omega*t-k*z);H = 0.3.*E;quiver3(x,nill,nill,nill,E,nill,'b');hold onquiver3(x,nill,nill,nill,nill,H,'r');axis([0,10,-1,1,-1,1]);view(20,40);mov = getframe(gcf);writeVideo(writerObj,mov);pause(0.1);  %时间间隔t = t+0.1;hold off
end
close(writerObj);

基于MATLAB实现电磁场的动画演示相关推荐

  1. matlab绘制磁场图,基于Matlab的电磁场图示化教学

    第 26 卷第 3 期 孝感学院学报 VOL. 26 NO. 3 2006 年 5 月 JOURNAL OF XIAOGAN UNIVERSITY MA Y. 2006 基于 Matlab 的电磁场图 ...

  2. 基于MATLAB梁模型振型动画程序设计

    基于MATLAB梁模型振型动画程序设计 梁模型振型动画 %该模型为一端固定梁模型振型动画 clear; close all; clc % 系统参数 E = 1e7; A = 1.5; rho = 2. ...

  3. 基于Matlab的电磁场与波“电磁波的入射、反射、透射”仿真—(可实现波形入射反射过程的仿真)

    写在前面,本仿真与其他大多数仿真的改进点在于,本仿真实现了对于波形运动情况的仿真,并将大部分情况融合成为一个函数文件,可以通过改变参数实现不同的仿真(就是文章最后那堆代码) 一.正入射的基础驻波实现 ...

  4. 基于Matlab的电磁场与波“镜像电荷法”仿真——导体球外点电荷的几种情况

    目录 零.使用到的绘制电场线方向的原创函数 drawEline函数 1.目的 2.源代码 3.注意事项 一.导体球外点电荷的镜像法(导体球接地情况与不接地情况) 1.目的: 2.理论分析: 3.源代码 ...

  5. 基于Matlab的电磁场与波“镜像电荷法”仿真——平面导体劈的点电荷镜像

    0.代码中用到的drawEline函数 在使用代码前记得把这个函数和仿真文件放到一个文件夹下哦 function pipi=drawEline(h1,d1,d2)posAxes = get(gca, ...

  6. 基于Matlab的电磁场与波“镜像电荷法”仿真——点电荷位于半球形凸起导体附近

    0.代码中用到的drawEline函数 在使用代码前记得把这个函数和仿真文件放到一个文件夹下哦 function pipi=drawEline(h1,d1,d2)posAxes = get(gca, ...

  7. MATLAB实现电磁场gif图像

    MATLAB实现电磁场的动态图 前言 基本概念 前言 在之前的文章中笔者已经写清楚了如何利用MATLAB去实现视频动态图,更多的时候我们需要的是如何实现gif这样的动态图像,方便我们在论文里面进行插入 ...

  8. matlab演示系统,基于Matlab的通信原理演示系统的设计与应用

    基于 Matlab的通信原理演示系统的设计与应用 李 强 , 明 艳 , 吴坤君 (重庆邮电大学 通信学院 , 重庆 400065) 摘 要 : 利用 Matlab图形用户界面的开发环境和强大的通信仿 ...

  9. matlab卷积画图,基于MATLAB的卷积演示系统课程设计

    1卷积演示程序设计原理 数字信号处理的直接对象是数字信号,处理的方式是数值运算的方式,它涉及到的内容非常丰富和广泛,它是应用最快.成效最显著的新学科之一,作为信息专业的专业基础课,需要掌握其基本理论和 ...

最新文章

  1. 解决Linux动态库版本兼容问题
  2. linux screen 配置
  3. linux系统调用理解之摘录(1)
  4. CHECKLIST TO USE BEFORE SUBMITTING A PAPER TO A JOURNAL
  5. python 之信号Signal
  6. Wireshark抓包介绍和TCP三次握手分析
  7. 前端学习(588):console面板简介与交互式命令
  8. Mac下配置PHP+Apache+phpMyAdmin+MySql远程链接
  9. 2019数据库趋势报告,最受欢迎的是MySQL
  10. C# NPOI(xlsx相关操作)
  11. 数字转换成货币类型的方法
  12. 【css】鼠标禁用样式
  13. 求一个数的算术平方根
  14. HTML特效代码汇总
  15. 4.2.5 预测分析法与预测分析表的构造
  16. 数据分析师常见面试题.
  17. java到大数据学习路线
  18. “校园舆情监测系统”网站设计及网页编辑总结
  19. Nginx之原理,限流,日志切割,正反代理,HTTPS配置
  20. 用STL进行字符串的分割与合并

热门文章

  1. ffmpeg 提取字幕
  2. 博智云书 | 建筑工程文档管理好帮手
  3. 基于Java毕业设计疫情状态下的图书馆座位预约系统源码+系统+mysql+lw文档+部署软件
  4. cacti监控服务器性能,cacti监控服务器
  5. 软件测试工程师待遇怎么样?
  6. 计算机蓝屏无法启动代码50,电脑蓝屏代码0x0000002E/3F/44/50的原因与解决方法
  7. [原创]金山词霸免费了?
  8. 王者荣耀「挑战者杯」——千亿规模产业背后的网络架构是怎样的?
  9. H3C路由器如何配置Telnet服务?
  10. 德国银杉(DETA)蓄电池/2VEG/2VEH/12VEL系列dryflex