matlab中的二维复数绘图

matlab中的二维复数绘图,matlab,plot,complex-numbers,Matlab,Plot,Complex Numbers,我有一个矩阵 b = [1+ 1i, 2 + 1i, 2+ 2i, 3 + 3i, 3+ 3i ; ... 1.2 + 2i , 2+2i, 2.1 + 2.1i, 3+2.1i, 3.1 + 3.2i] 其中,real(b)是x坐标,b(x,:)是一个实验,imag(b)是y坐标 我想要两件事: 在2d绘图中将我的实验绘制为直线(但点的顺序必须正确) 绘制myy(通常称为z)坐标作为轴x上的曲面,并进行实验 问题是,我想要沿着行的直线,Matlab将复数的坐标混合在一起,直

我有一个矩阵

b = [1+ 1i, 2 + 1i, 2+ 2i, 3 + 3i, 3+ 3i ; ...
     1.2 + 2i , 2+2i,  2.1 + 2.1i, 3+2.1i, 3.1 + 3.2i]   
其中,
real(b)
x
坐标,
b(x,:)
是一个实验,
imag(b)
y
坐标

我想要两件事:

  • 在2d绘图中将我的实验绘制为直线(但点的顺序必须正确)

  • 绘制my
    y
    (通常称为
    z
    )坐标作为轴
    x
    上的曲面,并进行实验

  • 问题是,我想要沿着行的直线,Matlab将复数的坐标混合在一起,直线在整个位置呈之字形出现

    更基本的问题是,我想在
    x1
    x2
    y1
    处添加一个数据点
    y1
    x2
    。但是在
    x2
    中还有
    y2
    ,这似乎让Matlab感到困惑

    您可以使用将数据从笛卡尔坐标转换为极坐标

    clear all; close all;
    
    function [rho, theta] = polarize(z)
      rho = abs(z);
      theta = angle(z);
    end
    
    b = [1+ 1i, 2 + 1i, 2+ 2i, 3 + 3i, 3+ 3i;
    1.2 + 2i , 2+2i,  2.1 + 2.1i, 3+2.1i, 3.1 + 3.2i];
    
    [rho1, theta1] = polarize(b(1,:));
    [rho2, theta2] = polarize(b(2,:));
    
    figure
    hold on
    polar(theta1, rho1, 'b');
    polar(theta2, rho2, 'r');
    
    print('-dpng','euler.png')
    
    产生倍频程: 对于问题(1),
    绘图(b)
    将给出由
    b
    列组成的行。如果切换到使用b转置,即
    绘图(b')
    ,则将分别绘制每一行

    plot(b')
    ylim([-4 0])
    xlim([-0 4])
    

    问题(2)需要一个特定的工具箱来执行
    resp
    函数?

    感谢您的解决方案,唯一的问题是它将我的结果旋转了180度。打印(-b')反转x轴。对于我的第二个问题,我只是编辑了一下,让它更清楚。问题2仍然不完全清楚-你是说想要一个m x n矩阵b的复数值,然后分配y=b.imag,x=b.real,z=i,我是行号?不,我只想在y轴上画出矩阵的不同行,这样我得到的是一个曲面图,而不是一些重叠的线图。我想我们说的是相同的事情。看一看。您可能想使用
    surf
    (或
    mesh
    ),但我认为这需要您首先创建一个[x,y]网格-x将是您的
    b.real
    ,z是您的任意索引,然后您可以映射
    b.imag
    。我总是需要在MATLAB中进行一些3D绘图的实验,因为我很少这样做。这一个也可以,但我的b变得很长,因此我希望避免循环或单独寻址行。谢谢你能给问题添加一个代表样本数据的图像吗?我可以用任何形式保存数据,但复数是好的,因为我有固定角度值(例如每度)的数据和随机角度的数据。我必须将两者映射,并使用复数自动进行映射。这是一张照片: