Найти матрицу U, при условии, что значения матрицы U целые и находятся в диапазоне [0;5].

Обсуждение вопросов связанных с параллельными и распределенными вычислениями

Модератор: Admin

Parizit
Пользователь
Сообщения: 1
Зарегистрирован: Вс дек 16, 2018 7:57 pm

Найти матрицу U, при условии, что значения матрицы U целые и находятся в диапазоне [0;5].

Сообщение Parizit » Вс дек 16, 2018 8:33 pm

Добрый вечер! Помогите пожалуйста решить задачку. Дана матрица А, M0, Mf и надо найти матрицу U, при условии, что значения матрицы U целые и находятся в диапазоне [0;5], а также следует (если несколько решений) значения выбирать минимальным. Эти все матрицы связаны выражением Mf=M0+A*U. Буду очень благодарен за код программы.
Я попробовал сделать перебором через циклы, но слишком много уравнений получилось, по этому очень долго считает. Может кто-то сможет оптимизировать или предложить другой вариант решения

Код: Выделить всё

 
clear all
% Начальная матрица
%  t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24
A=[ 1  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0;  %p1
    0  1  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0;  %p2
    0  1  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0;  %p3
    0  0  0  0  0  1  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0;  %p4
    0  0  0  0  0  1  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0;  %p5
    0  0  0  0  0  1  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0;  %p6
   -1  0  1 -1  1  0  0  1  0   0  -1   0   0   0   0   0   0   0   0   0   0   0   0   0;  %p7
    0 -2 -1  1  0  0  2  0  1   0   0  -1   0   0   0   0   0   0   0   0   0   0   0   0;  %p8
    0  0  0  0 -1  0  0  0  0  -5   0   0   0   0  -1   0   0   0   0   0   0   0   0   0;  %p9
    0  0  0  0  0 -3 -2  0  0   5   0   0   0   0   0   0   0   0   0   0   0   0   0   0;  %p10
    0  0  0  0  0  0  0 -1  0   0   1   0   1  -1   0  -1   0   1   0   0   0   0   0   0;  %p11
    0  0  0  0  0  0  0  0 -1   0   0   1  -1   1   0   0  -1   0   1   0   0   0   0   0;  %p12
    0  0  0  0  0  0  0  0  0   0   0   0   0   0   1   0   0   0   0  -1  -1   0   0   0;  %p13
    0  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0;  %p14
    0  0  0  0  0  0  0  0  0   0   0   0   0   0   0   1   0  -1   0   1   0   0   1  -1;  %p15
    0  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0   1   0  -1   0   1  -1  -1   1]; %p16

% Задаем матрицу M0
M0=[0;
    0;
    0;
    0;
    0;
    0;
    0;
    0;
    7;
    0;
    0;
    0;
    0;
    0;
    0;
    0];

Mf =[1;
     1;
     1;
     1;
     1;
     1;
     0;
     0;
     0;
     0;
     0;
     0;
     0;
     1;
     0;
     0];
 U=zeros(1,24);
 k=1;
 for U1=0:1
     U(1)=U1;
 for U2=0:1
     U(2)=U2;
 for U3=0:1
     U(3)=U3;
 for U4=0:1
     U(4)=U4;
 for U5=0:1
     U(5)=U5;
 for U6=0:1
     U(6)=U6;
 for U7=0:1
     U(7)=U7;
 for U8=0:1
     U(8)=U8;
 for U9=0:1
     U(9)=U9;
 for U10=0:1
     U(10)=U10;
 for U11=0:1
     U(11)=U11;
 for U12=0:1
     U(12)=U12;
 for U13=0:1
     U(13)=U13;
 for U14=0:1
     U(14)=U14;
 for U15=0:1
     U(15)=U15;
 for U16=0:1
     U(16)=U16;
 for U17=0:1
     U(17)=U17;
 for U18=0:1
     U(18)=U18;
 for U19=0:1
     U(19)=U19;
 for U20=0:1
     U(20)=U20;
 for U21=0:1
     U(21)=U21;
 for U22=0:1
     U(22)=U22;
 for U23=0:1
     U(23)=U23;
 for U24=0:1
     U(24)=U24;
     if M0+A*U'==Mf
         u_sol(k,1:24)=U;
         k=k+1;
         break
     end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 end
 S=size(u_sol);
 sums=zeros(1,S(1));
 sums(1)=sum(u_sol(1,:));
 min_sum=sums(1);
 u_min=u_sol(1,:);
for i=2:S(1)
    sums(i)=sum(u_sol(i,:));
    if sums(i)<min_sum
        min_sum=sums(i);
        u_min=u_sol(i,:);
    end
end;
disp (u_min)
Z=M0+A*(u_min)'-Mf % ПРоверка решения