是否可以以比使用for循环更有效的方式获取矩阵A
?
a = 6; % constant
b = 2; % constant
s = 0.1; % possible to change
I = 12; % possible to change
A = zeros(a,I+1);
A(:,1) = rand(a,1); % some initial value
B = rand(b,I);
% possible to avoid for-loop to increase performance?
for i = 1:I
A(:,i+1) = fun(A(:,i),B(:,i), a, s);
end
功能乐趣为
function [AOut] = fun(AIn, B, a, s)
AOut = zeros(a,1);
AOut(1) = AIn(1) + AIn(4)*s*cos(AIn(3));
AOut(2) = AIn(2) + AIn(4)*s*sin(AIn(3));
AOut(3) = AIn(3) + AIn(4)*AIn(6)*s;
AOut(4) = AIn(4) + AIn(5)*s;
AOut(5) = AIn(5) + B(1);
AOut(6) = AIn(6) + B(2);
end
答案 0 :(得分:1)
首先,如果a != n
您将收到错误消息:
订阅的分配维度不匹配。
所以你必须谨慎
而且,要摆脱循环,你可以这样做:
编辑: 显然我没有在右侧进行修改。我会尝试修复它并重新编写我的答案。
无论如何,要摆脱循环,你仍然可以使用A(:, i:1:I)
i = 1;
A(:, i:1:I) = fun(A(:,i),B(:,i), a, s);
如果您还有其他问题,请询问!
答案 1 :(得分:1)
我认为你不能在效率方面优化循环,因为计算下一个需要最后的值。 @Tony Tannous向您展示了如何摆脱代码中的循环的好方法。为了在gtk-theme-name = MS-Windows
的高值下获得更好的性能,您可以将fun()更改为:
I