Общая идея
Я работал над проектом линейной алгебры, в котором идея состоит в том, чтобы проверить, является ли данный набор векторов (матрица) линейно зависимым / независимым .Для этого следующая программа получает матрицу с именем 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