幻方问题(Magic Squares)

news2024/9/23 5:16:44

目录

基本介绍

丢勒-幻方

高阶幻方矩阵

习题

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 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)
       rot90(A',k)
    end

丢勒-幻方


%% Durer's Melancolia
    clear all
    close all
    figure
    load durer
    whos  %数组X中给出像素的值为灰度颜色分配表(olormap) map的索引值
    image(X)
    colormap(map)
    axis image

%% Durer's Magic Square
    figure
    load detail
    image(X)
    colormap(map)
    axis image
    A = magic(4)
    A = A(:,[1 3 2 4])


高阶幻方矩阵


幻方和

%% Magic Sum
    n = (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 = 4
    M = 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 幻方矩阵的秩
    figure
    for n = 3:20
       r(n) = rank(magic(n));
    end 
    bar(r)
    axis([2 21 0 20])

%% Ismagical  判定是否为幻方矩阵
    help ismagical
    for n = 3:10
       ismagical(magic(n))
    end

表面图

%% Surf Plots   表面图
    figure
    for n = 9:12
       subplot(2,2,n-8)
       surf(rot90(magic(n)))
       axis tight off
       text(0,0,20,num2str(n))
    end
    set(gcf,'color','white')

 


习题


1. 幻方检测

function result = ismagic(A)
    [m, n] = size(A);

    % Check if A is a square matrix
    if m ~= n
        error('Input matrix must be a square matrix.');
    end

    % Calculate the expected sum
    expectedSum = sum(A(1, :));

    % Check rows
    rowSums = sum(A, 2);
    if ~all(rowSums == expectedSum)
        result = false;
        return;
    end

    % Check columns
    colSums = sum(A, 1);
    if ~all(colSums == expectedSum)
        result = false;
        return;
    end

    % Check main diagonal
    if sum(diag(A)) ~= expectedSum
        result = false;
        return;
    end

    % Check secondary diagonal (if matrix size is odd)
    if mod(n, 2) == 1
        if sum(diag(flip(A))) ~= expectedSum
            result = false;
            return;
        end
    end

    % If all checks pass, the matrix is a magic square
    result = 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 == 0
   shg
   load detail
   image(X,'buttondownfcn','durerperm(''click'')')
   colormap(map)
   axis image off
   set(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, end
   if isempty(get(gca,'userdata'))
      set(gca,'userdata',p)
   else
      p1 = 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; whos
    map, caption
    X(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.coloradmin.cn/o/798983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java类的默认构造函数

什么情况下存在默认构造函数 说明 如果一个Java类没有显式包含构造函数的声明&#xff0c;那么隐含着有一个默认构造函数。 示例 定义一个类B&#xff0c;没有显式声明构造函数&#xff0c;所以存在一个默认构造函数&#xff1a; package com.thb;public class B {public …

你说你会Java手动锁,但你会这道题吗???

按照这个格式输出你会吗&#xff1f;&#xff1f;&#xff1f; 你说你不会&#xff0c;接下来认真看认真学了。 1.首先引入原子类。AtomicInteger num new AtomicInteger(0); 什么是原子类&#xff1f; 就是可以保证线程安全的原子操作的数据类型。 有什么作用&#xff1f;…

Selenium结合Unittest

1、Unittest&#xff1a;单元测试框架 ——对软件中的最小可测单元进行检查和验证 作用&#xff1a; 提供用例组织及执行提供丰富的断言方法&#xff08;判断实际结果与预期结果是否一致&#xff09;提供丰富的日志及测试结果 2、Unittest核心要素 TestCase&#xff08;测…

易混淆-for循环中的break与return

1、for循环中的return不仅会跳出循环&#xff0c;还还会跳出当前函数。 2、for循环中的break只会跳出循环&#xff0c;结束for循环。 例&#xff1a;

Git的远程操作与多人协作

"爱在地图上剥落&#xff0c;我离孤单几公里~" 我们目前所说、所学的内容&#xff08;工作区、暂存区、版本库&#xff09;都只是存在于本地上&#xff0c;也就是说你的一台机器上只有这么一个你维护的版本库。可是Git是一个分布式版本控制系统&#xff0c;这又是什…

国产化 | 走近人大金仓-KingbaseES数据库

引入 事务隔离级别 || KingbaseES数据库 开篇 1、KingbaseES数据库 百度百科&#xff1a;金仓数据库的最新版本为KingbaseES V8&#xff0c; KingbaseES V8在系统的可靠性、可用性、性能和兼容性等方面进行了重大改进&#xff0c;支持多种操作系统和硬件平台支持Unix、Linux…

搭建测试平台开发(一):Django基本配置与项目创建

一、安装Django最新版本 1 pip install django 二、创建Django项目 首先进入要存放项目的目录&#xff0c;再执行创建项目的命令 1 django-admin startproject testplatform 三、Django项目目录详解 1 testplatform 2 ├── testplatform  # 项目的容器 3 │ ├──…

2.03 PageHelper分页工具

步骤1&#xff1a;在application.yml中添加分页配置 # 分页插件配置 pagehelper:helperDialect: mysqlsupportMethodsArguments: true步骤2&#xff1a;在顶级工程pom文件下引入分页插件依赖 <!--5.PageHelper --> <dependency><groupId>com.github.pagehe…

《golang设计模式》第一部分·创建型模式-02-原型模式(Prototype)

文章目录 1. 概念1.1 简述1.2 角色1.3 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概念 1.1 简述 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象 1.2 角色 Prototype&#xff08;抽象原型类&#xff09;&#xff1a;它是声明克隆方法的接口…

python多进程编程(模式与锁)

multiprocessing的三种模式 fork&#xff0c;【拷贝几乎所有资源】【支持文件对象/线程锁等传参】【unix】【任意位置开始】【快】spawn&#xff0c;【run参数传参必备资源】【不支持文件对象/线程锁等传参】【unix、win】【main代码块开始】【慢】forkserver&#xff0c;【ru…

数据库提供的系统函数及添加外键约束

十八、数据库提供的系统函数 1、数值型函数 2、字符串函数 注意&#xff1a;使用utf8mb4或者utf8汉字都在第三个字节&#xff0c;是Unicode编码&#xff0c;所以一个汉字占3个字节 GBK编码&#xff0c;一个汉字两个字节 char_length()不管编码&#xff0c;中文英文都一个 下标…

Linux下安装RabbitMQ教程

官方安装指南&#xff1a;https://www.rabbitmq.com/install-rpm.html 我们将要安装的RabbitMQ的版本是3.8.2 el/7/rabbitmq-server-3.8.2-1.el7.noarch.rpm - rabbitmq/rabbitmq-server packagecloud 不需要单独安装Erlang环境。 2. 环境配置&#xff1a; 前提&#xff…

吃透《西瓜书》第三章 线性模型

&#x1f349; 吃瓜系列 教材&#xff1a;《机器学习》 周志华著 &#x1f552;时间&#xff1a;2023/7/25 &#x1f4d3; 参考&#xff1a;周志华《机器学习》西瓜书啃书指导 &#x1f4d3; 参考&#xff1a;第3章-一元线性回归 前言 什么是回归&#xff1f; 回归&#xff1…

echart折线图,调节折线点和y轴的间距(亲测可用)

options代码&#xff1a; options {tooltip: {trigger: axis, //坐标轴触发&#xff0c;主要在柱状图&#xff0c;折线图等会使用类目轴的图表中使用。},xAxis: {type: category,//类目轴&#xff0c;适用于离散的类目数据&#xff0c;为该类型时必须通过 data 设置类目数据。…

申请开通【商家转账到零钱】超时后如何反馈?

前言 在微信开放社区看到很人【商家转账到零钱】超过了7-15个工作日没有回复&#xff0c;还在审核中&#xff0c;遇到这个问题怎么解决呢&#xff1f;我最近正好在申请&#xff0c;这篇文章我就要讲讲我是如何找到客服&#xff0c;并且得到反馈的。 步骤 1.关注【腾讯客服】公…

VBA技术资料MF34:检查Excel自动筛选是否打开

【分享成果&#xff0c;随喜正能量】聪明人&#xff0c;抬人不抬杠&#xff1b;傻子&#xff0c;抬杠不抬人。聪明人&#xff0c;把别人抬得很高&#xff0c;别人高兴、舒服了&#xff0c;看你顺眼了&#xff0c;自然就愿意帮你&#xff01;而傻人呢&#xff1f;不分青红皂白&a…

nsq整体架构及各个部件作用详解

文章目录 前言 nsq的整体架构图 部件&#xff1a;nsqd 部件&#xff1a;nsqlookupd 部件&#xff1a;nsq连接库 部件&#xff1a;nsqadmin 前言 上两篇博客 centos环境搭建nsq单点_YZF_Kevin的博客-CSDN博客 linux环境搭建nsq集群_YZF_Kevin的博客-CSDN博客 我们讲了nsq是…

【Qt】QML-01:使用QtCreator10创建QML工程,并讲解第一个程序:Hello World

1、创建QML工程 1&#xff09;新建工程 打开QtCreator10,依次点击“Create Project” --> “Application(Qt)” --> “Qt Quick Application(compat)” 注意&#xff1a;本人打算使用Qt5.15.2创建工程&#xff0c;而非Qt6,因此选择兼容低于Qt6版本的“Qt Quick Applicat…

深度学习入门教程(2):使用预训练模型来文字生成图片TextToImageGenerationWithNetwork

本深度学习入门教程是在polyu HPCStudio 启发以及资源支持下进行的&#xff0c;在此也感谢polyu以及提供支持的老师。 本文内容&#xff1a;在GoogleColab平台上使用预训练模型来文字生成图片Text To Image Generation With Network &#xff08;1&#xff09;你会学到什么&a…

TEE GP(Global Platform)技术委员会及中国任务小组

TEE之GP(Global Platform)认证汇总 一、TEE GP技术委员会 二、GP中国任务小组 参考&#xff1a; GlobalPlatform Certification - GlobalPlatform