Matlab m文件中的递归函数出错

Matlab m文件中的递归函数出错,matlab,Matlab,我正在学习数学生物学课程的第八章。教科书使用Maple,但包含此链接。我被告知将以下内容放入m文件中: % defining a recursive function in an m-file function y = plot_traj(a) RM = inline('a*x.*exp(-x)', 'a', 'x') % Note that we are using an inline function. Sometimes it’s easier to do this. % collec

我正在学习数学生物学课程的第八章。教科书使用Maple,但包含此链接。我被告知将以下内容放入m文件中:

% defining a recursive function in an m-file

function y = plot_traj(a)
RM = inline('a*x.*exp(-x)', 'a', 'x')
% Note that we are using an inline function. Sometimes it’s easier to do this.

% collecting list of x-coordinates
for i = 1:31,
X(i) = i - 1
end

% collecting list of y-coordinates
for i = 1:30,
Y(i+1)=RM(a,iter(i));
iter(i+1) = Y(i+1);
end

y = plot(X, Y, '*');
现在,保存m文件(作为plot traj.m)并关闭它。在命令窗口中键入以下命令:

>> plot traj(0.8) 
>> plot traj(1.0) 
>> plot traj(5.0) 
>> plot traj(8.0) 
>> plot traj(13.0) 
>> plot traj(14.5) 
>> plot traj(20.0)
但是,当我在命令窗口中键入
plot traj(0.8)
时,我得到以下结果:

>> plot_traj(0.8)
Undefined function or variable "iter".

Error in plot_traj (line 13)
Y(i)=RM(a,iter(i));

我没有发现第13行有任何错误,并且我已经确保我的代码与本章中的代码完全一致。到目前为止,我在代码方面做得很好。如果有人能提供帮助,我将不胜感激。谢谢。

第13行的问题是未定义
iter
局部变量数组。因此,在第一次迭代中,代码试图访问iter(1),但失败了。我看了你提供的链接,他们也错过了。根据Matlab_Course.pdf(和图8.6)中先前的示例,
iter
数组应初始化为

iter(1) = 1.0;
只需将这一行添加到
for
循环之前,就可以继续了。我还怀疑这一行也应该添加(同样基于文档)

确保iter和Y具有相同的长度

请注意,将内存预先分配给数组是一个好习惯,以避免循环每次迭代时矩阵/数组的内部大小调整(这可能会对性能产生负面影响)。对于这个循环

for i = 1:30,
    Y(i+1)=RM(a,iter(i));
    iter(i+1) = Y(i+1);
end 
你可以观察到,
i
在1到30之间迭代,我们总是填充
Y(i+1)
iter(i+1)
。所以
Y
iter
都是31x1向量。我们可以在进入
for
循环之前为每个循环分配内存

iter = zeros(31,1);
Y    = zeros(31,1);

iter(1) = 1;
Y(1)    = iter(1);

对于
X
也应该这样做。

谢谢您的精彩回答!我会记住你的笔记。
iter = zeros(31,1);
Y    = zeros(31,1);

iter(1) = 1;
Y(1)    = iter(1);