例如,如果我有三个表达式:A
、B
和 C
,如下所示:
A(i+1) = A(i) + C(i).k
B(i+1) = B(i) + A(i).h
C(i+1) = A(i) + B(i)
其中 k
和 h
是一些常量,m
和 n
是所需的 大小C
。 i
是上一个得到的值,i+1
是下一个值。现在,如果我使用 for
循环,那么我可以将其编码为:
A(1)= 2;
B(1)= 5;
C(1)= 3;
for i=1:10
A(i+1) = A(i) + C(i)*2;
B(i+1) = B(i) + A(i)*3;
C(i+1) = A(i) + B(i);
end
而且效果很好。但我想以向量形式对其进行编码,就像不必使用循环一样。但问题是我不知道如何绕过以下依赖:
A
其先前的值和先前的C
值B
在其上的先前值和A
的先前 C
对A
和B
的先前值
C
值
最佳答案
这是一种基于矩阵的方法来获取 [A;B;C]
向量的第 n
值。我不会确切地称之为矢量化,但这可以大大加快您的速度:
[A,B,C] = deal(zeros(11,1));
A(1)= 2;
B(1)= 5;
C(1)= 3;
%% // Original method
for k=1:10
A(k+1) = A(k) + C(k)*2;
B(k+1) = B(k) + A(k)*3;
C(k+1) = A(k) + B(k);
end
%% // Matrix method:
%// [ A ] [1 0 2][ A ]
%// | B | = |3 1 0|| B |
%// [ C ] [1 1 0][ C ]
%// i+1 i
%//
%// [ A ] [1 0 2][ A ] [1 0 2] ( [1 0 2][ A ] )
%// | B | = |3 1 0|| B | = |3 1 0| * ( |3 1 0|| B | )
%// [ C ] [1 1 0][ C ] [1 1 0] ( [1 1 0][ C ] )
%// i+2 i+1 i
%// Thus, this coefficient matrix taken to the n-th power, multiplied by the input
%// vector will yield the values of A(n+1), B(n+1), and C(n+1):
M = [1 0 2
3 1 0
1 1 0];
isequal(M^10*[A(1);B(1);C(1)],[A(11);B(11);C(11)])
实际上,您可以使用 M
的适当幂(正或负)来获得任何 [A,B,C]
n来自任何 [A,B,C]
k ...
关于matlab - 如何编写依赖于其他矢量化表达式的矢量化表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35034584/