我尝试在矩阵中输入矩阵
A=[1 2;2 1];
C=[0 1];
然后使用
在新矩阵中输入矩阵D =[CA;CA^2;CA^3;........;CA^n]
我尝试使用
n=40;
a(1,1)=1;
a(1,2)=1;
a(2,1)=1;
a(2,2)=1;
C=[0,1];
for k=1:n
for i=1:2
for j=1:2
d(i,j)=c*a(i,j)*^n
end
end
end
当n是整数但我不能做
如何解决?
非常感谢你的关注
答案 0 :(得分:2)
首先,不需要单独声明A的元素。正如您在第一个代码段中显示它一样很好。
所以这个for循环的主要问题(除了它实际上并没有模仿这里显示的过程D =[CA;CA^2;CA^3;........;CA^n]
)是因为你在n
中使用变量d(i,j)=c*a(i,j)*^n
实际上,变量k
正在被第一个for
循环递增。因此,您始终在计算d(i,j)=c*a(i,j)*^40
,而应以k
的速度使用n
。
a(i,j)*^k
语法也不正确,因为*^
不会成倍增加,也不会取幂。因此,MATLAB将返回错误。
此外,您将收到Subscripted assignment dimension mismatch.
错误,因为C是1x2矩阵,A(i,j)只是一个元素。
我说它不会模仿进程D =[CA;CA^2;CA^3;........;CA^n]
的原因是因为你只对C进行了元素操作,然后将它们放入D中,我相当确定这不是你的运行磨机矩阵乘法 - 即使你要正确地分解它 - 但这是低效的,因为MATLAB会为你做。
clear D
n=10;
A=[1 2;2 1];
C=[0,1];
for k=1:n
D(k,:) = C*A^k;
end
D =
2 1
4 5
14 13
40 41
122 121
364 365
1094 1093
3280 3281
9842 9841
29524 29525
答案 1 :(得分:2)
Falimond给出了很好的答案
但是,这里可以节省大量的矩阵乘法:
我们只需要将前一次迭代的结果乘以A
k
,而不是k
为每个A
提供D(k,:) = C*A^k = D(k-1,:)*A
的力量!{ / p>
n = 10;
A = [1 2;2 1];
C = [0 1];
D = zeros(n, size(C,2) ); % pre-allocate always a good practice
D(1,:) = C*A; % init recursive process
for k=2:n
D(k,:) = D(k-1,:)*A;
end