Il mio obiettivo è riuscire a rappresentare graficamente quanto segue:
x(n)= delta(n)+delta(n-1)+delta(n-2)+….+delta(n-10)+delta(n-11)
Ho scritto questo codice:
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)")
e ho scritto la funzione dirc come segue:
function output = dirc(input)
output = 0;
if input == 0
output = 1;
end
end
L'errore è
L'indice supera le dimensioni della matrice
Come puoi vedere, questa è una funzione di terminazione, mi piacerebbe poter rappresentare qualcosa di simile alla fine:
x(n)= delta(n)+delta(n-1)+delta(n-2)+….
risposte:
2 per risposta № 1Non ci stai mostrando cosa m
è nella seconda riga, che è una probabile fonte dei tuoi problemi. Inoltre, dovrai pre-allocare il vettore e
se vuoi incrementare i suoi valori in un ciclo, questo può anche darti errori fuori campo.
Per quanto riguarda il resto del codice, puoi sostituirlo dirc(input)
con semplicemente input==0
, i valori logici risultanti saranno compatibili con numerici 0
e 1
(nel caso in cui il input
è scalare, che sembra essere il caso per te).
È un dato di fatto, ciò che stai cercando di ottenere è la funzione
kmax = 11;
xfun = @(n) ismember(n,0:kmax); %// anonymous function
x(n) = xfun(n); %// evaluate at any specific value n
o se vuoi calcolare x(n)
per più valori di n
subito:
kmax = 11;
xfun = @(n) sum(bsxfun(@eq,n(:),0:kmax),2);%// anonymous function
xvec = xfun(-15:15); %// evaluate at every n simultaneously