What caused this error message?

4 visualizaciones (últimos 30 días)
대선
대선 el 24 de Abr. de 2024
Comentada: Raj el 25 de Abr. de 2024
---------------------------------------------------------------------------------------------------------------
% Define the input signal x[n]
n = 0:49;
x = (-1).^n .* (n >= 0);
% Define the length of the input signal
N = length(x);
% Initialize the output signal y[n]
y = zeros(1, N);
% Define the initial conditions
y_minus_1 = 4;
y_minus_2 = -2;
% Calculate the output y[n] using the difference equation
for n = 1:50
if n == 1
y(n) = x(n) + x(n - 1) - (1/4) * y_minus_1 + (1/8) * y_minus_2;
elseif n == 2
y(n) = x(n) + x(n - 1) - (1/4) * y(n - 1) + (1/8) * y_minus_1;
else
y(n) = x(n) + x(n - 1) - (1/4) * y(n - 1) + (1/8) * y(n - 2);
end
end
Array indices must be positive integers or logical values.
% Plot the output signal y[n]
stem(0:N-1, y);
grid on;
xlabel('n');
ylabel('y[n]');
title('Output of the System');
--------------------------------------------------------------------------------------------------------------------
Array index should be positive integer or logical value.
Error: HW2_2_59_c (18th line)
y(n) = x(n) + x(n - 1) - (1/4) * y_minus_1 + (1/8) * y_minus_2;

Respuestas (1)

Raj
Raj el 24 de Abr. de 2024
In MATLAB, array indices start from 1, so attempting to access x(0) or y(0) would result in this error.
y(n) = x(n) + x(n - 1) - (1/4) * y_minus_1 + (1/8) * y_minus_2;
Here you are trying to access x(n-1) which is essentially x(0) when n=1.
This will throw the error stating array index should be positive or logical value. Make appropiate changes in your code to reolve this.
I hope this helps!
  3 comentarios
대선
대선 el 24 de Abr. de 2024
Thank you!
But now I have another eror message..
What does it mean that index exceeds 1..??
Index exceeds the number of array elements. Index should not exceed 1.
Error: HW2_2_59_c (in line 14)
y(n) = x(n) + x(n - 1) - (1/4) * y(n - 1) + (1/8) * y_minus_1;
Raj
Raj el 25 de Abr. de 2024
Hi @대선, when are you facing this error?
As rightly mentioned by @John D'Errico, you can pre-compute x(0)=1 and calcualte y(1).
y(1)=x(1)+x(0)-(1/4)* y_minus_1 + (1/8) * y_minus_2;
You can later have the limit of for loop from n=2:50
for n = 2:50
if n == 2
y(n) = x(n) + x(n - 1) - (1/4) * y(n - 1) + (1/8) * y_minus_1;
else
y(n) = x(n) + x(n - 1) - (1/4) * y(n - 1) + (1/8) * y(n - 2);
end
end
Check if this is what you intend on doing.

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos


Versión

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by