使用 MATLAB 可视化麦克斯韦方程组

计算科学 matlab pde 可视化 绘图 电磁学
2021-12-17 09:15:38

我问这个问题是为了帮助我理解麦克斯韦方程之一发生了什么。我很高兴现在能在纸上完成数学运算,但想使用 MATLAB 更进一步,并在计算机上实际进行数学运算。这是我真正挣扎的地方,因为我使用计算机的大部分内容是曲线拟合、数字或符号积分以及数据处理。

所以在这种情况下,我有等式:

×E=Bt

并希望在 MATLAB 中以全 3D 形式使用电气和磁对应物的适当术语来做这个方程:

E(r,t)=E0exp[i(k0rω0t)]

最终获得电磁波的规范图(感谢这张图片的这个线程):

在此处输入图像描述

现在我很确定它meshgrid()与 MATLAB 的curl()功能有关,但不知道从哪里开始。我希望这个问题是有道理的。谢谢

2个回答

这里我有一个例子:

x = linspace(-5,5,100);
y = linspace(-5,5,100);
z = linspace(-5,5,100);

[X, Y, Z] = meshgrid(x, y, z);

Ex = sin(2*pi/5*Z);
Ey = 0*X;
Ez = 0*X;

[Bx, By, Bz, V] = curl(X, Y, Z, Ex, Ey, Ez);

Eplot = 0*x;
Bplot = 0*x;
for i=1:100  %% Integration-like procedure
    Eplot(i) = mean(mean(Ex(:,:,i),1),2);
    Bplot(i) = mean(mean(By(:,:,i),1),2);
end


plot3(0*x, y, Eplot, 'b', 'LineWidth', 2); hold on
h = quiver3(0*x(1:3:100), y(1:3:100), 0*z(1:3:100), 0*x(1:3:100), 0*y(1:3:100), Eplot(1:3:100), 0, 'b', 'LineWidth', 1);
set (h, "maxheadsize", 0.0);
plot3(Bplot, y, 0*z, 'g', 'LineWidth', 2);
h = quiver3(0*x(1:3:100), y(1:3:100), 0*z(1:3:100), Bplot(1:3:100), 0*y(1:3:100), 0*z(1:3:100), 0, 'g', 'LineWidth', 1);
set (h, "maxheadsize", 0.0);
grid on, axis square

我不明白你的意思integration,所以我计算了每个平面的平均值(在这种情况下与绘制一条线相同)。这是在 Octave 中完成的,因为我的笔记本电脑中没有 Matlab 许可证,但它应该可以工作。这是我获得的图像: 在此处输入图像描述

从浏览一些论坛帖子来看,这些方程的数值解似乎并非易事。参见,例如,这个讨论(诚然,现在已经过时了)。您在帖子中指出您对数值 PDE 求解器相对较新,因此以下参考资料可能比您希望的更多。特别是,它们要求您编写自己的求解器,而不是调用 ode45 或其他一些固定例程。

参考1:在对系统进行了简短的理论讨论之后,本文档提出了几种求解系统的显式方案,从一维波动方程开始。这些解决方案包含伪代码和彻底的讨论,并从用于 1D 问题的更简单的有限差分方案到更高级的 2D 和 3D 特征值问题。请注意,这里没有 Matlab 代码,因此如果这是您希望使用的语言/软件,则需要将伪代码翻译成 Matlab。在您完成各种解决方案时,有几个关于收敛速度和稳定性的练习。阅读本文可能会花费您几个小时(我知道这对我来说会),但如果您是数字 PDE 的新手,这是一种相对快速地学习很多东西的绝妙方法。我没有

参考资料 2:这是更高级的,并提出了有限元法 (FEM) 来求解麦克斯韦方程组。它似乎还可以处理一些您可能不感兴趣的高级应用程序。尽管如此,原始系统在第一章中使用 FEM 完全解决。如果您还没有听说过 FEM 或有限差分,我建议从后者开始,因为它往往更直观(尽管有时很乏味)。

如果您想参考有限差分或 FEM 的任何文本,请告诉我。如果您决定尝试编写代码并在任何地方卡住,也可以随时要求我查看任何代码。