Вопрос:

Как сделать так, чтобы цикл показывал график каждую итерацию?

matlab matrix matlab-figure linear-algebra

35 просмотра

1 ответ

130 Репутация автора

Общая идея
Я работал над проектом линейной алгебры, в котором идея состоит в том, чтобы проверить, является ли данный набор векторов (матрица) линейно зависимым / независимым . Для этого следующая программа получает матрицу с именем value (пользовательский ввод / MxN) и делает первый проход для критерия (у этой части нет проблем), затем, если векторы линейно зависимы, она должна проверить, есть ли между внутренними векторами какой-либо Подмножество LI / LD, для этого он начинает итерацию, делая перестановки строк и устанавливая для него критерий, если это приводит к подмножеству LI, он должен построить график векторов и пространства, образованного векторами. Даже если размер исходной матрицы равен MxN, обычно ожидается, что матрица будет иметь 2 или 3 столбца (R2 или R3).

Проблема
Во втором проходе, когда система помечена как линейно зависимая, система накладывает графику в тех же окнах, желаемым выходом будет сделать первый проход, и если система LD покажет начальный график, а затем начнет строить график в В отдельных окнах сформированы графики перестановочной матрицы.

NewMatrix выполняет итерации по исходной матрице «значений» и продолжает формировать перестановки строк / вектора, чтобы снова проверить критерий (он делает, но в том же окне). Обратите внимание, что начальная матрица «значение» определяется пользователем и должна быть уже введена в начальной точке показанного кода.

Код

RangS=rank(R)  //LI or ld criterion
[r, c] = size(value)
       if (rank(value))==r
            set(handles.text3,'String',('System>LI'));
            figure(3);
            hold on;
            z = zeros(size(value, 1), 1);
            quiver3(z, z, z, value(:, 1), value(:, 2), z, 0);
            grid on
            view(45, 45);
            s=sum(value);
            quiver3(0,0,0,s(1),s(2),0,'r');
            points=[X' Y'];


       else
           set(handles.text3,'String',('System>LD'));
           figure(3); //this graph should be done apart
           hold on;
           z = zeros(size(value, 1), 1);
           quiver3(z, z, z, value(:, 1), value(:, 2), z, 0);
           grid on
           view(45, 45);
           points=[X' Y'];
           for jj = 1:size(value,1)-1 //here starts permuting vectors>credits to MikeLimaOscar

                     for kk = jj+1:size(value,1)
                           NewMatrix= value([jj,kk],:)
                                F=rref(NewMatrix);
                                RangS=rank(R)  //the same criterion applied to the permutated matrices
                                [r, c] = size(NewMatrix)
                                if (rank(NewMatrix))==r
                                    set(handles.text3,'String',('Subsystem :LI'));
                                        figure(3); there  should be one graph for every permutated matrix
                                        hold on;
                                        z = zeros(size(NewMatrix, 1), 1);
                                        quiver3(z, z, z, NewMatrix(:, 1), NewMatrix(:, 2), z, 0);
                                        grid on
                                        view(45, 45);
                                        s=sum(NewMatrix);
                                        quiver3(0,0,0,s(1),s(2),0,'r');
                                        points=[X' Y'];


                               else
                                   set(handles.text3,'String',('Subsystem:LD'));
                                   figure(3);
                                   hold on;
                                   z = zeros(size(NewMatrix, 1), 1);
                                   quiver3(z, z, z, NewMatrix(:, 1), NewMatrix(:, 2), z, 0);
                                   grid on
                                   view(45, 45);
                                   points=[X' Y'];

                                end

                    end


end
       end     
Автор: riccs_0x Источник Размещён: 12.06.2019 01:05

Ответы (1)


1 плюс

1419 Репутация автора

  • Вы строите все графики в одном окне [ figure(3)].
  • Предоставление различных аргументов фигуре может решить проблему.

Определенный индекс для каждого окна

Permutation(jj) |Permutation 1   | Permutation 2   |  Permutation 3
____________________________________________________________________
                |[1]submatrix 1  | [4]submatrix 1  |[6]submatrix 1
submatrix(kk)   |[2]submatrix 2  | [5]submatrix 2  |[7]submatrix 2
                |[3]submatrix 3  |                 |[8]submatrix 3
                |                |                 |[9]submatrix 4
____________________________________________________________________
Last index      |     3          |       5         |     9       
____________________________________________________________________

Индексы в скобках будут использоваться в качестве аргумента

  • Permutation 1, просто используйте индексы подматрицы kk,index_1 = kk
  • Permutation 2, использовать индексы подматриц kkи Last indexподматрицы из перестановки1
index_2 = Last index(Permutation 1) + kk
  • Permutation 3, использовать индексы подматриц kkи Last indexподматрицы из перестановки2
index_3 = Last index(Permutation 2) + kk

Обобщение , часть из первой перестановки, индекс в n-й перестановке равен

index_n = Last index(Permutation n-1)) + kk

Для заданного вопроса total of submatricesдля заданного Permutation jjможно вычислить как

total(Permutation jj) = numel(jj+1:size(value,1))

Пожалуйста, прочитайте комментарии

% Check if the entire matrix is linear independent or not
if LI

    % Linear independent 
    % Plot the graph in window #1
    figure(1)

else 

    % Linear dependent 
    % Plot the graph in window #1
    figure(1) 

    % Starting index for next Permutation
    Last_index = 0;

    % Figure() argument initialization
    index = 0;

    % Permutation begins here
    for jj =  1:size(value,1)-1

        % submatrices for a given permutation jj begins here
        for kk = jj+1:size(value,1)

            % Check if submatrix is linear independent or not 
            if submatrix(kk) from permutation (jj) is LI

                % Linear independent 
                % Plot the graph in window #index
                index = Last_index + kk
                figure(index)

            else

                % Linear dependent 
                % Plot the graph in window #index
                index = Last_index + kk
                figure(index)

            end
            % End of checking if submatrix is linear independent or not 
        end

        % Update last index for the next permutation starting index
        Last_index = Last_index + numel(jj+1:size(value,1))

        % End of submatrices for a given permutation jj 

    end 
    % End of Permutation 
end
% End of checking if the entire matrix is linear independent or not
Автор: Adam Размещён: 12.06.2019 09:39
Вопросы из категории :
32x32