豆包0723
2009-08-18, 03:13
有两个问题想请教一下,别嫌太简单,我是新人,先多谢了!
1.有v = [1,2, ...,50],A = magic(50) ,
用v’*(v*A) 和 (v’*v)*A 得出的答案相同,哪个运行更快?为什么?
另外有道题,帮我看看对不对,谢谢!
2. A和B是两个n*n的矩阵,让写一个function T = blocktridiag(A,B) ,这是由A和B 构成的BLOCK对角线矩阵,(维n平方*n平方),A是主对角线,B是辅对角线,也就是说当n=3时,矩阵应该是
T=
[ A B 0
B A B
0 B A ]
这其中0是n*n的零矩阵,这里可以使用 kron 和 diag.
我做的答案如下:
function T=blocktridiag(A,B)
[M_a,N_a]=size(A);
[M_b,N_b]=size(B);
if (M_a==N_a) && (M_b==N_b) && (M_a==M_b)
n=M_a;
K=ones(n);
G=zeros(n^2);
if n>=1 && n<=2
for i=0: (n-1)
C=diag(diag(K,i),i);
if i==0
G=G+kron(C,A);
else
F=kron(C,B);
G=G+F+F';
end
end
else
for i=0: (n-2)
C=diag(diag(K,i),i);
if i==0
G=G+kron(C,A);
else
F=kron(C,B);
G=G+F+F';
end
end
end
G
else
end
end
1.有v = [1,2, ...,50],A = magic(50) ,
用v’*(v*A) 和 (v’*v)*A 得出的答案相同,哪个运行更快?为什么?
另外有道题,帮我看看对不对,谢谢!
2. A和B是两个n*n的矩阵,让写一个function T = blocktridiag(A,B) ,这是由A和B 构成的BLOCK对角线矩阵,(维n平方*n平方),A是主对角线,B是辅对角线,也就是说当n=3时,矩阵应该是
T=
[ A B 0
B A B
0 B A ]
这其中0是n*n的零矩阵,这里可以使用 kron 和 diag.
我做的答案如下:
function T=blocktridiag(A,B)
[M_a,N_a]=size(A);
[M_b,N_b]=size(B);
if (M_a==N_a) && (M_b==N_b) && (M_a==M_b)
n=M_a;
K=ones(n);
G=zeros(n^2);
if n>=1 && n<=2
for i=0: (n-1)
C=diag(diag(K,i),i);
if i==0
G=G+kron(C,A);
else
F=kron(C,B);
G=G+F+F';
end
end
else
for i=0: (n-2)
C=diag(diag(K,i),i);
if i==0
G=G+kron(C,A);
else
F=kron(C,B);
G=G+F+F';
end
end
end
G
else
end
end