公告:网站程序已升级到1.8.3,修复了提问时可能报错的问题,请清除浏览器缓存
2019-11-10

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+3 投票
1.5k 浏览

如何画出类似《复分析:可视化方法》书中复平面上的网格在复函数映射下的图像?

分类:绘图 | 用户: 天龙七绝剑 (421 分)

3 个回答

+6 投票
 
已采纳

内置函数即可解决:

Show[ParametricPlot[ReIm[Exp[#]], {x, -2, 2}, {y, -2, 2}, 
    Mesh -> Full] & /@ {x + I y, x + (2 x + 2) I, x + x I}, 
 PlotRange -> All]

Show[ParametricPlot[ReIm[Cos[x + I y]], {x, Pi/4, Pi}, {y, -2, -1}, 
  Mesh -> Full], 
 ParametricPlot[ReIm[Cos[#]], {x, -4, 4}, {y, -2, 2}, 
    Mesh -> Full] & /@ {x - I, Pi/4 + I y}, PlotRange -> All]

用户: happyfish (1.8k 分)
采纳于 用户:天龙七绝剑
一直没发现ParametricPlot还能实现这样的效果,如果想在线上标箭头,该如何实现?
+4 投票

这是很早之前貌似从一本书上学习 Mathematica 时写的,算法原理也是书上的,年代太久远,我记不清楚出处了。

定义两个函数,分别是 CartesianMap 和 PolarMap 用来处理直角坐标和极坐标下的绘图,可接受绘图参数来控制图形显示效果。( 这两个函数后来加入系统扩展包中了,再到后来又取消了,见评论链接,不过仍然不失为一种不错的方法)具体用法我举几个例子说明一下。

$Lines = 15;
Options[CartesianMap] = Options[PolarMap] = {Lines -> $Lines};
CartesianMap[
    func_, {x0_, x1_, dx_: Automatic}, {y0_, y1_, dy_: Automatic}, 
    opts___?OptionQ] /; 
   VectorQ[{x0, x1, y0, y1}, 
     NumericQ] && (NumericQ[dx] || 
      dx === Automatic) && (NumericQ[dy] || dy === Automatic) := 
  Module[{x, y}, 
   Picture[CartesianMap, 
    func[x + I*y], {x, x0, x1, dx}, {y, y0, y1, dy}, opts]];
PolarMap[func_, {r0_: 0, r1_, dr_: Automatic}, {p0_, p1_, 
     dp_: Automatic}, opts___?OptionQ] /; 
   VectorQ[{r0, r1, p0, p1}, 
     NumericQ] && (NumericQ[dr] || 
      dr === Automatic) && (NumericQ[dp] || dp === Automatic) := 
  Module[{r, p}, 
   Picture[PolarMap, 
    func[r*Exp[I*p]], {r, r0, r1, dr}, {p, p0, p1, dp}, opts]];
PolarMap[func_, rr_List, opts_?OptionQ] := 
  PolarMap[func, rr, {0, 2*Pi}, opts];
Picture[cmd_, e_, {s_, s0_, s1_, ds_}, {t_, t0_, t1_, dt_}, opts___] :=
   Module[{hg, vg, lines, nds = ds, ndt = dt}, 
   lines = Lines /. {opts} /. Options[cmd]; 
   If[Head[lines] =!= List, lines = {lines, lines}]; 
   If[ds === Automatic, nds = N[(s1 - s0)/(lines[[1]] - 1)]]; 
   If[dt === Automatic, ndt = N[(t1 - t0)/(lines[[2]] - 1)]];  
   hg = Curves[e, {s, s0, s1, nds}, {t, t0, t1}, opts]; 
   vg = Curves[e, {t, t0, t1, ndt}, {s, s0, s1}, opts]; 
   Show[Graphics[Join[hg, vg]], 
    Evaluate[FilterRules[{opts}, Options[Graphics]]], 
    AspectRatio -> Automatic, Axes -> True]];
Curves[xy_, spread_, bounds_, opts___] := 
  With[{curves = Table[{Re[xy], Im[xy]}, spread]}, 
   ParametricPlot[curves, bounds, DisplayFunction -> Identity, 
     Evaluate[FilterRules[{opts}, Options[ParametricPlot]]]][[1]]];

指数函数

余弦函数

自定义的函数:倒数

Zeta 函数

复共轭的倒数

上面都是直角坐标下的图形,极坐标下的用法是完全相同的,不再举例说明。

用户: amita (481 分)
修改于 用户:amita
CartesianMap和PolarMap在5.2以后就被ParametricPlot取代了。http://reference.wolfram.com/language/Compatibility/tutorial/Graphics/ComplexMap.html
很早之前貌似是从一本书上练习的,那本书好像是很老
0 投票

答案搬运自 http://mathematica.stackexchange.com/questions/30687/draw-the-image-of-a-complex-region/30872#30872

可以自定义一个函数,将x轴和y轴分别表示实轴和虚轴

Clear[ComplexPlot]
SetAttributes[ComplexPlot, HoldAll];
ComplexPlot[f_, {z_, zmin_?NumericQ, zmax_?NumericQ}, 
  opts : OptionsPattern[ParametricPlot]] := 
 Block[{zz = z, u, v, ulims, vlims}, 
  ulims = {Min[#], Max[#]} &@{Re[zmin], Re[zmax]};
  vlims = {Min[#], Max[#]} &@{Im[zmin], Im[zmax]};
  With[{uu = {u, ##} & @@ ulims, vv = {v, ##} & @@ vlims}, 
   ParametricPlot[{Re[f], Im[f]} /. z :> (u + I v), uu, vv, opts]]]
ComplexPlot[E^z, {z, -2 Pi - 2 Pi I, 2 Pi + 2  Pi I}, 
 PlotRange -> Full, Mesh -> 50, MeshStyle -> {Orange, Green}]

e^[z]的图如下

 

用户: 小菜220 (66 分)
修改于 用户:amita
...