Math 枫树魔方

Math 枫树魔方,math,linear-algebra,maple,magic-square,Math,Linear Algebra,Maple,Magic Square,好的,我真的需要你们的帮助,伙计们,我真的迷路了。这看起来很简单,但我想不出来。 注:这是3x3魔方的 这是幻方的条件: 1.一行的元素之和=k 2.一列元素的总和=k 3.对角线元素之和=k 问题是: 我必须把上面的3个条件转换成一个线性系统,其中x=(a,b,c,d,e,f,g,h,I)表示矩阵3x3的未知量,b是一个7x9矩阵 下面是我所做的: 所以我们的目标是写出一个形式为Bx=0的齐次系统,然后确定它的解。 但我现在有点不知所措,我觉得自己很愚蠢,因为看起来很容易哈哈,能有人帮忙会很

好的,我真的需要你们的帮助,伙计们,我真的迷路了。这看起来很简单,但我想不出来。 注:这是3x3魔方的

这是幻方的条件: 1.一行的元素之和=k 2.一列元素的总和=k 3.对角线元素之和=k

问题是: 我必须把上面的3个条件转换成一个线性系统,其中x=(a,b,c,d,e,f,g,h,I)表示矩阵3x3的未知量,b是一个7x9矩阵

下面是我所做的:

所以我们的目标是写出一个形式为Bx=0的齐次系统,然后确定它的解。
但我现在有点不知所措,我觉得自己很愚蠢,因为看起来很容易哈哈,能有人帮忙会很感激的谢谢你

我建议用较少数量的自由变量来求解系统,然后使用[1,…,9]的置换来检查解。请尝试以下操作,使用k=15并返回单个解决方案(在移除旋转和反射后):

重启;
#变量的数量。
m:=9;
#变量。
X:=[序列(X[i],i=1..m)];
#指数。
N:=[顺序(i,i=1..m)];
#方程式。
等式:=[x[1]+x[2]+x[3]=15,
x[4]+x[5]+x[6]=15,
x[7]+x[8]+x[9]=15,
x[1]+x[4]+x[7]=15,
x[2]+x[5]+x[8]=15,
x[3]+x[6]+x[9]=15,
x[1]+x[5]+x[9]=15,
x[3]+x[5]+x[7]=15
];
#移除等效解的约束。
INEQ:=[x[1]
我发现这个计划有一个很大的潜在问题:通常魔方要求1)所有值都是整数,2)所有值都是不同的。这两个条件似乎都是非常非线性的。但我的目标是用这些信息创建一个形式为Bx=0的齐次系统,所以我不确定这项工作,mmmok,我忘了在方程中添加第二条对角线,所以方程8:=a+e+i=k,应该在那里,我的老师提到,因为k=a+b+c=k,我们可以在其他方程中替换k的值,所以我们得到7个方程。
restart;

# Number of variables.
m := 9;

# Variables.
X := [ seq( x[i], i=1..m ) ];

# Indices.
N := [ seq( i, i=1..m ) ];

# Equations.
EQ := [ x[1] + x[2] + x[3] = 15,
        x[4] + x[5] + x[6] = 15,
        x[7] + x[8] + x[9] = 15,
        x[1] + x[4] + x[7] = 15,
        x[2] + x[5] + x[8] = 15,
        x[3] + x[6] + x[9] = 15,
        x[1] + x[5] + x[9] = 15,
        x[3] + x[5] + x[7] = 15
];

# Constraints to remove equivalent solutions.
INEQ := [ x[1] < x[3], x[1] < x[7], x[1] < x[9], x[3] < x[7] ];

# Solve in terms of free parameters.
A, B := LinearAlgebra:-GenerateMatrix( EQ, X );
S := convert( LinearAlgebra:-LinearSolve( A, B, ':-free'=x ), 'list' );

# Free parameters.
Q := convert( indets( S, 'name' ), 'list' );
n := numelems( Q );

# Table to store solutions.
H := table();

# Cycle through all possible values for Q, first by combination, and then by permutation,
# and record any solutions found.
for i from 1 to combinat:-numbcomb( m, n ) do

    if i = 1 then
        C := convert( combinat:-firstcomb( m, n ), 'list' ):
    else
        C := convert( combinat:-nextcomb( C, m ), 'list' ):
    end if:

    for j from 1 to n! do

        if j = 1 then
            P := C:
        else
            P := combinat:-nextperm( P ):
        end if:

        T := eval( S, Q =~ P ):

        # Check if it is a solution satisfying all the constraints.
        if andmap( is, [ sort( T ) = N, op( eval( EQ, X =~ T ) ), op( eval( INEQ, X =~ T ) ) ] ) then
                H[T] := NULL:
        end if:

    end do:

end do:

# Solutions.
map( op, [ indices( H ) ] );