1

我在 Matlab 中递归地实现自适应辛普森方法。我希望存储进行函数评估的所有点,以便在积分后生成直方图。我目前有:

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];
...

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

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

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

4

1 回答 1

1

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

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

必须制作一份副本。相对于:

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

在函数内部不需要复制。换句话说,MATLAB 是一种“写时复制”的语言。无论您的输出变量输出名称是什么,我几乎可以肯定这是正确的(即,即使您的输出和输入都被命名,这也成立x)。

要回答您的第二个问题,请在此处查看第一个答案。考虑使用嵌套函数句柄对象

于 2012-11-30T19:58:08.463 回答