以极坐标形式打印复数 (Matlab)
Print complex numbers in polar form (Matlab)
我想在 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°
也可以是函数,我就想知道有没有做过这样的东西
谢谢。
有以下功能:
abs
:给出复数;
angle
: gives phase angle, in radians. You can convert to degrees with radtodeg
或 rad2deg
(或仅乘以 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
基于 Luis Mendo 所说的内容,我认为 MATLAB 中没有实用程序可以打印出极坐标形式的复数。但是,我们可以使用 abs
和 angle
来发挥我们的优势,因为它们决定了复数的大小和相位。有了这些,我们可以定义一个辅助函数,帮助以极坐标形式打印出复数的幅度和相位。像这样:
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
确定存储在 absA
和 phaseA
中的复数的幅度和相位。如果你想要它的度数,你只需乘以 180 / pi
。第三行是最神奇的。我们简单地遍历 absA
和 phaseA
中的每个元素,使用 sprintf
with a <
separated between the two numbers and this string is placed in a cell array. arrayfun
将每个元素打印到字符串,遍历数组中的每个元素并将函数应用于该元素。在这种情况下,我会让 arrayfun
同时遍历两个数组,这将是 A
中每个数字的幅度和相位。因此,我将使用 absA
和 phaseA
作为我想应用于每个元素的函数的输入。 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'
我想在 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°
也可以是函数,我就想知道有没有做过这样的东西
谢谢。
有以下功能:
abs
:给出复数;angle
: gives phase angle, in radians. You can convert to degrees withradtodeg
或rad2deg
(或仅乘以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
基于 Luis Mendo 所说的内容,我认为 MATLAB 中没有实用程序可以打印出极坐标形式的复数。但是,我们可以使用 abs
和 angle
来发挥我们的优势,因为它们决定了复数的大小和相位。有了这些,我们可以定义一个辅助函数,帮助以极坐标形式打印出复数的幅度和相位。像这样:
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
确定存储在 absA
和 phaseA
中的复数的幅度和相位。如果你想要它的度数,你只需乘以 180 / pi
。第三行是最神奇的。我们简单地遍历 absA
和 phaseA
中的每个元素,使用 sprintf
with a <
separated between the two numbers and this string is placed in a cell array. arrayfun
将每个元素打印到字符串,遍历数组中的每个元素并将函数应用于该元素。在这种情况下,我会让 arrayfun
同时遍历两个数组,这将是 A
中每个数字的幅度和相位。因此,我将使用 absA
和 phaseA
作为我想应用于每个元素的函数的输入。 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'