Хорошо, мне действительно нужна ваша помощь, ребята, я действительно потерял, это выглядит так просто, но я не могу этого понять. Примечание: это для магического квадрата 3x3.
Итак, вот условие магического квадрата: 1. сумма элементов строки = k 2. сумма элементов столбца = k 3. сумма элементов диагонали = k
Вопрос в том : Мне нужно перевести 3 условия в линейную систему Bx = 0, где x = (a, b, c, d, e, f, g, h, i), которая представляет неизвестное для матрицы 3x3, а B - это Матрица 7х9.
Итак, вот что я сделал:
Итак, да, цель состоит в том, чтобы написать однородную систему с формой Bx = 0, чтобы затем определить ее решение. Но я немного заблудился в этот момент, я чувствую себя глупо, потому что это кажется легким, ха-ха, мог бы кто-то помочь, спасибо!





Я предлагаю решить систему в терминах меньшего числа свободных переменных, а затем использовать перестановки [1, ..., 9] для проверки решений. Попробуйте следующее, в котором используется k = 15 и возвращается единственное решение (после удаления поворотов и отражений):
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 ) ] );
Но моя цель - создать с помощью информации, что у меня есть однородная система формы Bx = 0, поэтому я не уверен, работает ли это ммм
хорошо, оказывается, я забыл добавить вторую диагональ в свои уравнения, поэтому eq8: = a + e + i = k: должно быть там, мой учитель упомянул, что, поскольку k = a + b + c = k, мы можем заменить это значение k в уравнениях друг друга, поэтому мы получаем 7 уравнений.
Я вижу большую потенциальную проблему с этим планом: обычно магический квадрат требует, чтобы 1) все значения были целыми числами и 2) все значения были разными. Оба эти условия кажутся существенно нелинейными.