电磁场与电磁波实验(MATLAB版)

实验一 梯度、散度、旋度的可视化

题目1:应用 MATLAB 编程计算标量函数 f ( x , y ) = x e − x 2 − y 2 f(x,y) = xe^{-x^2-y^2} f(x,y)=xex2y2的二维梯度,并在相同图形窗中绘制等高线和梯度向量。

实验程序:

v = -2:0.2:2;					%定义向量v
[x,y] = meshgrid(v);			%利用v产生网格
z = x.*exp(-x.^2-y.^2);			%计算网格格点上的函数值
[px,py] = gradient(z,.2,.2);	%数值方法计算梯度
figure
contour(x,y,z);					%绘制函数z的等高线
hold on;						%保护模式打开
quiver(x,y,px,py);				%绘制梯度的箭头图
hold off;						%保护模式关闭

程序结果:

电磁场与电磁波实验(MATLAB版)_第1张图片

题目2:应用 MATLAB 编程计算标量函数 f ( x , y ) = x 2 + y 2 f(x,y) = \sqrt{x^2+y^2} f(x,y)=x2+y2 的二维梯度,并在相同图形窗中绘制等高线和梯度向量。

实验程序:

x = linspace(-2,2,25);			%在-2到2取25个点
y = linspace(-2,2,25);			%在-2到2取25个点
[xx,yy] = meshgrid(x,y);		%生成网格采样点
zz = sqrt(xx.^2+yy.^2);			%生成矩阵z
h = contour(xx,yy,zz,12);		%以12个等高线层级绘制矩阵z的等高线图
clabel(h);						%写等高线的值
[dx,dy] = gradient(zz,.2,.2);	%求梯度
hold on;						%做下一幅图时保持原来图像
quiver(xx,yy,dx,dy);			%画矢量图箭头
axis equal;						%等比例显示

程序结果:

电磁场与电磁波实验(MATLAB版)_第2张图片

题目3:应用 MATLAB 编程计算矢量函数 f ( x , y ) = [ c o s ( x + 2 y ) , s i n ( x − 2 y ) ] f(x,y) = [cos(x+2y),sin(x-2y)] f(x,y)=[cos(x+2y),sin(x2y)]的散度,并绘制其结果。

实验程序:

syms x y z real							%定义符号变量
F = [cos(x+2*y),sin(x-2)*y];			%定义函数F
g = divergence(F,[x y]);				%求函数F的散度,符号形式
divF = matlabFunction(g);				%将散度转换为函数形式
x = linspace(-2.5,2.5,20);
[X,Y] = meshgrid(x,x);					%定义网格
Fx = cos(X+Y*2);						%F的x变量
Fy = sin(X-2*Y);						%F的y变量
div_num = divF(X,Y);					%散度的数值形式
pcolor(X,Y,div_num);					%绘制散度
shading interp;							%差值
colorbar;								%绘制色条
hold on;								%保持绘图模式打开
quiver(X,Y,Fx,Fy,'k','linewidth',1);	%绘制箭头图

程序结果:

电磁场与电磁波实验(MATLAB版)_第3张图片
电磁场与电磁波实验(MATLAB版)_第4张图片

题目4:应用 MATLAB 编程计算矢量函数 f ( x , y ) = [ c o s ( x + 2 y ) , s i n ( x − 2 y ) ] f(x,y) = [cos(x+2y),sin(x-2y)] f(x,y)=[cos(x+2y),sin(x2y)]的旋度,并绘制其结果。

实验程序:

syms x y z real							%定义符号变量
F = [cos(x+2*y),sin(x-2*y)];			%定义函数F
G = curl([F,0],[x y z])					%计算F的旋度,并赋予G
curlF = matlabFunction(G(3));			%将G的z分量赋予curlF
x = linspace(-2.5,2.5,20);		
[X,Y] = meshgrid(x,x);					%定义网格
Fx = cos(X+2*Y);						%计算F的x分量
Fy = sin(X-2*Y);						%计算F的y分量
rot = curlF(X,Y);						%计算旋度的值
pcolor(X,Y,rot);						%绘制旋度
shading interp;							%颜色做插值
colorbar;								%绘制色条
hold on;								%保持模式打开
quiver(X,Y,Fx,Fy,'k','linewidth',1);	%绘制箭头图,并设置颜色为黑色,线宽为1

程序结果:

电磁场与电磁波实验(MATLAB版)_第5张图片
电磁场与电磁波实验(MATLAB版)_第6张图片

实验二 电力线、等势线的可视化

题目1:应用 MATLAB 编程绘制两个不等量同号电荷对应的电力线分布。

实验程序:

x = -4:0.02:4;						%生成一系列坐标x,y
y = x;
[X,Y] = meshgrid(x,y);				%生成网格数据
R1 = sqrt((X+1).^2+Y.^2);			%场点距离左侧电荷的距离
R2 = sqrt((X-1).^2+Y.^2);			%场点距离右侧电荷的距离
phi = 1./R1+2./R2;					%计算电势(Q* = q2/q1 = 2)
[Ex,Ey] = gradient(-phi);			%取梯度计算电场
hold on;							%叠加绘图模式
r0 = 0.1;							%电场线起点所在圆半径
th = 20:20:360-20;					%以20度为间隔,均分圆周
th = th * pi / 180;					%转换角度为弧度
x1 = r0 * cos(th) - 1;				%左侧电荷起点横坐标
y1 = r0 * sin(th);					%左侧电荷起点纵坐标
h = streamline(X,Y,Ex,Ey,x1,y2);	%绘制左侧电荷对应的流线,即为电场
xr = -x1;							%右侧电荷对应的起始点横坐标
yr = y1;							%右侧电荷对应的起始点纵坐标
h = streamline(X,Y,Ex,Ey,xr,yr);	%绘制右侧电荷对应的流线
axis image;							%等比例绘制图像

程序结果:

电磁场与电磁波实验(MATLAB版)_第7张图片

题目2:应用 MATLAB 编程绘制两个不等量异号电荷对应的电力线分布。

实验程序:

x = -4:0.02:4;							%生成一系列坐标x,y
y = x;			
[X,Y] = meshgrid(x,y);					%生成网格数据
R1 = sqrt((X+1).^2+Y.^2);				%场点距离左侧电荷的距离
R2 = sqrt((X-1).^2+Y.^2);				%场点距离左侧电荷的距离
phi = 1./R1-2./R2;						%计算电势(Q* = q2/q1 = -2)
[Ex,Ey] = gradient(-phi);				%取梯度计算电场
hold on;								%叠加绘图模式
r0 = 0.1;								%电场线起点所在圆的半径
th = 20:20:360-20;						%以20°为间隔均分圆周
th = th * pi / 180;						%转换角度为弧度
x1 = r0 * cos(th) - 1;					%左侧电荷起点横坐标
y1 = r0 * sin(th);						%左侧电荷起点纵坐标
h = streamline(X,Y,Ex,Ey,x1,y2);		%绘制左侧电荷对应的流线,即为电场线
xr = -x1;								%右侧电荷对应的起始点横坐标
yr = y1;								%右侧电荷对应的起始点纵坐标
h = streamline(X,Y,-Ex,-Ey,xr,yr);		%绘制右侧电荷对应的流线
axis image;								%等比例绘制图像

程序结果:

电磁场与电磁波实验(MATLAB版)_第8张图片

题目3:应用 MATLAB 编程绘制三维等势面。例如对于放置在 ( − a , 0 , 0 ) , ( a , 0 , 0 ) (-a,0,0),(a,0,0) (a,0,0),(a,0,0)处的两个点电荷,其带电量均为 2,绘制其对应的等势面。

实验程序:

①绘制单一等势面。

q1 = 2;												%电荷1的电量
q2 = 2;												%电荷2的电量
a = 2;												%两个电荷之间的位置,(-a,0,0),(a,0,0)
x = linspace(-5,5,50);								%x轴范围,从-5到5,划分成50个点
[X,Y,Z] = meshgrid(x);								%在xyz坐标系内,构建一个立体网络
r1 = sqrt((X-a).^2+Y.^2+Z.^2);						%计算到右边电荷(a,0,0)的距离
r2 = sqrt((X+a).^2+Y.^2+Z.^2);						%计算到左边电荷(-a,0,0)的距离
U = q1./r1+q2./r2;									%电势的分布
[f,v] = isosurface(X,Y,Z,U,1.6);					%计算等势面对应的面元和顶点
p = patch('Faces',f,'Vertices',v);					%绘制等势面
set(p,'FaceColor','red','EdgeColor','none');		%修饰等势面,这里面元为红色,无边沿色
view(3);											%默认为三维视角
axis equal;											%等比例显示
camlight;											%设置光线

②多个等势面同时绘制。

q1 = 2;												%电荷1的电量
q2 = 2;												%电荷2的电量
a = 2;												%两个电荷之间的位置,(-a,0,0),(a,0,0)
x = linspace(-5,5,50);								%x轴范围,从-5到5,划分成50个点
[X,Y,Z] = meshgrid(x);								%在xyz坐标系内,构建一个立体网络
r1 = sqrt((X-a).^2+Y.^2+Z.^2);						%计算到右边电荷(a,0,0)的距离
r2 = sqrt((X+a).^2+Y.^2+Z.^2);						%计算到左边电荷(-a,0,0)的距离
U = q1./r1+q2./r2;									%电势的分布
[f,v] = isosurface(X,Y,Z,U,1.6);					%计算等势面对应的面元和顶点
p = patch('Faces',f,'Vertices',v);					%绘制等势面
set(p,'FaceColor','red','EdgeColor','none');		%修饰等势面,这里面元为红色,无边沿色
hold on;											%叠加绘制模式
p = patch(isosurface(X,Y,Z,U,1.2));					%计算等值面并绘制,返回句柄p
set(p,'FaceColor','none','EdgeColor','green');		%对等值面进行修饰,无面元色,边沿为绿色
view(3);											%默认为三维视角
axis equal;											%等比例显示
camlight;											%设置光线

程序结果:

①绘制单一等势面。

电磁场与电磁波实验(MATLAB版)_第9张图片

②多个等势面同时绘制。

电磁场与电磁波实验(MATLAB版)_第10张图片

实验三 静态场问题求解及可视化

题目1:考虑一个静电场问题,其对应的定解问题如下: { Δ u = 0 u ∣ x = 0 = 0 , u ∣ x = 1 = 0 u ∣ y = 0 = 0 , u ∣ y = 1 = s i n ( 2 π x ) \left\{\begin{matrix}\Delta u = 0 \\ u |_{x=0} = 0,u |_{x=1} = 0 \\ u |_{y=0} = 0,u |_{y=1} = sin(2\pi x)\end{matrix}\right. Δu=0ux=0=0,ux=1=0uy=0=0,uy=1=sin(2πx)题目给出了一个正方形边界四条边上的电磁分布值,然后计算正方形区域内部的电势分布。

(1)解析解:用分离变量法对该问题进行求解,得到严格的解析解为 u = 1 s i n h ( 2 π ) s i n ( 2 π x ) s i n h ( 2 π y ) u = {1\over sinh(2\pi)}sin(2\pi x)sinh(2\pi y) u=sinh(2π)1sin(2πx)sinh(2πy)请使用 surf 函数和 pcolor 函数绘制该函数的图像。

实验程序:

x=linspace(0,1,100);							%x取从0到1区间的100个点
y=linspace(0,1,100);							%y取从0到1区间的100个点
[X,Y]=meshgrid(x,y);							%绘制网格,并将给单坐标赋予X,Y
u=1/(sinh(2*pi))*sin(2*pi*X).*sinh(2*pi*Y);		%计算电势值
surf(X,Y,u);									%绘制曲面图
shading interp;									%曲面彩色做插值
figure;											%创建新的图形窗口
pcolor(X,Y,u);									%绘制伪彩色图
shading interp;									%色彩做插值处理
colorbar;										%绘制带色阶的颜色条

程序结果:

电磁场与电磁波实验(MATLAB版)_第11张图片
电磁场与电磁波实验(MATLAB版)_第12张图片

(2)数值解:采用 MATLAB 中的 PDETool 进行数值求解,并与解析法得到的结果做对比。具体步骤如下:

第一、在 MATLAB 命令行下,输入 PDETool,进入图形界面。

第二、在工具栏上单击矩形绘制按钮,绘制一个边长为 1 的正方形。

第三、单击边界条件设定按钮,进入边界条件设置状态;用鼠标双击正方形的边,根据题目设置边界条件。注意,对于第四个边界条件,应该输入对应的函数表达式。

第四、单击方程类型设置按钮,选择椭圆类型,并设置 f 为零,表示齐次方程。

第五、单击网格生成按钮,产生有限元网格。

第六、单击细化网格按钮二次,对产生的网格进行细化。

第七、单击求解按钮,则系统进行数值求解过程,并给出所得解的伪彩色示意图。

第八、单击绘图按钮,选择 Height,可以得到解的高度图,即曲面图。

最后:如果有帮助就来个点赞、收藏、评论鼓励一下吧!

你可能感兴趣的:(matlab,经验分享,开发语言)