# MATLAB: How to parallelise sections of the for loop

cell arraysmatrix arrayparallel computing

Hello,
I am trying to think of a way to make my for loop quicker. It has occurred to me that I could parallelise the commands in the loops and then bring them back together at the end. Is there such a thing in matlab or am I overcomplicating everything?
My MWE is:
``for kx = 1:length(w)     for ky = 1:length(w) %These could be linearised        for kkx = 1:length(w)            for kky = 1:length(w)                for freq_sign_ansatz = 1:2                     for freq_sign_test = 1:2                        [pqf, v1qf, v2qf, pw1f, pw2f, v1w1f, v1w2f, v2w1f, v2w2f] = Convection_basis(kx,ky,kkx,kky,w, freq_ansatz, freq_test);                        pq_freq(freq_sign_ansatz, freq_sign_test) = pqf(kx,ky,kkx,kky,freq_ansatz, freq_test);                        v1w1_freq(freq_sign_ansatz, freq_sign_test) = v1w1f(kx,ky,kkx,kky,freq_ansatz, freq_test);                        v1w2_freq(freq_sign_ansatz, freq_sign_test) = v1w2f(kx,ky,kkx,kky,freq_ansatz, freq_test);                        v2w1_freq(freq_sign_ansatz, freq_sign_test) = v2w1f(kx,ky,kkx,kky,freq_ansatz, freq_test);                        v2w2_freq(freq_sign_ansatz, freq_sign_test) = v2w2f(kx,ky,kkx,kky,freq_ansatz, freq_test);                        pw1_freq(freq_sign_ansatz, freq_sign_test) = pw1f(kx,ky,kkx,kky,freq_ansatz, freq_test);                        pw2_freq(freq_sign_ansatz, freq_sign_test) = pw2f(kx,ky,kkx,kky,freq_ansatz, freq_test);                        v1q_freq(freq_sign_ansatz, freq_sign_test) = v1qf(kx,ky,kkx,kky,freq_ansatz, freq_test);                        v2q_freq(freq_sign_ansatz, freq_sign_test) = v2qf(kx,ky,kkx,kky,freq_ansatz, freq_test);                     end                end                 index = [(kx - 1) * Length_Wavenumbers + ky, (kkx - 1) * Length_Wavenumbers + kky];                if w(kkx) == w(kx) && w(kx) == 0 && (w(kky) == w(ky) && w(kky) == 0) && zero_counter == 0                    zero_counter = 1;                    zero_entries(zero_counter) = {index};                end                pq{index(1), index(2)} = pq_freq; %pd_dxw                v1w1{index(1), index(2)} = v1w1_freq; %pd_dxw                v1w2{index(1), index(2)} = v1w2_freq; %pd_dxw                v2w1{index(1), index(2)} = v2w1_freq; %pd_dxw                v2w2{index(1), index(2)} = v2w2_freq; %pd_dxw                                pw1{index(1), index(2)} = pw1_freq; %pd_dxw                pw2{index(1), index(2)} = pw2_freq; %pd_dxw                v1q{index(1), index(2)} = v1q_freq; %vd_dxq                v2q{index(1), index(2)} = v2q_freq; %vd_dxq             end        end    endend``
Clearly here I could linearise some of the for loops through combinations of kx,ky,kkx,kky but I was interested whether there is a way of parallelising it as each pw1 etc are square matrices which are independent of each other before I combine them into a cell.
I am new to the way of parallelising things.

``for i = 1:2    for j = 1:2        %do anything    endend``
``parfor i=1:4    [r,c] = ind2sub([2 2],i)    disp(r);    disp(c);end``
``parfor x = 1:length(w)*length(w)*length(w)*length(w)    [kx, ky, kkx, kky] = ind2sub([length(w) length(w) length(w) length(w)],x);end``