下段代码哪里有问题e?为什么matlab总说我超过了矩阵的尺寸?

2025-03-17 10:31:52
推荐回答(2个)
回答1:

首先给搂住提两点建议:

1、对于程序错误,提问时应该提供运行条件和出错信息:函数的输入z是什么?哪一行出错?报错的具体内容?否则,回答的人要花费很多时间去猜测各种可能,非常麻烦。

2、程序应该以文本(而非图片)的方式贴出代码,否则,答题人还要浪费时间把你的代码输入一遍,那属于毫无价值的体力劳动,白白浪费时间。如果代码太长贴不下,可以找个博客或网盘贴。

 

接下来给你具体做一些分析。

 

这是一个函数,和调用函数的输入有关: 

  1. 如果直接运行而没有提供输入z,应该会提示输入参数z未定义;

  2. 如果z是一个矩阵,情况会比较复杂,暂不讨论,下面的讨论假定z是一个向量;

  3. 如果z是一个列向量,则第11行在j=2的时候就会出错,因为不存在第2列,所以列向量肯定不行,后面只讨论行向量;

  4. 如果行向量z的长度小于20,则在第7行或第8行出错的可能性很大,因为m和n的取值可能在1-20之间,如果z的元素数量小于20,则很可能出现数组越界;

  5. 如果z的长度足够长,但在for循环结束时k的值不是刚好为19,则while循环会继续,可能出现k>=20的情况,此时m和n为NaN,第7、8行会出现下标无效的错误。

 

就这个函数本身而言,是有可能正确运行的(但功能是否符合预期则另当别论)。例如,我构造了下面的这个输入参数z就可以:

>> z=zeros(1,38);
>> z(1)=1000;
>> mycaul(z)
ans =
     1

回答2:

z在前面你已经赋值为1维的z(m)
后面又给出z(:,j)变成二维的,当然超出尺寸了