-
Notifications
You must be signed in to change notification settings - Fork 0
/
sp_mat2latex.m
60 lines (57 loc) · 2.16 KB
/
sp_mat2latex.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
function [val,row_ip,col_ip] = sp_mat2latex(A, sp_type)
if strcmp(sp_type, 'csr')
A = transpose(A); % η find με transposed A μας δίνει row_ptr αλλίως μας δίνει col_ptr (δηλαδή csc)
end
[M,n,val] = find(A); % το n μας δίνει σε ποιο row ή col βρέθηκε non-zero αλλά εμείς θέλουμε να βρούμε τα ptr όχι indexes
sizeA = size(A);
N = zeros(sizeA(2)+1,1); % το array πάντα είναι n + 1, οπού n ο αριθμός των rows (σε csr) ή cols (σε csc)
N(1) = 1;
for k = 2:sizeA(2)+1
N(k) = N(k-1) + size(n(n==k-1),1); % προσθέτουμε τον αριθμό των μη μηδενικών που βρέθηκε στο k-1 row (csr) στη k-οστή θέση
end
% από εδώ και κάτω είναι τα prints για το tex αρχείο
v = size(val);
edit 'erot1.tex';
f = fopen('erot1.tex', 'w');
fprintf(f, '\\begin{center}\n');
fprintf(f, 'val = \\begin{tabular}{|');
for k = 1:v(1)
fprintf(f, 'l|');
end
fprintf(f, '} \\hline\n');
fprintf(f, '%0.4f', val(1,1));
for t = 2:v(1)
fprintf(f, ' & %0.4f', val(t,1));
end
fprintf(f, '\\\\ \\hline\n\\end{tabular}\n\\\\\n\\vspace{\\baselineskip}\n');
v = size(M);
fprintf(f, 'IA = \\begin{tabular}{|');
for k = 1:v(1)
fprintf(f, 'l|');
end
fprintf(f, '} \\hline\n');
fprintf(f, '%i', M(1,1));
for t = 2:v(1)
fprintf(f, ' & %i', M(t,1));
end
fprintf(f, '\\\\ \\hline\n\\end{tabular}\n\\\\\n\\vspace{\\baselineskip}\n');
v = size(N);
fprintf(f, 'JA = \\begin{tabular}{|');
for k = 1:v(1)
fprintf(f, 'l|');
end
fprintf(f, '} \\hline\n');
fprintf(f, '%i', N(1,1));
for t = 2:v(1)
fprintf(f, ' & %i', N(t,1));
end
fprintf(f, '\\\\ \\hline\n\\end{tabular}\n\\\\\n\\vspace{\\baselineskip}\n');
fprintf(f, '\\end{center}\n');
fclose(f);
if strcmp(sp_type, 'csr')
col_ip = M;
row_ip = N;
else
col_ip = N;
row_ip = M;
end