在Matlab中以极坐标形式打印复数

4
我希望在Matlab中以极坐标形式展示一个复杂矩阵,但是所有的复数都以直角坐标形式打印出来,例如:
\>> sqrt(2)*[1-1i 1+1i; 1i -1]

ans =

   1.4142 - 1.4142i   1.4142 + 1.4142i
        0 + 1.4142i  -1.4142          

有没有一种方法可以以极坐标形式打印复数?就像这样:
\>> sqrt(2)*[1-1i 1+1i; 1i -1]

ans =

   2.0000 <-45.0000°   2.0000 < 45.0000°
   1.4142 < 90.0000°   1.4142 <180.0000°         

它也可以是一个函数,我只想知道是否已经有类似的东西。

谢谢。

2个回答

3
以下是相关的功能:
  • abs: 获取复数的大小;
  • angle: 获取相位角,以弧度为单位。 您可以使用radtodegrad2deg(或仅乘以180/pi)将其转换为度数:
例如:
> A = [ sqrt(2)*[1-1i 1+1i; 1i -1]];

>> abs(A)
ans =
    2.0000    2.0000
    1.4142    1.4142

>> radtodeg(angle(A))
ans =
   -45    45
    90   180

FYI,radtodegrad2deg似乎都在Mapping工具箱中(Signal Processing工具箱中也有convert2deg),因此可能并不适用于所有用户。但是,它们都只是angleInDegrees = (180/pi) * angleInRadians;,可以很容易地被一个简单的匿名函数替换。即使这是简单的数学运算,没有本机非工具箱函数也是愚蠢的。 - horchler

3

继Luis Mendo的讲话之后,我不认为MATLAB中有一个打印极坐标形式下复数的实用程序。然而,我们可以利用absangle来确定复数的幅度和相位,从而定义一个辅助函数,以帮助打印出复数的极坐标形式的幅度和相位。类似于这样:

function out = polarPrint(A)
    absA = abs(A);
    phaseA = angle(A)*180/pi;
    out = arrayfun(@(x, y) sprintf('%f < %f', x, y), absA, phaseA, 'uni', 0);

将以下内容放入名为polarPrint.m的文件中,以便在需要时可以在MATLAB中调用。代码的第一行和第二行分别从数字矩阵A中确定存储在absAphaseA中的复数的大小和相位。如果你想要它以度数表示,只需乘以180 / pi。第三行是最神奇的。我们只需遍历absAphaseA中的每个元素,使用sprintf将每个元素打印到一个字符串中,并在这两个数字之间用<分隔,然后将此字符串放置在一个单元格数组中。arrayfun会遍历数组中的每个元素并将一个函数应用于该元素。在这种情况下,我将让arrayfun同时遍历两个数组,这将是每个数字的大小和相位。因此,我将使用absAphaseA作为输入传递给我想要应用于每个元素的函数。uni = 0标志意味着输出不是数字,而是非数字输出的单元格数组(在我们的情况下是字符串)。 out将包含一个与A大小相同的字符串单元格数组,你可以打印并自行检查。
使用Luis Mendo的示例,我们得到:
>> A = sqrt(2)*[1-1i 1+1i; 1i -1];       
>> out = polarPrint(A)

out = 

    '2.000000 < -45.000000'    '2.000000 < 45.000000' 
    '1.414214 < 90.000000'     '1.414214 < 180.000000'

1
你可以使用arrayfun(@(x,y) sprintf('%f < %f',x,y), abs(A), angle(A)*180/pi, 'uni', 0)来避免重新调整形状。 - knedlsepp
@knedlsepp - 啊!我总是忘记arrayfun可以接受多个参数。我会修改我的答案。谢谢! - rayryeng
1
@rayryeng - 你是真正的MVP。非常感谢你。 - Daniel Turizo
@DanielTurizo - 哈哈哈,我只是个冒牌者。真正的英雄是像Luis Mendo、Divakar、Amro、chappjc等人一样的人。我从MATLAB学到的很多东西都是从他们那里学来的。不过,还是谢谢你的好意 :) - rayryeng
@rayryeng 感谢您的评论 :-) 遗憾的是,Matlab的命令窗口似乎不支持角度符号 - Luis Mendo

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