我正在递归地在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
并预先分配足够的内存?
答案 0 :(得分:2)
要回答您的第一个问题,请参阅here。大多数MATLAB变量都是通过值(矩阵等)传递的,除非它是句柄对象(函数句柄,轴句柄等)。只有在函数中更改了该变量时,才会生成输入变量的局部副本。即
function y = doTheFunc1(x)
x(2) = 17;
y = x;
必须制作副本。而不是:
function y = doTheFunc2(x)
y = x(1);
其中不需要在函数内部进行复制。换句话说,MATLAB是一种“写入时复制”语言。无论你的输出变量输出名是什么,我几乎都确定这是真的(即即使你的输出和输入都被命名为x
),这仍然存在。
要回答第二个问题,请查看第一个答案here。考虑使用nested function或handle object。