【问题标题】:Efficient Way to Generate Vector of Points Used in Recursive Scheme递归方案中生成点向量的有效方法
【发布时间】:2012-11-19 01:43:29
【问题描述】:

我在 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并预先分配足够的内存?

【问题讨论】:

    标签: matlab recursion pass-by-reference octave


    【解决方案1】:

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

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

    必须制作副本。相对于:

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

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

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

    【讨论】:

    • 手到func,做func,摇滚哟bawwwdddyyyyyy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    相关资源
    最近更新 更多