使用 MATLAB 可视化麦克斯韦方程组
计算科学
matlab
pde
可视化
绘图
电磁学
2021-12-17 09:15:38
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 的任何文本,请告诉我。如果您决定尝试编写代码并在任何地方卡住,也可以随时要求我查看任何代码。
