matlab - matlab函数中如何通过引用传递参数

标签 matlab reference

我是 matlab 的初学者,我想计算从不同行选取的 (3*n) 矩阵元素的每种可能组合的乘积之和。

例如,如果矩阵是 x = [1 2 3 , 4 5 6] 我想要的结果 D = 1*4 + 1*5 + 1*6 + 2*4 + 2*5 + 2*6 + 3*4 + 3*5 + 3*6。

我编写了以下递归代码,但在通过引用传递变量时遇到问题。

function combination(n,A,x) % n= number of rows ,A= empty array, x = the matrix  
    if n == 0
    D = D + prod(A); 
    else
        for i = 1:1:3
            A = [A x(n,i)];
            combination(n-1,A,x);
            if length(A)>=1
                A = A(1:length(A)-1);
            end 
       end
   end
end

我需要 D 参数,但是当我将 D 声明为全局参数时,它没有帮助。 无论如何,在matlab中我可以通过函数中的引用传递D并最终得到结果吗? 提前致谢。 抱歉我的英语。

最佳答案

你可以只使用prod(sum(x,2))吗?我认为,如果您重新排列总和中的项,您会发现只需将各行的总和相乘即可得到相同的结果。 (但也许我完全误解了您正在寻找的内容)。

例如:

>> x=[1 2 3 ; 4 5 6; 7,8,9]
x =
     1     2     3
     4     5     6
     7     8     9
>> prod(sum(x,2))
ans =
        2160
>> 1*4*7 + 1*4*8 + 1*4*9 + 1*5*7 + 1*5*8 + 1*5*9 + 1*6*7 + 1*6*8 + 1*6*9 + 2*4*7 + 2*4*8 + 2*4*9 + 2*5*7 + 2*5*8 + 2*5*9 + 2*6*7 + 2*6*8 + 2*6*9 + 3*4*7 + 3*4*8 + 3*4*9 + 3*5*7 + 3*5*8 + 3*5*9 + 3*6*7 + 3*6*8 + 3*6*9
ans =
        2160

如果您确实需要使用组合方法递归地执行此操作,您应该能够仅将 D 作为输入传递,并将其作为函数的输出返回,如下所示:

function D = combination(n,A,x, D) % n= number of rows ,A= empty array, x = the matrix  
    if n == 0
    D = D + prod(A); 
    else
        for i = 1:1:3
            A = [A x(n,i)];
            D = combination(n-1,A,x, D);
            if length(A)>=1
                A = A(1:length(A)-1);
            end 
       end
   end
end

然后最初使用 D 等于 0 来调用它。

不用担心在这里通过引用传递。 MATLAB 没有按引用传递(它具有具有引用语义的变量,但这是另一回事),但它使用写时复制,并且对可以就地完成的计算进行了特殊优化,就像您的计算一样与 D 可以在这里。

关于matlab - matlab函数中如何通过引用传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48298861/

相关文章:

c++ - Matlab 函数和 parallel_invoke

Matlab:获取图中点击的坐标但保留按钮回调

c# - 如何从 Visual C# 2013 中的另一个(引用)项目访问表单组件?

c++ - 什么时候通过引用传递函数参数,什么时候通过地址传递?

c++ - 方法调用链接;返回指针还是引用?

ios - 为什么 ClassA 不通过对 ClassB 的引用来保留对 Class 的引用,这是 Class C 的属性

matlab - 如何在 Matlab 中使用 onCleanup 保存变量?

matlab - Octave 找不到函数句柄

image - 如何在 MATLAB GUI 中添加图像?

c++ - 如果字段通过引用传递,则类字段可以在 const 方法内修改吗?