幻方问题(Magic Squares)

news/2024/12/22 20:18:07/

目录

基本介绍

丢勒-幻方

高阶幻方矩阵

习题

1. 幻方检测

2. durerperm

3. 颜色分配表

 4. 幻方矩阵的逆矩阵

5. 幻方矩阵的秩


基本介绍


        n×n幻方是含有1到n^2的整数数组,排列后是的每一行、每一列、正反两条主对角线上数字的和都是相同的。对于每个n>2都有很多不同的n×n幻方,函数magic(n)只产生一个特定的幻方。

rot90 将数组旋转 90 度

%% A Few Elementary Array Operations.format shortA = magic(3)sum(A)sum(A')'sum(diag(A))sum(diag(flipud(A)))sum(1:9)/3for k = 0:3rot90(A,k)rot90(A',k)end

丢勒-幻方


%% Durer's Melancoliaclear allclose allfigureload durerwhos  %数组X中给出像素的值为灰度颜色分配表(olormap) map的索引值image(X)colormap(map)axis image%% Durer's Magic Squarefigureload detailimage(X)colormap(map)axis imageA = magic(4)A = A(:,[1 3 2 4])


高阶幻方矩阵


幻方和

%% Magic Sumn = (3:10)';(n.^3 + n)/2

分三种情况生成幻方矩阵:

(1)n为奇数

(2)n为单偶数(能够被2整除,但是不能被4整除)

(3)n为双偶数(能被4整除)

 

 


生成奇数和双偶数幻方矩阵 

%% Odd Order 奇数阶幻方矩阵n = 5[I,J] = ndgrid(1:n);A = mod(I+J+(n-3)/2,n);B = mod(I+2*J-2,n);M = n*A + B + 1%% Doubly Even Order  n是为双偶数n = 4M = reshape(1:n^2,n,n)';[I,J] = ndgrid(1:n);K = fix(mod(I,4)/2) == fix(mod(J,4)/2);M(K) = n^2+1 - M(K)%% Rank 幻方矩阵的秩figurefor n = 3:20r(n) = rank(magic(n));end bar(r)axis([2 21 0 20])%% Ismagical  判定是否为幻方矩阵help ismagicalfor n = 3:10ismagical(magic(n))end

表面图

%% Surf Plots   表面图figurefor n = 9:12subplot(2,2,n-8)surf(rot90(magic(n)))axis tight offtext(0,0,20,num2str(n))endset(gcf,'color','white')

 


习题


1. 幻方检测

function result = ismagic(A)[m, n] = size(A);% Check if A is a square matrixif m ~= nerror('Input matrix must be a square matrix.');end% Calculate the expected sumexpectedSum = sum(A(1, :));% Check rowsrowSums = sum(A, 2);if ~all(rowSums == expectedSum)result = false;return;end% Check columnscolSums = sum(A, 1);if ~all(colSums == expectedSum)result = false;return;end% Check main diagonalif sum(diag(A)) ~= expectedSumresult = false;return;end% Check secondary diagonal (if matrix size is odd)if mod(n, 2) == 1if sum(diag(flip(A))) ~= expectedSumresult = false;return;endend% If all checks pass, the matrix is a magic squareresult = true;
end

2. durerperm

换行或者换列后,元素和保持不变。

function durerperm(arg)
% DURERPERM  Permute Durer's magic square.
% Click on two different rows or columns.
% Is the result still a magic square?if nargin == 0shgload detailimage(X,'buttondownfcn','durerperm(''click'')')colormap(map)axis image offset(gca,'userdata',[])title('Click on two rows or columns')
elseif isequal(arg,'click')cp = get(gca,'currentpoint');a = 35;b = 29;h = 74;w = 75;p = [ceil((cp(1,1)-a)/h) ceil((cp(1,2)-b)/w)];if any(p < 1) || any(p > 4), return, endif isempty(get(gca,'userdata'))set(gca,'userdata',p)elsep1 = get(gca,'userdata');p2 = p;Xp = get(gca,'child');X = get(Xp,'cdata');c = h*(0:3);d = w*(0:3);c([p1(2) p2(2)]) = c([p2(2) p1(2)]);d([p1(1) p2(1)]) = d([p2(1) p1(1)]);i = 0:h-1;j = 0:w-1;I = a+[c(1)+i c(2)+i c(3)+i c(4)+i];J = b+[d(1)+j d(2)+j d(3)+j d(4)+j];K = a+(0:4*h-1);L = b+(0:4*w-1);X(K,L) = X(I,J);set(Xp,'cdata',X)set(gca,'userdata',[])end
end

3. 颜色分配表

    clear load detail; whosmap, captionX(101:130, 101:118)min(min(X))max(max(X))image(X)axis image%colormap(map)colormap("hot")%colormap("cool")%colormap("copper")%colormap("pink")

 


 4. 幻方矩阵的逆矩阵

幻方矩阵的逆矩阵可以通过inv求出

X= inv(magic(n))

这个逆矩阵的元素不再保证为正数、整数,但是具有相同的行和列和。

对于偶数阶次n来说,行列数det(magic(n))为0,矩阵为奇异矩阵,逆矩阵不存在


5. 幻方矩阵的秩

三种不同算法产生的幻方矩阵的秩是不同的:

阶次n        秩

奇数          n

单偶数      n/2+2

双偶数      3   


http://www.ppmy.cn/news/983792.html

相关文章

Docker的数据管理和Dockerfile的指令

Docker的数据管理 一、Docker数据的概念1、数据卷2、数据卷容器 二、端口映射三、容器互联&#xff08;使用centos镜像&#xff09;四、Docker 镜像的创建1、基于现有镜像创建&#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改&#xff08;2&#xff09;然…

全志F1C200S嵌入式驱动开发(spi-nor驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和v3s一样,f1c200s本身也支持spi-nor flash。当然,不管是norflash,还是nandflash,都是为了能够让程序脱离sd卡,直接依靠板子上面的flash,就可以完成正常地加载和运行工作。tf…

Redis在云服务器上的安装与客户端连接配置

文章目录 Redis1.Redis的安装2.设置远程连接3.客户端连接3.1 客户端下载 Redis 1.Redis的安装 yum 安装 redis&#xff0c;使用以下命令&#xff0c;直接将 redis 安装到 linux 服务器&#xff1a; yum -y install redis 启动 redis使用以下命令&#xff0c;以后台运行方式启…

关于LAMP的介绍

LAMP 学习目标 配置基于 php5_module 模块的 LAMP 环境配置基于 php-fpm 和 proxy_fcgi_module 模块的 LAMP 环境安装 SCL 仓库中的 PHP 7.0安装配置 LAMP 应用配置 AWStats 实现虚拟主机访问日志分析统计 任务1&#xff1a;安装配置 LAMP 环境(1) 要求 基于 CentOS7 官方仓库…

SpringBoot-4

Spring Boot 使用 slf4j 日志 在开发中经常使用 System.out.println()来打印一些信息&#xff0c;但是这样不好&#xff0c;因为大量的使用 System.out 会增加资源的消耗。实际项目中使用的是 slf4j 的 logback 来输出日志&#xff0c;效率挺高的&#xff0c;Spring Boot 提供…

Qt - .ui 文件的使用

文章目录 目录工具栏Dock Widget代码控制 ui添加资源添加文件 目录 子目录只能输入英文&#xff0c;想要显示中文&#xff0c;可以修改右下方表中的 text 属性&#xff1a; 工具栏 让工具栏共用 菜单栏的 new 和 open&#xff0c;只需将下方列表的控件&#xff0c;拖拽到工具栏…

优化 PHP 数据库查询性能

优化 PHP 数据库查询性能可以从以下几个方面入手&#xff1a; 使用索引&#xff1a;在数据库中创建适当的索引可以大大提高查询性能。索引可以加快数据的查找速度&#xff0c;特别是在大型数据库中。选择合适的数据类型&#xff1a;选择正确的数据类型可以减少存储空间的占用&…

MSP432自主开发笔记4:DS3115舵机的0~180全角度驱动

芯片使用&#xff1a;MSP432P401R. 今日学习一款全角度15KG大扭力舵机的驱动&#xff0c;最近电赛学习任务紧&#xff0c;更新一篇比较水的文章&#xff1a; 文章提供原理解释&#xff0c;全部代码&#xff0c;整体工程&#xff1a; 目录 舵机驱动原理: 这是舵机DS3115MG:…