位置 1 处的索引超出数组边界(不能超出 49)。 出错 crossover (line 12) newPop(i,:) = [pop(i1,1:c), pop(i2,c:end)]; 出错 Untitled (line 51) pop = crossover(pop, nPop, pCross);
时间: 2023-06-14 10:02:47 浏览: 65
这个错误提示表明,你在对一个数组进行访问时越过了它的边界。错误发生在第 12 行的交叉函数 `crossover` 中,第 51 行调用了这个函数。
具体来说,`newPop(i,:)` 这个语句中的 `i` 取值超出了 `pop` 数组的范围(大于等于 `size(pop,1)`)。这可能是因为在代码中对 `pop` 数组进行了修改,导致其大小发生了变化,超出了原来的范围。
你可以检查一下在 `crossover` 函数中对 `pop` 数组的修改是否正确,以及在调用 `crossover` 函数之前是否正确初始化了 `pop` 数组。如果还有问题,建议贴出相关代码以便更好地帮助你解决问题。
相关问题
无法执行赋值,因为左侧的索引与右侧的大小不兼容。 出错 crossover (line 12) newPop(i,:) = [pop(i1,1:c), pop(i2,c:end)];
这个错误通常是因为您尝试将一个大小不同的向量或矩阵赋值给一个已经定义好大小的向量或矩阵。在这种情况下,您需要检查一下左侧的索引的大小和右侧的向量或矩阵的大小是否一致。如果不一致,您需要重新定义左侧的向量或矩阵的大小以匹配右侧的向量或矩阵的大小。
在您提供的代码中,错误发生在交叉函数(crossover)的第12行。根据错误信息,您需要检查一下在这一行中的newPop(i,:) = [pop(i1,1:c), pop(i2,c:end)]语句中的左侧索引newPop(i,:)的大小是否与右侧向量[pop(i1,1:c), pop(i2,c:end)]的大小一致。如果不一致,您需要重新定义newPop的大小以匹配右侧向量的大小。如果您需要更多的帮助,请提供更多的代码或上下文信息。
无法执行赋值,因为左侧的大小为 1×36,右侧的大小为 1×38。 出错 crossover (line 12) newPop(i,:) = [pop(i1,1:c), pop(i2,c-1:end)];如何修改
问题出在新的个体 `newPop(i,:)` 的长度为 36,而 `[pop(i1,1:c), pop(i2,c-1:end)]` 的长度为 38。可以通过修改代码来解决这个问题。一种解决方案是将 `pop(i1,1:c)` 和 `pop(i2,c-1:end)` 中的两个元素删除,然后将剩余的元素合并成新的个体。修改的代码如下所示:
```
newPop(i,:) = [pop(i1,1:c-2), pop(i2,c+1:end)];
```
这样就可以正确地将两个个体交叉,生成新的个体了。