% === Input Data ==========
n=30;
k=[4 5 5 6];
% ==== Algorithm =====
if max(k)>n
disp 'k не может быть больше n'
return
end
% == создаем переменные и налагаем на каждую общие условия
X=sym('x',[1 length(k)], 'integer');
for i=1:length(X)
assumeAlso(X(i)>-1)
end
% == составляем уравнение ===
sym eq
eq=k(1)*X(1);
for i=2:length(X)
eq=eq+k(i)*X(i);
end
eq
% ===== дальше организуем цикл solve для решателя до получения пустой структуры
RES=[];
t=0;
while t==0
% === решаем ===============
S=solve(eq==n,X);
%[S, X, k, l, m, conds] = solve(eq==n, X, 'ReturnConditions', true);
if isempty(S)==1
t=1;
else
% === Извлекаем набор переменных из структуры
a=struct2cell(S);
for i=1:length(X)
a{i,1}=double(a{i,1});
end
a=a';
temp=zeros(1,length(X));
for i=1:length(X)
temp(i)=a{1,i};
end
% === Добавляем в матрицу результатов
RES=[RES;temp]
% === Добавляем к условиям на переменную
assumeAlso(X~=temp)
end
end