Как я могу оптимизировать значение матрицы в MATLAB? - PullRequest
0 голосов
/ 28 марта 2020

Я хочу найти оптимальную матрицу B (матрицу 2 * 4), которая делает элементы beta_d (вектор 1 * 4), являющиеся функцией матрицы B, равными соответствующим элементам "заданной" beta_u (1 * 4 вектора), т.е. я хочу получить значение матрицы B, которое составляет:

beta_d(1,1) = beta_u(1,1) && beta_d(1,2) = beta_u(1,2) && beta_d(1,3) = beta_u(1,3) && beta_d(1,4) = beta_u(1,4)

В моем прикрепленном коде, поскольку я новичок в MATLAB, я сгенерировал случайное значение матрицы B и использовал 'while l oop', чтобы проверить, удовлетворено ли мое состояние или нет. Этот способ неэффективен и занимает очень много времени, чтобы дать мне результат. Может ли кто-нибудь помочь мне оптимизировать значение матрицы B более эффективным и быстрым способом?

% Given H (4*2 matrix)
% Given A (2*2 diagonal matrix)
% Given C (4*4 matrix)
% Given P (4*4 diagonal matrix)
% Given C_l = 4; (constant value)
% Given beta_u (1*4 vector)

% I want to find the optimal B matrix (2*4 matrix) that makes the elements of the 1*4 beta_d vector equal to the corresponding ones of beta_u 1*4 vector
% i.e I want beta_d(1,1) = beta_u(1,1) && beta_d(1,2) = beta_u(1,2) && beta_d(1,3) = beta_u(1,3) && beta_d(1,4) = beta_u(1,4) 

%% My non-efficient code:

B = zeros(2,4); % intial value of B 2*4 matrix
beta_d = zeros(1,4); %intial value of beta_d 1*4 vector

% compare each element of beta_d with the corresponding one in beta_u
% optimize the value of B

while(beta_d(1) ~= beta_u(1) || beta_d(2) ~= beta_u(2) || beta_d(3) ~= beta_u(3) || beta_d(4) ~= beta_u(4)) %check the condition

    B = randn(2,4); % generate a random 2*4 B matrix

    for j=1:1:2     % calculate the 2*2 diagonal D matrix whose value depends on B 
        d(j) = (B(j,:)*P*B(j,:)')/((2^(2*C_l))-(norm(A(:,j))^2));
    end
    D = diag(d);   

    for i=1:1:4   % calculate beta_d (1*4 vector) whose value depends on B and D  
        V_d(i)=C(i,:)*P*B'*H(i,:)'*inv(1+H(i,:)*(A'*D*A+B*P*B')*H(i,:)');
        sigma_d(i)=norm((V_d(i)*H(i,:)*B-C(i,:))*(P^(1/2)))^2+(V_d(i)^2)*(1+H(i,:)*A'*D*A*H(i,:)');
        beta_d(i)=((P(i,i))/sigma_d(:,i)); 
    end
end  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...