Mathematica:展示极坐标形式的复数

3

我希望以三角形式显示复数。例如:

z = (-4)^(1/4);

我不确定这个命令是什么,而且写成这样很傻:

alt text

我认为,命令应该是ExpToTrig,但解决方案不可能只是1+i(或者可以吗,我在误用它?)。如何以三角形式显示复数。

编辑:

命令是ExpToTrig,它只给出了部分解决方案(或者我没有找到如何使用它)。最终通过编写一个纯函数NrootZpolar[n][z]来解决我的问题:

NrootZpolar := 
 Function[x, 
  Function[y, 
       ( Abs[y] ^ (1/x) *
       ( Cos[((Arg[y] + 360° * Range[0, x - 1]) / x)] + 
       I*Sin[((Arg[y] + 360° * Range[0, x - 1]) / x)]))
  ]
 ]

并使用:

In[689]:= FullSimplify[NrootZpolar1[4][-4]]
Out[689]= {1 + I, -1 + I, -1 - I, 1 - I}

可视化:

ComplexListPlot[list_] := ListPlot[Transpose[{Re[list], Im[list]}], AxesLabel -> {Re, Im}, PlotLabel -> list, PlotMarkers -> Automatic]
Manipulate[ComplexListPlot[FullSimplify[NrootZpolar1[n][z]]], {z, -10, 10}, {n, 1, 20}]

alt text


你的最终代码没有给出你期望的答案,原因是 /4 的位置不正确。它不应该影响到 Arg[x] 项。将右括号 ) 向右移动几个字符,就可以解决问题了。 - Simon
1
在您提供的图像中也犯了同样的错误。顺便说一下,为了书写漂亮的公式,您不应该使用普通的“Input”单元格。相反,右键单击笔记本并选择“插入新单元格> DisplayFormula”。 - Simon
3个回答

3

您可以用极坐标形式 r(cos theta + i sin theta) 表示一个复数 z,其中 r = Abs[z],theta = Arg[z]。因此,您只需要使用 Mathematica 中的 Abs[] 和 Arg[] 命令。


1
如果您只需要偶尔这样做,那么您可以定义一个函数,例如:
In[1]:= ComplexToPolar[z_] /; z \[Element] Complexes := Abs[z] Exp[I Arg[z]]

以便

In[2]:= z = (-4)^(1/4);
In[3]:= ComplexToPolar[z]
Out[3]= Sqrt[2] E^((I \[Pi])/4)

In[4]:= ComplexToPolar[z] == z // FullSimplify
Out[4]= True

对于展开函数(注意这不是你问题的一部分),你可以使用

In[5]:= ComplexExpand[, TargetFunctions -> {Abs, Arg}]

最后,如果您总是希望以极坐标形式书写复数,则可以使用类似以下的代码:

In[6]:= Unprotect[Complex];
In[7]:= Complex /: MakeBoxes[Complex[a_, b_], StandardForm] := 
 With[{abs = Abs[Complex[a, b]], arg = Arg[Complex[a, b]]}, 
  RowBox[{MakeBoxes[abs, StandardForm], 
    SuperscriptBox["\[ExponentialE]", 
      RowBox[{"\[ImaginaryI]", MakeBoxes[arg, StandardForm]}]]}]]

将使转换自动化

In[8]:= 1 + I
Out[8]= Sqrt[2]*E^(I*(Pi/4))

请注意,这仅适用于显式复数——即那些具有Complex[a,b]FullForm。如果您不对其使用Simpify之类的函数,则它将无法处理上面定义的z

另请参阅 https://groups.google.com/d/topic/comp.soft-sys.math.mathematica/Fz9xvjKRlsA - Simon

1
从数学角度来看,(-1)^(1/4) 是符号滥用。这样的数字并不存在。
使用这种滥用符号表达的是方程的根:
z^4 == 1  

在Mathematica中(就像一般的数学一样),使用弧度比使用角度更方便。以弧度表示,您可以定义例如:
 f[z1_,n_] := Abs[z] (Cos[Arg[z]] + I Sin[Arg[z]]) /.Solve[z^n+z1 == 0, z,Complex]

或者

g[z1_,n_] := Abs[z] (Exp [I Arg[z]]) /.Solve[z^n+z1 == 0, z,Complex]  

根据你的记号偏好(三角形式或指数形式......但后者更为推荐)。

要获取(-4)^(1/5)的所需表达式,只需输入:

g[4,5] or f[4,5]

你的回答是唯一一个解决了提问者可能存在的潜在问题,即w=z^n的n个不同根的答案。 - Simon
@Simon 我猜问题不在于Mathematica本身,而在于理解“基数”运算符作为指数的多值逆运算。我试图解决这个问题... - Dr. belisarius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接