基于MATLAB实现电磁场的动画演示
基于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,writeVideo和close方法从图像*(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)=Emcos(ωt−kz)exH(z,t)=Hmcos(ω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实现电磁场的动画演示相关推荐
- matlab绘制磁场图,基于Matlab的电磁场图示化教学
第 26 卷第 3 期 孝感学院学报 VOL. 26 NO. 3 2006 年 5 月 JOURNAL OF XIAOGAN UNIVERSITY MA Y. 2006 基于 Matlab 的电磁场图 ...
- 基于MATLAB梁模型振型动画程序设计
基于MATLAB梁模型振型动画程序设计 梁模型振型动画 %该模型为一端固定梁模型振型动画 clear; close all; clc % 系统参数 E = 1e7; A = 1.5; rho = 2. ...
- 基于Matlab的电磁场与波“电磁波的入射、反射、透射”仿真—(可实现波形入射反射过程的仿真)
写在前面,本仿真与其他大多数仿真的改进点在于,本仿真实现了对于波形运动情况的仿真,并将大部分情况融合成为一个函数文件,可以通过改变参数实现不同的仿真(就是文章最后那堆代码) 一.正入射的基础驻波实现 ...
- 基于Matlab的电磁场与波“镜像电荷法”仿真——导体球外点电荷的几种情况
目录 零.使用到的绘制电场线方向的原创函数 drawEline函数 1.目的 2.源代码 3.注意事项 一.导体球外点电荷的镜像法(导体球接地情况与不接地情况) 1.目的: 2.理论分析: 3.源代码 ...
- 基于Matlab的电磁场与波“镜像电荷法”仿真——平面导体劈的点电荷镜像
0.代码中用到的drawEline函数 在使用代码前记得把这个函数和仿真文件放到一个文件夹下哦 function pipi=drawEline(h1,d1,d2)posAxes = get(gca, ...
- 基于Matlab的电磁场与波“镜像电荷法”仿真——点电荷位于半球形凸起导体附近
0.代码中用到的drawEline函数 在使用代码前记得把这个函数和仿真文件放到一个文件夹下哦 function pipi=drawEline(h1,d1,d2)posAxes = get(gca, ...
- MATLAB实现电磁场gif图像
MATLAB实现电磁场的动态图 前言 基本概念 前言 在之前的文章中笔者已经写清楚了如何利用MATLAB去实现视频动态图,更多的时候我们需要的是如何实现gif这样的动态图像,方便我们在论文里面进行插入 ...
- matlab演示系统,基于Matlab的通信原理演示系统的设计与应用
基于 Matlab的通信原理演示系统的设计与应用 李 强 , 明 艳 , 吴坤君 (重庆邮电大学 通信学院 , 重庆 400065) 摘 要 : 利用 Matlab图形用户界面的开发环境和强大的通信仿 ...
- matlab卷积画图,基于MATLAB的卷积演示系统课程设计
1卷积演示程序设计原理 数字信号处理的直接对象是数字信号,处理的方式是数值运算的方式,它涉及到的内容非常丰富和广泛,它是应用最快.成效最显著的新学科之一,作为信息专业的专业基础课,需要掌握其基本理论和 ...
最新文章
- 解决Linux动态库版本兼容问题
- linux screen 配置
- linux系统调用理解之摘录(1)
- CHECKLIST TO USE BEFORE SUBMITTING A PAPER TO A JOURNAL
- python 之信号Signal
- Wireshark抓包介绍和TCP三次握手分析
- 前端学习(588):console面板简介与交互式命令
- Mac下配置PHP+Apache+phpMyAdmin+MySql远程链接
- 2019数据库趋势报告,最受欢迎的是MySQL
- C# NPOI(xlsx相关操作)
- 数字转换成货币类型的方法
- 【css】鼠标禁用样式
- 求一个数的算术平方根
- HTML特效代码汇总
- 4.2.5 预测分析法与预测分析表的构造
- 数据分析师常见面试题.
- java到大数据学习路线
- “校园舆情监测系统”网站设计及网页编辑总结
- Nginx之原理,限流,日志切割,正反代理,HTTPS配置
- 用STL进行字符串的分割与合并
热门文章
- ffmpeg 提取字幕
- 博智云书 | 建筑工程文档管理好帮手
- 基于Java毕业设计疫情状态下的图书馆座位预约系统源码+系统+mysql+lw文档+部署软件
- cacti监控服务器性能,cacti监控服务器
- 软件测试工程师待遇怎么样?
- 计算机蓝屏无法启动代码50,电脑蓝屏代码0x0000002E/3F/44/50的原因与解决方法
- [原创]金山词霸免费了?
- 王者荣耀「挑战者杯」——千亿规模产业背后的网络架构是怎样的?
- H3C路由器如何配置Telnet服务?
- 德国银杉(DETA)蓄电池/2VEG/2VEH/12VEL系列dryflex