写在前面,本仿真与其他大多数仿真的改进点在于,本仿真实现了对于波形运动情况的仿真,并将大部分情况融合成为一个函数文件,可以通过改变参数实现不同的仿真(就是文章最后那堆代码)
一、正入射的基础驻波实现
1.原理:
通过Matlab中的相关函数公式,仿真课本上电磁波的正入射过程中驻波的形成。代码中主要通过for循环对函数进行绘制
此代码与类似代码实现的效果并无不同
2.代码
w = 10; %角频率,可以改变周期和震荡速录
x = -3:0.02:1; %x轴坐标取样,可以改变波的长度
po1=0; %用于入射波的数据点计数
po2=0; %用于反射波和驻波的数据点计数beta0 = w/2;
w0 = w*0.01;for t=1:500 %循环次数,即动画持续时间Ei = cos(w0*t-beta0*x-pi/3); %计算入射波Eo = cos(w0*t+beta0*x-pi/2); %计算反射波Ez = Ei + Eo; %计算合成驻波plot([-3,1],[0,0],'k','LineWidth',2); %画y参考轴线,不画的话图像会出问题hold on;plot([1,1],[-3,3],'k','LineWidth',2); %画x参考轴线axis([-3,3,-3,3]); %固定视角plot(x, Ei,'b','LineWidth',2); %绘制入射波plot(x, Eo,'r','LineWidth',2); %绘制反射波plot(x, Ez,'k','LineWidth',2); %绘制驻波xlabel('x','FontSize',10) %x标签ylabel('y','FontSize',10) %z标签hold off;title('均匀平面波正入射理想导体','FontSize',10,'color','k');text(1.5,0,'\it理想导体','FontSize',20);text(-2,2.2,'\itE_y','FontSize',20);drawnow; %更新画面,形成动画
End
3.仿真效果图
二、正入射理想导体
1.原理:
在上一个基础驻波的形成的基础上,加上了一个波形传播的模拟函数,其主要思想是在循环中嵌套进多层if条件判断,对于没有传播到的位点赋值为零,调整好初相位后即可实现对于波运动状态的模拟。
2.代码
w = 10; %角频率,可以改变周期和震荡速录
x = -3:0.02:1; %x轴坐标取样,可以改变波的长度
po1=0; %用于入射波的数据点计数
po2=0; %用于反射波和驻波的数据点计数beta0 = w/2;
w0 = w*0.01;for t=1:1000 %循环次数,即动画持续时间Ei = cos(w0*t-beta0*x-pi/3); %计算入射波Eo = cos(w0*t+beta0*x-pi/2); %计算反射波Ez = Ei + Eo; %计算合成驻波plot([-3,1],[0,0],'k','LineWidth',2); %画y参考轴线,不画的话图像会出问题hold on;plot([1,1],[-3,3],'k','LineWidth',2); %画x参考轴线axis([-3,3,-3,3]); %固定视角if t<length(x)if po1<length(x)po1=po1+1;for a=t:length(x)Ei(a)=0; endendend %通过循环将入射波的传播方式模拟出来,没传到的地方置零plot(x, Ei,'b','LineWidth',2); %绘制入射波if t>length(x)if po2<length(x)po2=po2+1;for b=1:length(x)-po2Eo(b)=0;Ez(b)=0;endend plot(x, Eo,'r','LineWidth',2); %绘制反射波plot(x, Ez,'k','LineWidth',2); %绘制驻波end%通过循环将反射波和驻波的传播方式模拟出来,没传到的地方置零xlabel('x','FontSize',10)%x标签ylabel('y','FontSize',10) %z标签hold off;title('均匀平面波正入射理想导体','FontSize',10,'color','k');text(1.5,0,'\it理想导体','FontSize',20);text(-2,2.2,'\itE_y','FontSize',20);drawnow; %更新画面,形成动画
End
3.仿真效果图
三、正入射理想介质
1.原理:
在上一个基础驻波的形成的基础上,加上了一个波形传播的模拟函数,其主要思想是在循环中嵌套进多层if条件判断,对于没有传播到的位点赋值为零,调整好初相位后即可实现对于波运动状态的模拟。
2.代码
w = 10; %角频率,可以改变周期和震荡速录
x = -3:0.02:0; %x轴坐标取样,可以改变波的长度
y = 0:0.02/3:3;
po1=0; %用于入射波的数据点计数
po2=0; %用于反射波和驻波的数据点计数
po3=0;beta0 = w/2;
w0 = w*0.01;
ur = 9;
er = 1; %设置已知量beta1 = sqrt(ur*er)*beta0;
F = 1/2; %发射系数
T = 3/2; %折射系数for t=1:1000 %循环次数,即动画持续时间Ei = cos(w0*t-beta0*x-pi/3); %计算入射波Eo = 0.5*cos(w0*t+beta0*x-pi/3); %计算反射波,折射系数为0.5Et = 1.5*cos(w0*t-beta1*y-pi/3); %计算透射波,折射系数为1.5 Ez = Ei + Eo; %计算合成驻波plot([-3,3],[0,0],'k','LineWidth',2); %画y参考轴线,不画的话图像会出问题hold on;plot([0,0],[-3,3],'k','LineWidth',2); %画x参考轴线axis([-3,3,-3,3]); %固定视角if t<length(x)if po1<length(x)po1=po1+1;for a=t:length(x)Ei(a)=0; endendend %通过循环将入射波的传播方式模拟出来,没传到的地方置零plot(x, Ei,'b','LineWidth',1); %绘制入射波if t>length(x)if po2<length(x)po2=po2+1;for b=1:length(x)-po2Eo(b)=0;Ez(b)=0;endendplot(x, Eo,'r','LineWidth',1); %绘制反射波plot(x, Ez,'k','LineWidth',2); %绘制合成驻波if po3<length(y)po3=po3+1;for c=t-length(x):length(y)Et(c)=0; endend plot(y, Et,'k','LineWidth',2); %绘制透射波 endxlabel('x','FontSize',10)%x标签ylabel('y','FontSize',10) %z标签hold off;title('均匀平面波正入射理想导体','FontSize',10,'color','k');text(1,2,'\it理想介质','FontSize',20);text(-2,2.2,'\itE_y','FontSize',20);drawnow; %更新画面,形成动画
End
3.仿真效果图
四、程序代码
1.原理:
在以上三个代码的基础上,我重新改善了代码结构,将两个代码融合,并将波形的显示长度,运行速度,以及两种媒质的三个电磁常量设置为程序的变量。通过嵌套多层判断实现对于不同媒质电导率(0或无穷大)的判断,判断是否为理想介质还是理想导体,进而绘制出不同的波形。
2.代码
% %lxjz_prj是一个用来实现不同参数的两种理想介质之间的电磁波传播的仿真函数
% %为--周一七八节第四组--原创函数,如有雷同,纯属巧合
% %以下部分为设置参数建议,函数较为简陋,还请手动调试参数
% %function lxjz_prj(sudu,bo,ur1,er1,ur2,er2)
% sudu = 0.04; %sudu用于控制图像速度,且与图像的分辨率有关,建议大小为0.01~0.05
% bo =3; %bo用于控制图像显示的波长,建议大小为1~5
% % 请注意:sudu*bo最好小一些,否则会导致图像分辨率过低,出现图像bug
% ur1 = 4; %设置已知量
% er1 = 9;
% % gama1 = 0;
% ur2 = 9;
% er2 = 4;
% gama2 = 0;
function zrs(sudu,bo,ur1,er1,ur2,er2,gama2)w = 2*pi; %角频率,可以改变周期和震荡速录,f = 1, v0=3
k0 = w/bo;
w0 = w*sudu; %后面乘上的数要和x,y的分度保持一致,用于控制图像向右的速度
gen1 = sqrt(ur1*er1);
gen2 = sqrt(ur2*er2); %用于求β
gen11 = sqrt(ur1/er1);
gen22 = sqrt(ur2/er2);x = -3:sudu*bo/gen1:0; %x轴坐标取样,可以改变波的长度
y = 0:sudu*bo/gen2:3;
po1=0; %用于入射波的数据点计数
po2=0; %用于反射波和驻波的数据点计数
po3=0;k1 = gen1*k0; %即β1
k2 = gen2*k0; %即β2
R = (gen22-gen11)/(gen22+gen11); %反射系数
T = 2*gen22/(gen22+gen11); %透射系数
if gama2 == InfR = -1;T = 0;
endfor t=1:500 %循环次数,即动画持续时间Ei = cos(w0*t-k1*x-pi/2); %计算入射波Er = R*cos(w0*t+k1*x-pi/2); %计算反射波,折射系数为REt = T*cos(w0*t-k2*y-pi/2); %计算透射波,折射系数为TEz = Ei + Er; %计算合成驻波plot([-4,4],[0,0],'k','LineWidth',2); %画y参考轴线,不画的话图像会出问题hold on;plot([0,0],[-3,3],'k','LineWidth',2); %画x参考轴线axis([-3,3,-3,3]); %固定视角if t<length(x)if po1<length(x)po1=po1+1;for a=t:length(x)Ei(a)=0; endendend %通过循环将入射波的传播方式模拟出来,没传到的地方置零plot(x, Ei,'b','LineWidth',1); %绘制入射波if t>length(x)if po2<length(x)po2=po2+1;for b=1:length(x)-po2Er(b)=0;Ez(b)=0;endendplot(x, Er,'r','LineWidth',1); %绘制反射波plot(x, Ez,'k','LineWidth',2); %绘制合成驻波if po3<length(y)po3=po3+1;for c=t-length(x):length(y)Et(c)=0; endend plot(y, Et,'k','LineWidth',2); %绘制透射波 endxlabel('x','FontSize',10) %x标签ylabel('y','FontSize',10) %z标签hold off;title('均匀平面波正入射','FontSize',10,'color','k');if gama2 == 0text(1,2.2,'\it理想介质','FontSize',20);elsetext(1,2.2,'\it理想导体','FontSize',20);endtext(-2,-2.2,'\itE_y','FontSize',20);text(-2,2.2,'\it理想介质','FontSize',20);drawnow; %更新画面,形成动画
End
以下为函数的帮助文档,通过改变参数,可以通过此函数实现电磁波入射不同介质的波形的仿真