在 Python 和 Mathematica 中可视化复值函数

发布时间:2026/5/30 9:39:04

在 Python 和 Mathematica 中可视化复值函数 原文towardsdatascience.com/today-i-was-pouring-through-my-complex-variables-and-analytic-functions-book-written-by-the-e9205f71485d?sourcecollection_archive---------8-----------------------#2024-02-19解锁数学难题的视觉洞察https://medium.com/Dani_Lisle?sourcepost_page---byline--e9205f71485d--------------------------------https://towardsdatascience.com/?sourcepost_page---byline--e9205f71485d-------------------------------- Dani Lisle·发表于 Towards Data Science ·3 分钟阅读·2024 年 2 月 19 日–今天我正在翻阅由受尊敬的 Fornberg 和 Piret 编写的*《复变函数与解析函数》*尽力理解复值函数的行为。由于这些函数既有实数输入也有虚数输入并且输出两个分量因此单一的 3D 图形不足以展示函数的行为。我们需要将这种可视化拆分为实部和虚部的单独图表或者按幅度和相位角度来展示。我希望能够随意操作任何想到的函数拖动和缩放其图表并在可视化细节中探索它以理解它如何从方程中得出。对于这样的任务Wolfram Mathematica 是一个很好的起始工具。Wolfram 语言plotComplexFunction[f_]:Module[{z,rePlot,imPlot,magPlot,phasePlot},zxI y;rePlotPlot3D[Re[f[z]],{x,-2,2},{y,-2,2},AxesLabel-{Re(z),Im(z),Re(f(z))},Mesh-None];imPlotPlot3D[Im[f[z]],{x,-2,2},{y,-2,2},AxesLabel-{Re(z),Im(z),Im(f(z))},Mesh-None];magPlotPlot3D[Abs[f[z]],{x,-2,2},{y,-2,2},AxesLabel-{Re(z),Im(z),Abs(f(z))},Mesh-None,ColorFunction-Function[{x,y,z},ColorData[Rainbow][Rescale[Arg[xI y],{-Pi,Pi}]]],ColorFunctionScaling-False];phasePlotDensityPlot[Arg[f[z]],{x,-2,2},{y,-2,2},ColorFunction-Rainbow,PlotLegends-Automatic,AxesLabel-{Re(z),Im(z)},PlotLabel-Phase];GraphicsGrid[{{rePlot,imPlot},{magPlot,phasePlot}},ImageSize-800]];f[z_]:(1/2)*(z1/z);plotComplexFunction[f]https://github.com/dreamchef/complex-functions-visualizationgithub.com/dreamchef/complex-functions-visualization我编写了上述 Mathematica 代码用于生成一个图表网格展示如上所述的两种方式的函数。在顶部显示了函数的虚部和实部https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9b6073b85b9639da070285491a0935ae.png底部显示了幅度和相位以颜色表示https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0234fbdcc4486ce649d41dee4561a6a0.png来自 Wolfram 的分量和幅度-相位图 f(z)在用这段代码玩了几个函数并确信它们有意义之后我对如何在 Python 中实现相同功能产生了兴趣以便将其与其他数学编程项目连接起来。Python、PyPlot 和 complex-plotting-tools我在 GitHub 上找到了一个很棒的项目github.com/artmenlope/complex-plotting-tools我决定将其作为起点并有可能在未来做出贡献。这个仓库提供了一个非常简单的界面用于以多种方式绘制复值函数。感谢github.com/artmenlope例如在导入numpy、matplotlib和该仓库的cplotting_tools模块后定义函数并调用cplt.complex_plot3D(x,y,f,log_modeFalse)将生成以下内容https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/da80e1f86e6827c86fbbf1432799ac18.png来自 complex-plotting-tools 的 f(z)幅度和相位图这些图都是用于上面相同的 f(z)。要查看该函数的虚部和实部并排显示可以使用cplot.plot_re_im(x,y,f,camptwilight,contourFalse,alpha0.9)https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4d9943d906a41a280988bde245410cb8.png来自 complex-plotting-tools 的分量绘图此外该库还提供了其他酷炫的方式来研究函数包括流线图https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c026babc96d69ed06a58d6453cc920af.png来自 complex-plotting-tools 的 f(z)流线图未来方向这个库展示了很大的潜力且相对容易使用它确实需要定义一个pts变量用于编码给定函数的极点和零点。Wolfram 不需要这个因为它在幕后计算这些点的位置。如果 complex-plotting-tools 也具备这个功能将为用户节省大量的精力。我计划在不久的将来将其实现到该模块中。与此同时尽情享受使用 Wolfram 和 Python 绘图的乐趣欢迎在下方评论中分享您的想法和问题或通过LinkedIn与我联系或在GitHub与我合作除非另有说明所有图片均由作者创建。

相关新闻