What caused this error message?

5 vues (au cours des 30 derniers jours)
대선
대선 le 24 Avr 2024
Commenté : Raj le 25 Avr 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;

Réponses (1)

Raj
Raj le 24 Avr 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 commentaires
대선
대선 le 24 Avr 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 le 25 Avr 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.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by