Operación unaria usando bucles for en Matlab

Estoy tratando de hacer algo de aritmética básica dentro de un for bucle en MatLab.

Básicamente, quiero copiar y operar en cada elemento uno por uno. Primero quiero restar 3.6: testDataMean de cada elemento, elevar cada elemento a la potencia de 2 luego sumar cada variable. Finalmente dividimos la variable s by 5 (sizeOfTestData)

Esto debería calcular aproximadamente ~1.05.

El testData variable es un vector de 1x5 que contiene los números 3, 4, 2, 5, 4

   s = 0;

for k = 1:sizeTestData
    p = testData(k);
    q = p - testDataMean;
    r = q^2;
    s = s + r;
    s/5;

end

Este bucle en realidad arroja un error en la última línea s = s + r. Soy consciente de que puedo usar el sum funcionan en la mayoría de las circunstancias cuando se opera en vectores del mismo tamaño, pero en el contexto de un bucle for no estoy seguro.

preguntado el 08 de febrero de 14 a las 12:02

¿Cuál es el error? "Dimensiones de la matriz deben estar de acuerdo"? -

Lo siento, dice "Función indefinida o variable 's'" -

Pues ahí tienes tu respuesta. Poner s = 0 frente al bucle. -

1 Respuestas

Tenga en cuenta que sum(s) / numel(s) por definición es lo mismo que mean(s).

El enfoque libre de bucles:

testData = [3, 4, 2, 5, 4]
q = testData - mean(testData);
s = mean(q.^2);
s = 1.0400

El one-liner:

s = mean((testData-mean(testData)).^2)
s = 1.0400

Y su enfoque inicial:

(Después de la corrección de errores)

testData = [3, 4, 2, 5, 4]

s = 0;
sizeTestData = length(testData);
testDataMean = mean(testData);

for k = 1:sizeTestData
   p = testData(k);
   q = p - testDataMean;
   r = q^2;
   s = s + r;  
end
s = s / numel(s);
s = 1.0400

Respondido 08 Feb 14, 13:02

Gracias por la respuesta. Lo siento, me perdí un punto vital al final que era dividir la variable resumida s by 5. He editado mi publicación original para adaptarla. - user1574598

Gracias, probaré tu solución, pero sí, eso es lo que quería. Solo estoy practicando el concepto de RMSE (error cuadrático medio). - user1574598

@user1574598: Programar Matlab de manera eficiente tiene mucho que ver con evitar bucles siempre que sea posible. Por lo tanto, la frase de Daniel no es solo una sino al Forma de Matlab para calcular el RMSE. Excepto que es posible hacerlo aún más corto: s = var(testData, 1) ;-)- A. Donda

Gracias, es útil saber cómo evitar bucles :-) Seguiré practicando y espero mejorar. ¡Es increíble cómo se pueden reducir 6-8 líneas de código a una! - user1574598

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.