Index in position 1 exceeds array bounds (must not exceed 1)

51 visualizaciones (últimos 30 días)
Hello, I'm trying to run this code, but i get an error message :Index in position 1 exceeds array bounds (must not exceed 1). the error message comes from "psR60_1=PnR60_1(sizeR60,1); %peso seco". What does "Index in position 1 exceeds array bounds (must not exceed 1)" mean? and how to solve this?
Here is the code :
%Modelo de secado para zanahorias cortadas en rodajas con un ancho de 0.5 cm
%Tres temperaturas de secado fueron usadas (60, 65 y 70°C) y cada experimento se realizó por triplicado. Los promedios de humedad de los triplicados fueron usados para calcular y modelar la difusividad, así como para modelar la pérdida de humedad con modelos empíricos de capa delgada.
%Para la rodajas, 3 rodajas (2.1 cm diámetro) fueron puestas en una bandeja de aluminio
%Área de secado de las rodajas (cm^2)
AR=4*(pi*((2.1/2)^2));
L=0.5; %longitud característica (cm)
%Peso (g) de la bandeja de aluminio para las rodajas
%Definir el vector de tiempo (min) para el experimento
tR60=[0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240];
tR65=[0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240];
tR70=[0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240];
%Definir los vectores de peso (g) para el experimento
pR60_1=[44 41 37 33 30 27 24 21 19 18 16 14 13 10 10 8 8 6 6 5 5 5 5 5 5];
pR60_2=[44 41 37 33 30 27 24 21 19 18 16 14 13 10 10 8 8 6 6 5 5 5 5 5 5];
pR60_3=[44 41 37 33 30 27 24 21 19 18 16 14 13 10 10 8 8 6 6 5 5 5 5 5 5];
pR65_1=[44 41 37 34 31 27 25 23 18 16 15 12 10 10 10 10 9 8 8 6 6 5 5 5 5];
pR65_2=[44 41 37 34 31 27 25 23 17 16 15 11 10 10 10 10 9 8 8 6 6 5 5 5 5];
pR65_3=[44 41 37 34 31 26 24 23 18 16 15 12 10 10 10 10 9 9 8 7 5 5 5 5 5];
pR70_1=[44 42 38 35 31 27 23 21 19 16 14 12 11 10 10 7 7 7 7 7 6 6 6 6 6];
pR70_2=[44 42 39 35 30 27 24 20 19 17 14 13 12 11 11 8 8 8 8 8 6 6 6 6 6];
pR70_3=[44 41 38 35 31 28 23 21 19 16 15 13 12 9 9 7 7 7 7 7 6 6 6 6 6];
%Calcular el peso neto del producto (g) para el experimento
PnR60_1=pR60_1;
PnR60_2=pR60_2;
PnR60_3=pR60_3;
PnR65_1=pR65_1;
PnR65_2=pR65_2;
PnR65_3=pR65_3;
PnR70_1=pR70_1;
PnR70_2=pR70_2;
PnR70_3=pR70_3;
%Calcular la humedad (g) para el experimento. Asumiendo que el peso seco de la muestra es el peso neto.
sizeR60=length(tR60); %tamaño del peso neto
psR60_1=PnR60_1(sizeR60,1); %peso seco
phR60_1=PnR60_1-psR60_1; %peso húmedo
psR60_2=PnR60_2(sizeR60,1); %peso seco
phR60_2=PnR60_2-psR60_2; %peso húmedo
psR60_3=PnR60_3(sizeR60,1); %peso seco
phR60_3=PnR60_3-psR60_3; %peso húmedo
sizeR65=length(tR65); %tamaño del peso neto
psR65_1=PnR65_1(sizeR65,1); %peso seco
phR65_1=PnR65_1-psR65_1; %peso húmedo
psR65_2=PnR65_2(sizeR65,1); %peso seco
phR65_2=PnR65_2-psR65_2; %peso húmedo
psR65_3=PnR65_3(sizeR65,1); %peso seco
phR65_3=PnR65_3-psR65_3; %peso húmedo
sizeR70=length(tR70); %tamaño del peso neto
psR70_1=PnR70_1(sizeR70,1); %peso seco
phR70_1=PnR70_1-psR70_1; %peso húmedo
psR70_2=PnR70_2(sizeR70,1); %peso seco
phR70_2=PnR70_2-psR70_2; %peso húmedo
psR70_3=PnR70_3(sizeR70,1); %peso seco
phR70_3=PnR70_3-psR70_3; %peso húmedo
%Calcular humedad en base seca (g) para el experimento
hbsR60_1=phR60_1./psR60_1;
hbsR60_2=phR60_2./psR60_2;
hbsR60_3=phR60_3./psR60_3;
hbsR65_1=phR65_1./psR65_1;
hbsR65_2=phR65_2./psR65_2;
hbsR65_3=phR65_3./psR65_3;
hbsR70_1=phR70_1./psR70_1;
hbsR70_2=phR70_2./psR70_2;
hbsR70_3=phR70_3./psR70_3;
%Gráfica de humedad, promedio
hbs_prom_R60=(hbsR60_1+ hbsR60_2+ hbsR60_3)./3;
hbs_prom_R65=(hbsR65_1+ hbsR65_2+ hbsR65_3)./3;
hbs_prom_R70=(hbsR70_1+ hbsR70_2+ hbsR70_3)./3;
figure (1)
plot (tR60, hbs_prom_R60, *r)
hold on
plot (tR65, hbs_prom_R65, *b)
plot (tR70, hbs_prom_R70, *g)
title(Contenido de humedad en base seca vs. tiempo)
xlabel(tiempo (min))
ylabel(Humedad b.s. (gH2O/gS.S))
legend(60°C,65°C, 70°C)
  1 comentario
Alejandro Peñuelas
Alejandro Peñuelas el 30 de Mayo de 2020
You can also help us to help you: can you edit the question and format the code with the 'code' option of this page.
Press that button and paste your code inside the box that will appear in the editor. This helps with the format of the code. By doing so, when we can copy and paste the code correctly without format problems. Thank you.

Iniciar sesión para comentar.

Respuesta aceptada

Alejandro Peñuelas
Alejandro Peñuelas el 30 de Mayo de 2020
Using the debuging tool of matlab, the problem occurs in the following line:
psR60_1=PnR60_1(sizeR60,1); %peso seco
The reason is that your variable 'PnR60_1' only contains 1 dimension and you don't require more than 1 argument to index inside this variable. Even if you solve the problem for 'PnR60_1', the problem will occur with other variables such as: 'PnR60_2' and 'PnR60_3'. I'm not sure what are you trying to do with this line of code but if you explain me, I can help you better.
Español: (porque veo tus comentarios del código en español)
Probé debugueando el código que proporcionaste, el problema ocurre en la línea siguiente:
psR60_1=PnR60_1(sizeR60,1); %peso seco
El problema es que la variable 'PnR60_1', a la que previamente asignaste el valor de 'pR60_1', sólo tiene una dimensión (es un vector) y estás tratando de ingresar en la variable utilizando dos índices como si tuviera dos dimensiones: la primera sería sizeR60 (que tiene un valor de 25 en tu código) y luego el 1, es decir, estás tatando de acceder en la variable en el renglón 25 en la columna 1, como si fuera una matriz, y tu variable en realidad tiene sólo un renglón y 25 columnas.
No estoy seguro de qué intentas hacer con este código pero si me explicas mejor puede brindarte más ayuda. Saludos.
  3 comentarios
Alejandro Peñuelas
Alejandro Peñuelas el 30 de Mayo de 2020
Ese mensaje significa que en cada iteración del ciclo for:
for i=1:(sizeR70-1)
deltatR70(i,1)=tR70(i+1)-tR60(i);
deltaXR70_1(i,1)=hbsR70_1(i+1)-hbsR70_1(i);
deltaXR70_2(i,1)=hbsR70_2(i+1)-hbsR70_2(i);
deltaXR70_3(i,1)=hbsR70_3(i+1)-hbsR70_3(i);
%Puntos medios de humedad en base seca
med_hbsR70_1(i,1)=hbsR70_1(i)+((hbsR70_1(i+1)-hbsR70_1(i))/2);
med_hbsR70_2(i,1)=hbsR70_2(i)+((hbsR70_2(i+1)-hbsR70_2(i))/2);
med_hbsR70_3(i,1)=hbsR70_3(i)+((hbsR70_3(i+1)-hbsR70_3(i))/2);
end
La variable 'deltatR70' se hace cada vez más grande. No es un error, y el programa puede funcionar así, pero no es recomendable porque pones en dificultades a matlab para almacenar esa variable en memora porque, como va creciendo en cada iteración, matlab internamente tiene que buscar un nuevo sitio para almacenarla. Esto hace que tu programa vaya más lento y puede producir errores en algunos casos.
Lo recomendable en este caso es que utilizes la función 'zeros()' para crear la variable 'deltatR70' con el tamaño que deseas que tenga al final del programa, antes de meterla al ciclo for. Por ejemplo, si ya sabes que 'deltatR70' tendrá 50 renglones y 1 columna, debes definir la variable antes del for así:
% Pre-allocate the varible
deltatR70 = zeros(50,1);
% Execute the opperations inside the for loop
for i=1:(sizeR70-1)
deltatR70(i,1)=tR70(i+1)-tR60(i);
deltaXR70_1(i,1)=hbsR70_1(i+1)-hbsR70_1(i);
deltaXR70_2(i,1)=hbsR70_2(i+1)-hbsR70_2(i);
deltaXR70_3(i,1)=hbsR70_3(i+1)-hbsR70_3(i);
%Puntos medios de humedad en base seca
med_hbsR70_1(i,1)=hbsR70_1(i)+((hbsR70_1(i+1)-hbsR70_1(i))/2);
med_hbsR70_2(i,1)=hbsR70_2(i)+((hbsR70_2(i+1)-hbsR70_2(i))/2);
med_hbsR70_3(i,1)=hbsR70_3(i)+((hbsR70_3(i+1)-hbsR70_3(i))/2);
end
Esto se llama 'pre-allocate' o prealmacenamiento si gustas y ayuda a gestionar la memoria en tiempo de ejecución.
Alejandro Peñuelas
Alejandro Peñuelas el 30 de Mayo de 2020
Entiendo que el problema además es el inglés, porque parte de los errores que has mencionado están realmente claros en el idioma. Si traduces con google translate los mensajes de error te darán una buena pista del problema que se presenta.
También te recomiento poner atención a la barra de la derecha, al lado de la barra de desplazamiento, en la ventana del editor, pues muestra (los elementos subrayados en el código) que pueden producir errores o problemas.
Si pones el cursor sobre la línea subrayada, o sobre una de las barras naranjas de la derecha, matlab te muestra un mensaje de posible solución del problema, por ejemplo:
La línea amarilla muestra el mismo mensaje que mencionas. Si presionas en detalles, explica de froma más clara el problema:
Y debajo de Suggested Action una posible solución al problema. En este caso, el uso de 'zeros' como te mencioné.
Espero que te ayude, y saludos.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

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

Community Treasure Hunt

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

Start Hunting!

Translated by