修复MATLAB '索引超出数组边界' 错误

在处理MATLAB中的子矩阵时,您可能会遇到'索引超出数组边界'错误。这通常发生在子矩阵的终点索引超出了原始矩阵的大小时。

问题描述

当尝试使用以下代码从Excel表格中提取子矩阵时,您可能会遇到此错误:matlabsub_matrix = data(start_row:end_row, start_col:end_col);

错误信息:

'>> dynamic 位置 2 处的索引超出数组边界。

出错 dynamic (第 15 行) sub_matrix = data(start_row:end_row, start_col:end_col);'

解决方案

问题在于子矩阵的终点索引是相对于起点的偏移量,而不是原始矩阵的绝对位置。

以下是修复后的代码:matlab% 读取Excel表格数据data = xlsread('your_file.xlsx', 'Sheet1'); % 假设数据在第一个sheet中

% 定义起点和终点坐标start_point = [91, 20];end_point = [80, 140];

% 计算子矩阵的大小sub_matrix_size = [end_point(1) - start_point(1) + 1, end_point(2) - start_point(2) + 1];

% 创建矩阵用于存储子矩阵的数据sub_matrix = zeros(sub_matrix_size);

% 复制子矩阵的数据for i = 1:sub_matrix_size(1) for j = 1:sub_matrix_size(2) sub_matrix(i, j) = data(start_point(1) + i - 1, start_point(2) + j - 1); endend

% ... 其余代码 ...

在这个修复后的代码中,我们根据起点和终点计算了子矩阵的大小。然后,我们创建了一个子矩阵来存储数据,并将数据复制到子矩阵中。

代码解释

  1. 计算子矩阵的大小: 我们使用起点和终点的坐标计算子矩阵的行数和列数。2. 创建子矩阵: 使用 zeros 函数创建一个与计算大小相同的全零矩阵。3. 复制数据: 使用嵌套循环将原始矩阵中对应位置的数据复制到子矩阵中。

通过正确计算子矩阵的大小并使用循环复制数据,您可以避免'索引超出数组边界'错误。

注意: 请确保将代码中的文件名、工作表名称和坐标替换为您自己的值。


原文地址: https://www.cveoy.top/t/topic/N5v 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录