一种生成递归方案中点向量的有效方法

时间:2012-11-30 19:40:10

标签: matlab recursion pass-by-reference octave

我正在递归地在Matlab中实现自适应Simpsons方法。我希望存储功能评估发生的所有点,以便在积分后生成直方图。我目前有:

function [S, points] = adsimp(f, a, b, fv, tol, level, points)
...
d = (a+b)*0.25;
e = (a+b)*0.75;
points = [points, d, e];
...

因此,对于每个函数调用,我将points的长度增加2。我对Matlab函数输入/输出方案的理解很差。我想知道:

1)当输入和输出共享变量名时,这是使用单个变量,还是制作本地副本然后返回?

2)如果是副本,有没有办法通过引用传递points并预先分配足够的内存?

1 个答案:

答案 0 :(得分:2)

要回答您的第一个问题,请参阅here。大多数MATLAB变量都是通过值(矩阵等)传递的,除非它是句柄对象(函数句柄,轴句柄等)。只有在函数中更改了该变量时,才会生成输入变量的局部副本。即

function y = doTheFunc1(x)
    x(2) = 17;
    y = x;

必须制作副本。而不是:

function y = doTheFunc2(x)
    y = x(1);

其中不需要在函数内部进行复制。换句话说,MATLAB是一种“写入时复制”语言。无论你的输出变量输出名是什么,我几乎都确定这是真的(即即使你的输出和输入都被命名为x),这仍然存在。

要回答第二个问题,请查看第一个答案here。考虑使用nested functionhandle object