修复:MATLAB数组索引超出范围错误
修复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
% ... 其余代码 ...
在这个修复后的代码中,我们根据起点和终点计算了子矩阵的大小。然后,我们创建了一个子矩阵来存储数据,并将数据复制到子矩阵中。
代码解释
- 计算子矩阵的大小: 我们使用起点和终点的坐标计算子矩阵的行数和列数。2. 创建子矩阵: 使用
zeros函数创建一个与计算大小相同的全零矩阵。3. 复制数据: 使用嵌套循环将原始矩阵中对应位置的数据复制到子矩阵中。
通过正确计算子矩阵的大小并使用循环复制数据,您可以避免'索引超出数组边界'错误。
注意: 请确保将代码中的文件名、工作表名称和坐标替换为您自己的值。
原文地址: https://www.cveoy.top/t/topic/N5v 著作权归作者所有。请勿转载和采集!