gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:41:58 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com