## Speed improvement [R for BE/BA]

» 30%...It ain't much but it's honest work. It is very good boost. I donn't know how matrix multipication works in R, but some improovments can be done if make function A = B'*C*B or A += B'*C*B. At each step of this function there are many intermediate products that can be avoided with direct computation. (Or make it in C)

Example incremantal function:

 """ A' * B * A -> +θ (cache) A' * B * C -> +β """ function mulθβinc!(θ, β, A::AbstractMatrix, B::AbstractMatrix, C::Vector)     q = size(B, 1)     p = size(A, 2)     c = zeros(eltype(B), q)     for i = 1:p         c .= 0         for n = 1:q             for m = 1:q                 @inbounds c[n] += B[m, n] * A[m, i]             end             @inbounds β[i] += c[n] * C[n]         end         for n = 1:p             for m = 1:q                 @inbounds θ[i, n] += A[m, n] * c[m]             end         end     end     θ, β end function mulsimple!(θ, β, A::AbstractMatrix, B::AbstractMatrix, C::Vector)     AB = A'*B     θ .+ AB*A, β .+ AB*C end θ = zeros(4, 4) β = zeros(4) A = [1 3 4 3; 2 3 2 3; 3 4 5 6; 3 4 5 6] B = [1 3 4 3; 2 3 2 3; 3 4 5 6; 3 4 5 6] C = [1, 3, 4 ,3] 

julia> @time mulsimple!(θ, β, A, B, C);
0.000007 seconds (10 allocations: 1.172 KiB)

julia> @time mulθβinc!(θ, β, A, B, C);
0.000004 seconds (2 allocations: 144 bytes)

eightfold memory savings Ing. Helmut Schütz 