1 | function [error, Mapprox, stable] = rankr(M,INC,r,n, iter)
|
---|
2 | % Fit a rank r matrix to a matrix with missing data. This uses my
|
---|
3 | % algorithm of taking the most orthogonal space to the null space generated
|
---|
4 | % by r-tuples of the columns of M. In principle, it would be nice
|
---|
5 | % to use all r-tuples, but instead we'll pick n random ones.
|
---|
6 |
|
---|
7 |
|
---|
8 | %global NULLSPACEexternal
|
---|
9 |
|
---|
10 | NULLSPACE = create_nullspace(M,INC,r,n);
|
---|
11 |
|
---|
12 | if size(NULLSPACE) == [0 0]
|
---|
13 | error = -2;
|
---|
14 | Mapprox = [];
|
---|
15 | else
|
---|
16 | [error, Mapprox, stable1, stable2] = approximate(M,INC,r,NULLSPACE);
|
---|
17 | stable = stable1 & stable2;
|
---|
18 |
|
---|
19 | % NOTE: needed to comment out this next re-running step for intensity
|
---|
20 | % simulations because matrix was too large, so matlab ran out of memory.
|
---|
21 |
|
---|
22 | % if (~ stable2) | (error == -2)
|
---|
23 | % fprintf(1, 'Repeating procedure....\n');
|
---|
24 | % NULLSPACE = create_nullspace(M',INC',r,n);
|
---|
25 | % if size(NULLSPACE) == [0 0]
|
---|
26 | % error2 = -2;
|
---|
27 | % else
|
---|
28 | % [error2, Mapprox2, stable1, stable2] = approximate(M',INC',r,NULLSPACE);
|
---|
29 | %
|
---|
30 | % if ((error2 < error) & (error2 ~= -2)) | (error == -2)
|
---|
31 | % fprintf(1,'Using new results.\n');
|
---|
32 | % error = error2;
|
---|
33 | % Mapprox = Mapprox2';
|
---|
34 | % stable = stable1 & stable2;
|
---|
35 | % end
|
---|
36 | % end
|
---|
37 | % end
|
---|
38 |
|
---|
39 | end
|
---|
40 | %save data if error.
|
---|
41 | %if ((error > 3) & stable)
|
---|
42 | % fname = sprintf('error%d.bin',iter);
|
---|
43 | % fid = fopen(fname, 'W');
|
---|
44 | % count = fwrite(fid,[size(M)], 'float');
|
---|
45 | % count = fwrite(fid,[M], 'float');
|
---|
46 | % count = fwrite(fid,[INC], 'float');
|
---|
47 | % count = fwrite(fid,[size(NULLSPACE)], 'float');
|
---|
48 | % count = fwrite(fid,[NULLSPACE], 'float');
|
---|
49 | % fclose(fid);
|
---|
50 | %end
|
---|
51 | %NULLSPACEexternal = NULLSPACE;
|
---|
52 |
|
---|
53 | if error == -2
|
---|
54 | stable = 0;
|
---|
55 | end
|
---|