以极坐标形式打印复数(Matlab)

时间:2015-03-02 00:17:20

标签: matlab complex-numbers

我想在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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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中调用它。第一行和第二行代码分别从数字的输入矩阵absA确定存储在phaseAA中的复数的幅度和相位。如果你想要它以度为单位,你只需乘以180 / pi。第三行是最神奇的。我们只需浏览absAphaseA中的每个元素,使用sprintf将每个元素打印到一个字符串,并在两个数字之间分隔<,此字符串放在一个单元格中阵列。 arrayfun遍历数组中的每个元素并将一个函数应用于此元素。在这种情况下,我会让arrayfun同时通过两个数组,这将是A中每个数字的大小和相位。因此,我将使用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'