Matlab - ERROR Subscript

 
Vista:

ERROR Subscript

Publicado por elian (1 intervención) el 16/05/2005 15:16:08
Quería ver si alguien me puede ayudar con este error:

"Subscript indices must either be real positive integers or logicals"

Soy principiante en esto del matlab y no encuentro cual es el motivo de que salga este error despues del bucle que sigue a continuacion:

y=ntramos-2;
for i=2:y
tresecus=[-((cosh(beta*A(i)))-(cos(beta*A(i))))/(2*EI*beta*beta) -((sinh(beta*A(i)))-(sin(beta*A(i))))/(2*EI*beta*beta*beta) 0 0 0;
-beta*(sinh(beta*A(i)))+(sin(beta*A(i)))/(2*EI*beta*beta) -beta*(cosh(beta*A(i)))-(cos(beta*A(i)))/(2*EI*beta*beta*beta) -1 0 0;
-((beta*beta)*(cosh(beta*A(i)))+(cos(beta*A(i))))/(2*EI*beta*beta) -((beta*beta)*(sinh(beta*A(i)))+(sin(beta*A(i))))/(2*EI*beta*beta*beta) 0 (1/EI) 0];
tresecus
C(3i-2:3i-2+2,3*(i-1):3*(i-1)+4)=tresecus
end

El error sale concretamente por la linea :

C(3i-2:3i-2+2,3*(i-1):3*(i-1)+4)=tresecus

que nadie se asuste al ver "tresecus" es simplemente una matriz 3x5.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Error "Subscript indices must either be real positive integers or logicals" en un bucle For

Publicado por Alejandro (145 intervenciones) el 09/10/2023 17:30:22
¡Hola Elian! El error "Subscript indices must either be real positive integers or logicals" generalmente ocurre cuando estás intentando acceder a elementos de una matriz utilizando índices no enteros o índices que no son válidos para esa matriz.

En tu caso, parece que el problema puede estar relacionado con cómo estás indexando la matriz `C` en la línea problemática. Aquí hay una corrección potencial:

1
2
3
4
5
6
7
8
9
y = ntramos - 2;
for i = 2:y
    tresecus = [-((cosh(beta * A(i))) - (cos(beta * A(i)))) / (2 * EI * beta * beta) -((sinh(beta * A(i))) - (sin(beta * A(i)))) / (2 * EI * beta * beta * beta) 0 0 0;
                -beta * (sinh(beta * A(i))) + (sin(beta * A(i))) / (2 * EI * beta * beta) -beta * (cosh(beta * A(i))) - (cos(beta * A(i))) / (2 * EI * beta * beta * beta) -1 0 0;
                -((beta * beta) * (cosh(beta * A(i))) + (cos(beta * A(i)))) / (2 * EI * beta * beta) -((beta * beta) * (sinh(beta * A(i))) + (sin(beta * A(i)))) / (2 * EI * beta * beta * beta) 0 (1 / EI) 0];
 
    % Corrige la línea problemática
    C(3 * i - 2:3 * i, 3 * (i - 1) + 1:3 * (i - 1) + 5) = tresecus;
end

En la línea `C(3 * i - 2:3 * i, 3 * (i - 1) + 1:3 * (i - 1) + 5)`, he cambiado la segunda parte del índice (`3 * (i - 1) + 4`) a `3 * (i - 1) + 5`. Asegúrate de que los índices estén dentro de los límites de `C` y que todos los términos en los índices sean enteros. Si `C` es una matriz 3x5, los índices utilizados deberían ser válidos.

Si el error persiste, verifica que `ntramos` e `i` tienen valores válidos y que `C` tiene las dimensiones correctas. ¡Espero que esto te ayude a solucionar el problema!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar