Matlab中选取复数向量部分元素及解决绘图长度不匹配报错
解决Matlab复数数组切片绘图的“向量长度不匹配”问题
你踩了一个很容易犯的Matlab索引小坑——你的切片写法错了!
你现在写的t(45):t(55),是在生成一个从t(45)数值到t(55)数值的连续序列,而不是提取数组t中第45到55位的元素。同理x(45):x(55)是尝试生成从复数x(45)到x(55)的序列,这在Matlab里是不合法的,直接返回空矩阵,自然会触发「Vectors must be the same length」的报错。
最简单的解决方法,完全不用创建新向量,只要把切片语法改成索引范围即可:
n = 100; t = linspace(-1,1,n); x = rand(n,1)+1j*rand(n,1); % 修正后的切片写法:用(45:55)提取第45到55位的元素 plot(t(45:55), real(x(45:55)), '.--') plot(t(45:55), imag(x(45:55)), '.--')
这里的45:55是直接指定数组的索引区间,提取出来的t切片和x切片都是11个元素的向量,长度完全匹配,real()和imag()也能正确提取对应位置的实部、虚部,不会返回空矩阵。
如果想把实部和虚部画在同一张图里,加上hold on就能实现:
hold on plot(t(45:55), real(x(45:55)), '.--', 'DisplayName', '实部') plot(t(45:55), imag(x(45:55)), '.--', 'DisplayName', '虚部') hold off legend('show')
内容的提问来源于stack exchange,提问作者Medulla Oblongata
相关产品推荐
相关产品推荐

