2012-11-30 23 views
2

我实现在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]; 
... 

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

1)当输入和输出共用一个变量名,这是否使用单一变量,或者是一个本地副本,然后返回?

2)如果它是一个拷贝,有一个方法来传递通过引用points和预分配足够的存储器?

回答

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

+1

手到'func',做'func',摇滚哟bawwwdddyyyyyy – smaccoun