matlab中位置 1 处的逻辑索引包含一个在数组边界之外的 true 值。 出错 untitled (第 23 行) plot3(pc.Location(isBoundary,1), pc.Location(isBoundary,2), pc.Location(isBoundary,3), 'r.', 'MarkerSize', 10);
时间: 2024-02-06 16:11:32 浏览: 551
这个错误是因为你在使用plot3函数时,使用了逻辑索引(isBoundary)对点云(pc.Location)进行筛选,但是逻辑索引中包含了一个在数组边界之外的true值,导致程序出错。你可以通过检查isBoundary中的逻辑索引是否正确,或者使用其他方法将超出边界的true值去掉,来解决这个问题。例如:
```
% 去掉超出边界的true值
isBoundary = isBoundary & all(pc.Location >= 1 & pc.Location <= size(pc.Location), 2);
% 绘制点云
plot3(pc.Location(isBoundary,1), pc.Location(isBoundary,2), pc.Location(isBoundary,3), 'r.', 'MarkerSize', 10);
```
这样就可以避免出现超出边界的true值导致的错误了。
相关问题
数组索引必须为正整数或逻辑值。 出错 Untitled5 (第 20 行) plot(w,angle(H));
根据你提供的错误信息,可能是因为你在调用 plot 函数时使用了非法的数组索引,导致 MATLAB 抛出了错误。
请确认变量 w 和 H 的大小和类型是否正确。如果它们是向量或矩阵,你可以使用正整数索引来访问它们的元素。如果它们是结构体或单元数组,你可以使用花括号索引来访问它们的字段或元素。
如果你确定 w 和 H 的大小和类型都是正确的,但仍然遇到相同的错误,请尝试清除 MATLAB 的工作区并重新运行代码,或者使用不同版本的 MATLAB 运行相同的代码。如果问题仍然存在,请提供更多的上下文信息,以便我更好地帮助你解决问题。
数组索引必须为正整数或逻辑值。 出错 Untitled5 (第 21 行) plot(w,angle(H));
这个错误提示通常表示在plot函数中,输入的第二个参数是错误的类型。
在您的代码中,变量H是通过impulse函数计算得到的,它是一个时域下的冲击响应。如果要绘制它的相位谱,应该先将它转换为频域下的传递函数,然后再计算相位谱。
下面是一个示例代码,可以用来绘制传递函数的幅频和相频特性:
```
w = 0:0.02:5;
s = tf('s');
H = (num/den)*exp(-s*t);
mag = abs(H);
phase = angle(H);
subplot(2,1,1);
semilogx(w, 20*log10(mag));
xlabel('Frequency (rad/s)');
ylabel('Magnitude (dB)');
title('Bode Plot');
grid on;
subplot(2,1,2);
semilogx(w, phase);
xlabel('Frequency (rad/s)');
ylabel('Phase (deg)');
grid on;
```
在这个代码中,我们首先使用tf函数创建了一个连续时间域的传递函数s,然后将num和den作为其参数,得到一个传递函数H。接着我们通过exp函数将其转换为时域下的冲击响应。
最后,我们使用semilogx函数分别绘制了传递函数的幅频和相频特性。请注意,我们在幅频特性的绘制中使用了20*log10函数来将幅值转换为分贝单位。
阅读全文