-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplayground.m
63 lines (52 loc) · 1.58 KB
/
playground.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
%% initialize playground (plot singular values)
clear all; colors=get(gca,'ColorOrder'); close all; clc;
set(0,'defaultAxesFontSize',20); set(0,'defaultLineLineWidth',2);
%create matrices A,B,C
f=@(x,y) 1./(x+y);
g=@(x,y) 1./sqrt(x.^2+y.^2);
epsilon=1e-4;
maxit=1000;
tol=epsilon^2;
M=50; N=50;
v1=0.1:0.1:M;
v2=0.1:0.1:N;
[X,Y]=meshgrid(v1,v2);
A=f(X,Y);
B=g(X,Y);
C=A.*B;
[~,SC,~]=svd(C);
nb_valsC=min(size(SC));
[~,SA,~]=svd(A);
nb_valsA=min(size(SA));
[~,SB,~]=svd(B);
nb_valsB=min(size(SB));
figure;
semilogy(1:nb_valsA,sort(diag(SA),'descend'),'color',colors(1,:));
hold on;
semilogy(1:nb_valsB,sort(diag(SB),'descend'),'color',colors(2,:));
semilogy(1:nb_valsC,sort(diag(SC),'descend'),'color',colors(3,:));
xlabel({'$i$'},'interpreter','latex'); ylabel({'$\sigma_i$'},'interpreter','latex');
legend({'$A$','$B$','$C$'},'interpreter','latex','location','northeast');
%% initialize playground 2 (check orthogonality)
clear all; colors=get(gca,'ColorOrder'); close all; clc;
set(0,'defaultAxesFontSize',20); set(0,'defaultLineLineWidth',2);
f=@(x,y) 1./(x+y);
g=@(x,y) 1./sqrt(x.^2+y.^2);
epsilon=1e-4;
maxit=1000;
tol=epsilon^2;
M=5; N=5;
v1=0.1:0.1:M;
v2=0.1:0.1:N;
[X,Y]=meshgrid(v1,v2);
A=f(X,Y);
B=g(X,Y);
C=A.*B;
[U,S,V]=svd(A); ids=(diag(S)>=epsilon); SA=S(ids,ids); UA=U(:,1:size(SA,1)); VA=V(:,1:size(SA,2));
UA'*UA
[U,S,V]=svd(B); ids=(diag(S)>=epsilon); SB=S(ids,ids); UB=U(:,1:size(SB,1)); VB=V(:,1:size(SB,2));
UB'*UB
for i=1:size(A,1), KRT(i,:)=kron(UA(i,:),UB(i,:)); end
for j=1:size(A,2), KR(:,j)=kron(VA(j,:),VB(j,:)); end
SIG=kron(SA,SB);
norm((UA*SA*VA').*(UB*SB*VB')-KRT*SIG*KR)