векторизация для цикла, который делает сумму - PullRequest
0 голосов
/ 09 июня 2011

Привет всем

Как я могу векторизовать это для цикла?

t_rebuilt=linspace(0,1,length(inner_freq));

for ii=1:1:length(inner_freq)-1;ii=ii+1; 

    aa_sig_rebuilt=inner_freq(ii,2)*cos(2*pi*t_rebuilt*inner_freq(ii,1)+inner_freq(ii,3));
    aa_sig_combined=aa_sig_combined+aa_sig_rebuilt;

end;

Я попытался заменить его на строку ниже, чтобы увидеть, сработало ли это, но я просто получил прямую линию

aa_sig_rebuilt=inner_freq(ii,2).*cos(2*pi*t_rebuilt*inner_freq(ii,1)+inner_freq(ii,3));

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Похоже, что t_rebuilt представляет собой вектор временных точек, в котором вы хотите оценить набор тригонометрических функций с параметрами, определенными в строках матрицы M-by-3 inner_freq. Затем вы хотите добавить все эти результаты в один объединенный сигнал. Вы можете сделать это без цикла for следующим образом:

temp = 2*pi*inner_freq(:,1)*t_rebuilt;  %# This matrix multiplication will
                                        %#   result in an M-by-N matrix
temp = temp+repmat(inner_freq(:,3),1,numel(t_rebuilt));  %# Replicate and add
                                                         %#   column 3
aa_sig_combined = inner_freq(:,2).'*cos(temp);  %'# Gives you your 1-by-N
                                                 %#   combined signal

Затем вы можете построить результат следующим образом:

plot(t_rebuilt,aa_sig_combined);
0 голосов
/ 09 июня 2011

Попробуйте это

sum(aa_sig_rebuilt=inner_freq(:,2).*cos(2*pi*t_rebuilt*inner_freq(:,1)+inner_freq(:,3)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...