当我运行下面的代码时,我得到了这个错误这种类型的变量不支持大括号索引
function [R, Q] = rq_givens(A)
Q = { eye(size(A,2)) };
R = { A };
I =eye(size(A,1));
Qs={ };
k=1;
for i=1:size(A,2)
for j= size(A,1):-1:i+1
y= -A(j,i);
x= A(i,i);
alpha = atan(y/x);
c = cos(alpha);
s= sin(alpha);
temp = I;
temp(i,i)=c;
temp(i,j)=-s;
temp(j,i)=s;
temp(j,j)=c;
A = temp * A;
Qs{k} = temp;
k=k+1;
end
end
Q=I;
for i=k-1:-1:1
Q = Q*Qs{i};
end
Q= Q';
R= A;
end
这是我正在做的一项任务,所以我所能做的就是改变上面的函数,调用函数的代码如下,必须保持不变。
A = randn(6,4);
[R,Q] = rq_givens(A)
for i = 1:length(R)
disp("Q orthonormal?")
Q{i}*Q{i}'
Q{i}'*Q{i}
disp("R upper triangular?")
R{i}
end
R{end}*Q{end} - A % Equal ?
函数调用中,R、Q的数据类型从单元格类型更改为数字类型。在第二行,R是单元阵列,但函数"的最后一行;rq_given";将R的类型更改为数字矩阵。
因此,R{i}是无效的。Q也存在类似的问题。