MATLAB实现电磁场gif图像

MATLAB实现电磁场的动态图

  • 前言
  • 基本概念

前言

在之前的文章中笔者已经写清楚了如何利用MATLAB去实现视频动态图,更多的时候我们需要的是如何实现gif这样的动态图像,方便我们在论文里面进行插入,今天笔者做一期关于如何实现电磁场的gif动态图的操作,以供大家进行学习。

基本概念

在之前的文章中笔者已经详细说明了TEM波的表达式,这里笔者就不再去赘述,需要的小伙伴请查看这篇文章 :
基于MATLAB实现电磁场的动画演示
今天实现gif还是采用上面的基本概念,只不过此时是注重使用imwrite函数来进行操作,具体的代码如下所示:

omega = 2*pi;                      %电磁波的角频率,可以自定义
k = 2;                             %电磁波的波数
Z = 0.3;                           %传播空间的波阻抗,可以自定义,但是不能够随意设值,波阻抗是有计算公式的
%% =============均匀平面电磁场===================================================
% 首先绘制均匀平面电磁场的传播示意图
% 电磁场的传播方向沿着x轴(沿着y轴或者z轴只需要修改里面的参数即可)
% 均匀平面波,又称为TEM波,其电矢量和磁矢量在空间上相互垂直,等相位
% 时间传播示意图
% t = linspace(0,10,10);            %表示电磁波传播的时间,10s,时间间隔是0.1s
x = linspace(0,10,100);             %传播的距离沿着x方向传播
nill = zeros(size(x));
t = 0;

% 开始绘制并保存动态图像
% matlab保存gif图像采用imwrite函数
figure('name','平面电磁波的时间传播示意图');
filename = 'TEM.gif';
for i = 1:10
    E = cos(omega*t-k*x);                   %计算电磁波的分量Ey
    H = 0.3.*E;                             %Hz
    quiver3(x,nill,nill,nill,E,nill,'b');   %这里是计算电磁场的传播矢量,利用箭头可以明显的看到其方向
    hold on
    quiver3(x,nill,nill,nill,nill,H,'r');
    hold off
    axis([0,10,-1,1,-1,1]);                 %坐标轴范围设定
    view(20,40);                            %观察的视角
    frame = getframe(gcf);
    im = frame2im(frame);
    [A,map] = rgb2ind(im,256);
    if i == 1
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',0.2);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.2);
    end
    t = t+0.1;
end

MATLAB实现电磁场gif图像_第1张图片
上面实现的是时间传播示意图,再不同时刻情况下,其电磁场的变化情况。

% 空间传播示意图
x=linspace(0,5,50);
% t = linspace(0,1,100);
t=0;
figure('name','平面电磁波的空间传播示意图');
filename1 = 'TEM1.gif';
for i = 1:50
    E = cos(omega*t-k*x(i));                   %计算电磁波的分量Ey
    H = 0.8*E;                             %Hz
    quiver3(x(i),0,0,0,E,0,'b');   %这里是计算电磁场的传播矢量,利用箭头可以明显的看到其方向
    hold on
    quiver3(x(i),0,0,0,0,H,'r');
%     hold off
    axis([0,5,-1,1,-1,1]);                 %坐标轴范围设定
    view(20,40);                            %观察的视角
    frame = getframe(gcf);
    im = frame2im(frame);
    [A,map] = rgb2ind(im,256);
    if i == 1
        imwrite(A,map,filename1,'gif','LoopCount',Inf,'DelayTime',0.1);
    else
        imwrite(A,map,filename1,'gif','WriteMode','append','DelayTime',0.1);
    end
%     t=t+0.01;
end


这里实现的是空间传播示意图

你可能感兴趣的:(电磁场与电磁波,MATLAB操作,matlab,线性代数,算法)