读书笔记(十)
%% 矩阵的操作 format short A = magic(3) %产生三阶幻方矩阵 sum(A) %对列求和 sum(A')' %对行求和 sum(diag(A)) %对主对角线求和 sum(diag(flipud(A))) %对副对角线求和 sum(1:9)/3 %第一项到第九项和的三分之一 for k = 0:3 rot90(A,k) %将A逆时针旋转k个90度 rot90(A',k) %将A的转置逆时针旋转k个90度 end %% 求解幻方每行每列的和 n = (3:10)'; (n.^3 + n)/2 %% 矩阵的循环求法 n = 7; A = zeros(n,n); i = 1; j = (n+1)/2; figure axis off for k = 1:n^2 is = i; js = j; A(i,j) = k; i = n - rem(n+1-i,n); j = rem(j,n) + 1; if A(i,j) ~= 0 i = rem(is,n) + 1; j = js; end clf surf(A); pause(0.1) end
%% 奇数阶幻方矩阵求法 n = 5 [I,J] = ndgrid(1:n); % 给I、J赋值 % I按行递增 % J按列递增 A = mod(I+J+(n-3)/2,n); B = mod(I+2*J-2,n); M = n*A + B + 1 % 算法什么的,膜拜一下就好 %% 偶数阶幻方矩阵求法 n = 4 M = reshape(1:n^2,n,n)'; % 把1到n平方顺序排在4X4矩阵中 [I,J] = ndgrid(1:n); K = fix(mod(I,4)/2) == fix(mod(J,4)/2); M(K) = n^2+1 - M(K) % 算法什么的,膜拜一下就好 %% 求矩阵的秩 figure for n = 3:20 r(n) = rank(magic(n)); end bar(r) axis([2 21 0 20]) % 奇数阶幻方矩阵都是满秩的
%% 绘制三维图(surf网格) figure for n = 9:12 subplot(2,2,n-8) %绘制2X2个图 %后一个参数表示顺序 surf(rot90(magic(n))) axis tight off text(0,0,20,num2str(n)) end set(gcf,'color','white')