我尝试在矩阵中输入矩阵
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是整数但我不能
如何解决?
非常感谢您的关注
发布于 2013-11-26 01:46:04
首先,不需要单独声明A的元素。正如您在第一个代码中所展示的,代码片段就可以了。
因此,您总是在计算d(i,j)=c*a(i,j)*^40,而应该以n的速度使用k。
a(i,j)*^k的语法也不正确,因为*^既不乘法,也不求幂。因此,MATLAB将返回一个错误。
此外,你会得到Subscripted assignment dimension mismatch.错误,因为C是1x2矩阵,而A(i,j)只是一个元素。
我说它不会模仿D =[CA;CA^2;CA^3;........;CA^n]过程的原因是因为你只对C和A做元素明智的操作,然后把它们放到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发布于 2013-11-26 02:10:18
Falimond给出了很好的答案。
然而,这里可以节省大量的矩阵乘法:
我们只需要将上一次迭代的结果乘以A,而不是对每个k使用k的强大功能:D(k,:) = C*A^k = D(k-1,:)*A!
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 https://stackoverflow.com/questions/20199262
复制相似问题