2017-09-10 15 views
1

次のMATLABコードから "for"ループを削除しようとしています。このケースでは必要ではないことは分かっていますが、このケースを理解すれば、将来は本当に必要なより複雑なケースに同じ概念を適用できます。ループを削除する方法。 (ベクトル化)

clear all; close all; clc; 

u = @(n) (n>=0)*1.0; % Step Function 
n = -5:25; 
x_a = zeros(size(n)); 

for m = 0:10 % The loop I want to remove 
    x_a = x_a + (((-1)^m)*u(-n+(2*m)))-(((-0.5)^(m+1))*(u(n-(2*m)))); 
end 

figure(1); 
stem(n,x_a); 
grid; 
xlabel('Sample Number'); 
ylabel('Amplitude x_a[n]'); 

ご協力いただきありがとうございます。

答えて

1

Reshapemと3Dマトリクス。同じ数式を適用し、3Dスライスの各mの結果を取得します。その後、第3の次元にわたってsum

m = reshape(0:10,1,1,[]); 
x_a = sum((((-1).^m).*u(-n+(2.*m)))-(((-0.5).^(m+1)).*(u(n-(2.*m)))),3); 
+0

ありがとう! 1Dの配列の代わりに3D行列を使用する必要がある理由を説明できますか? –

+0

@JonAnderDíezベクトル化の一般的な方法はありません。あなたは、望みの結果を得るために、さまざまな機能が適用できるデータを整理する方法を考えるだけです。間違いなく1Dアレイを使用できる可能性があります。私はちょうど三次元マトリックスの可能性を考えて –

関連する問題