Eliminar cuatro bucles anidados en Matlab

Tengo los siguientes cuatro bucles anidados en Matlab:

timesteps = 5;
inputsize = 10;
additionalinputsize = 3;
outputsize = 7;

input = randn(timesteps, inputsize);
additionalinput = randn(timesteps, additionalinputsize);
factor = randn(inputsize, additionalinputsize, outputsize);

output = zeros(timesteps,outputsize);
for t=1:timesteps
    for i=1:inputsize
        for o=1:outputsize
            for a=1:additionalinputsize
                output(t,o) = output(t,o) + factor(i,a,o) * input(t,i) * additionalinput(t,a);
            end
        end
    end
end

Hay tres vectores: un vector de entrada, un vector de entrada adicional y un vector de salida. Todos están conectados por factores. Cada vector tiene valores en pasos de tiempo dados. Necesito la suma de todas las entradas combinadas, entradas adicionales y factores en cada paso de tiempo dado. Más tarde, necesito calcular de la salida a la entrada:

result2 = zeros(timesteps,inputsize);
for t=1:timesteps
    for i=1:inputsize
        for o=1:outputsize
            for a=1:additionalinputsize
                result2(t,i) = result2(t,i) + factor(i,a,o) * output(t,o) * additionalinput(t,a);
            end
        end
    end
end

En un tercer caso, necesito el producto de los tres vectores sumados en cada paso de tiempo:

product = zeros(inputsize,additionalinputsize,outputsize)
for t=1:timesteps
    for i=1:inputsize
        for o=1:outputsize
            for a=1:additionalinputsize
                product(i,a,o) = product(i,a,o) + input(t,i) * output(t,o) * additionalinput(,t,a);
            end
        end
    end
end

Los dos fragmentos de código funcionan pero son increíblemente lentos. ¿Cómo puedo eliminar los bucles anidados?

Editar: valores agregados y cambios menores para que los fragmentos sean ejecutables

Edit2: se agregó otro caso de uso

Respuestas a la pregunta(1)

Su respuesta a la pregunta