Как можно эффективно заметить элементы матрицы? - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть кривая, полученная из собственных значений матрицы. Я хочу закрыть эту кривую для другой кривой, которая является базовой. Для этого мне нужно смести ненулевые элементы этой матрицы. Поскольку матрица симметрична, я превращаю ее в верхнюю треугольную матрицу. Тогда я подумал, что ненулевые элементы этой матрицы должны быть найдены, поэтому для их числа следует использовать «For-Loop». Для простоты предположим, что от 90% до 1,1% в первую очередь значения любых ненулевых элементов хороши для развертки. Например, рассмотрим эту (2,2) матрицу: `

A=[1 2;2 0],B=zeros(size(A)),
A=triu(A),
[row,col]=find(A~=0);
low_limit=0.9;step_limit=0.1;high_limit=1.1;
i=1;
for a=low_limit*A(row(i),col(i)):step_limit*A(row(i),col(i)):high_limit*A(row(i),col(i))
    B(row(i),col(i))=a;B(col(i),row(i))=a;
    i=i+1;% i increases for reaching next element
    for b=low_limit*A(row(i),col(i)):step_limit*A(row(i),col(i)):high_limit*A(row(i),col(i))
        B(row(i),col(i))=b;B(col(i),row(i))=b;
        %after get eigenvalue,compare with the data of reference curve for minimum difference
    end
    i=i-1;% i decreases for reaching previous element
end

Как мы можем сделать это для матрицы с любым измерением? Есть ли способ избежать записи последовательных циклов? Я имею в виду, если есть, например, 40 ненулевых элементов, будет 40 "Для циклов" !!! Если эта процедура недостаточно хороша, есть ли более эффективный способ? Действительно, существует большое беспокойство по поводу количества циклов «For», которое снижает скорость, несмотря на распараллеливание.

...