Moim celem jest wykreślenie następujących elementów:
x(n)= delta(n)+delta(n-1)+delta(n-2)+….+delta(n-10)+delta(n-11)
Napisałem ten kod:
n = -15:15
e(m) = dirc(n(m));
k = 1
for m = 1 : length(n)
while k < 12
e_1(m) = dirc(n(m)-k);
k = k + 1
end
e(m) = e(m) + e_1(m)
end
subplot(4,4,5);
stem(n,e,"m","markersize",3,"linewidth",1)
xlabel("n")
ylabel("delta[n]")
title ("(e)")
i napisałem funkcję dirc w następujący sposób:
function output = dirc(input)
output = 0;
if input == 0
output = 1;
end
end
Błąd jest
Indeks przekracza wymiary matrycy
Jak widać, jest to funkcja kończąca, chciałbym być w stanie w końcu narysować coś takiego:
x(n)= delta(n)+delta(n-1)+delta(n-2)+….
Odpowiedzi:
2 dla odpowiedzi № 1Nie pokazujesz nam co m
jest w drugim wierszu, to prawdopodobne źródło twoich problemów. Ponadto musisz wstępnie przydzielić wektor e
jeśli chcesz zwiększyć jego wartości w pętli, może to również spowodować błędy poza zakresem.
Jeśli chodzi o resztę kodu, możesz go zastąpić dirc(input)
po prostu input==0
, wynikowe wartości logiczne będą zgodne z liczbowymi 0
i 1
(w przypadku input
jest skalarne, co wydaje się być przypadkiem dla ciebie).
W rzeczywistości to, co próbujesz osiągnąć, to funkcja
kmax = 11;
xfun = @(n) ismember(n,0:kmax); %// anonymous function
x(n) = xfun(n); %// evaluate at any specific value n
lub jeśli chcesz obliczyć x(n)
dla wielu wartości n
od razu:
kmax = 11;
xfun = @(n) sum(bsxfun(@eq,n(:),0:kmax),2);%// anonymous function
xvec = xfun(-15:15); %// evaluate at every n simultaneously