📄 list.m
字号:
function list (dev,s,A)
%----------------------------------------------------------------
% Usage: list (dev,s,A)
%
% Description: Display a matrix on a device
%
% Inputs: dev = device or file id returned by fopen
%
% 1 = stdout
% 2 = stderr
%
% s = string used to label the matrix
% A = matrix to be displayed
%----------------------------------------------------------------
rows = 22; % rows per screen
cols = 80; % columns per screen
rlab = 5;
last = 0;
ne = ' '; se = ' '; nw = ' '; sw = ' ';
bar = '|';
dash = '-';
for i = 1 : 80
dashes(i) = dash;
end
% Initialize
[m,n] = size(A);
if isreal(A)
% Construct format string
col = 12;
format = strings2 ('%',num2str(col));
format = strings2 (format,'.4g');
c = length(s) + 3;
width = floor((cols - 7 - c)/col);
n0 = 1;
n1 = min([n width]);
y1 = round((m+1)/2);
% Real scalar
if m*n == 1
fprintf (dev,'\n%s = ',s);
fprintf (dev,'%.4g\n',A(1,1));
return;
end
while ~last
% Label columns
if n > 1
fprintf (dev,'%s',blanks(c+col/2+1));
for i = n0 : n1
fprintf (dev,'%3i',i);
if i < n1
fprintf (dev,'%s',blanks(col-3));
end
end
end
% Print real A
k = n1 - n0 + 1;
fprintf (dev,'\n');
for i = 0 : m+1
if (i == 0) | (i == (m+1))
fprintf (dev,'%s',blanks(c));
if i == 0
fprintf (dev,'%c',nw);
else
fprintf (dev,'%c',sw);
end
fprintf (dev,'%s',dashes(1:col*k+1));
if i == 0
fprintf (dev,'%c\n',ne);
else
fprintf (dev,'%c\n',se);
end
else
if rem(i+1,rows) == 0
wait
end
if (i == y1)
fprintf (dev,'%s = ',s);
else
fprintf (dev,'%s',blanks(c));
end
fprintf (dev,'%c',bar);
for j = n0 : n1
fprintf (dev,format,A(i,j));
end
if (m > 2*rlab) & (rem(i,rlab) == 0)
fprintf (dev,' %c%3i\n',bar,i);
else
fprintf (dev,' %c\n',bar);
end
end
end
if n1 < n
n0 = n1 + 1;
n1 = min([n1+width,n]);
wait
else
last = 1;
end
end
else
% Comstruct format string
col = 24;
format = strings2 ('%',num2str(col/2-1));
format = strings2 (format,'.4g%+');
format = strings2 (format,num2str(col/2-1));
format = strings2 (format,'.4gi');
c = length(s) + 3;
width = floor((cols - 7 - c)/col);
n0 = 1;
n1 = min([n,width]);
y1 = round((m+1)/2);
% Complex scalar
if m*n == 1
fprintf (dev,'\n%s = ',s);
fprintf (dev,'%.4g%+.4gi\n',real(A(1,1)),imag(A(1,1)));
return;
end
while ~last
% Label columns
if n > 1
fprintf (dev,'%s',blanks(c+col/2-1));
for i = n0 : n1
fprintf (dev,'%3i',i);
if i < n1
fprintf (dev,'%s',blanks(col-3));
end
end
end
% Print complex A
k = n1 - n0 + 1;
fprintf (dev,'\n');
for i = 0 : m+1
if (i == 0) | (i == (m+1))
fprintf (dev,'%s',blanks(c));
if i == 0
fprintf (dev,'%c',nw);
else
fprintf (dev,'%c',sw);
end
fprintf (dev,'%s',dashes(1:col*k-1));
if n1 == n
fprintf (dev,'%c',dash);
end
if i == 0
fprintf (dev,'%c\n',ne);
else
fprintf (dev,'%c\n',se);
end
else
if rem(i+1,rows) == 0
wait
end
if (i == y1)
fprintf (dev,'%s = ',s);
else
fprintf (dev,'%s',blanks(c));
end
fprintf (dev,'%c',bar);
for j = n0 : n1
fprintf (dev,format,real(A(i,j)),imag(A(i,j)));
end
if (m > 2*rlab) & (rem(i,rlab) == 0)
fprintf (dev,' %c%3i\n',bar,i);
else
fprintf (dev,' %c\n',bar);
end
end
end
if n1 < n
n0 = n1 + 1;
n1 = min([n1+width,n]);
wait
else
last = 1;
end
end
end
% Finalize
if dev > 1
fclose (dev);
end
%----------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -