MATLAB: How to use for loop to reduce the number of lines from the following code

column multiplicationfor loopmatrix

clc
clear all
C1 = xlsread('fire.xlsx');
x1 = C1(1:399,5);
x2 = C1(1:399,6);
x3 = C1(1:399,7);
x4 = C1(1:399,8);
x5 = C1(1:399,9);
x6 = C1(1:399,10);
x7 = C1(1:399,11);
y = C1(1:399,13);
R11= mean(x1.*x1);
R12= mean(x1.*x2);
R13= mean(x1.*x3);
R14= mean(x1.*x4);
R15= mean(x1.*x5);
R16= mean(x1.*x6);
R17= mean(x1.*x7);
R21= mean(x2.*x1);
R22= mean(x2.*x2);
R23= mean(x2.*x3);
R24= mean(x2.*x4);
R25= mean(x2.*x5);
R26= mean(x2.*x6);
R27= mean(x2.*x7);
R31= mean(x3.*x1);
R32= mean(x3.*x2);
R33= mean(x3.*x3);
R34= mean(x3.*x4);
R35= mean(x3.*x5);
R36= mean(x3.*x6);
R37= mean(x3.*x7);
R41= mean(x4.*x1);
R42= mean(x4.*x2);
R43= mean(x4.*x3);
R44= mean(x4.*x4);
R45= mean(x4.*x5);
R46= mean(x4.*x6);
R47= mean(x4.*x7);
R51= mean(x5.*x1);
R52= mean(x5.*x2);
R53= mean(x5.*x3);
R54= mean(x5.*x4);
R55= mean(x5.*x5);
R56= mean(x5.*x6);
R57= mean(x5.*x7);
R61= mean(x6.*x1);
R62= mean(x6.*x2);
R63= mean(x6.*x3);
R64= mean(x6.*x4);
R65= mean(x6.*x5);
R66= mean(x6.*x6);
R67= mean(x6.*x7);
R71= mean(x7.*x1);
R72= mean(x7.*x2);
R73= mean(x7.*x3);
R74= mean(x7.*x4);
R75= mean(x7.*x5);
R76= mean(x7.*x6);
R77= mean(x7.*x7);
R=[R11 R12 R13 R14 R15 R16 R17;R21 R22 R23 R24 R25 R26 R27;R31 R32 R33 R34 R35 R36 R37;R41 R42 R43 R44 R45 R46 R47;R51 R52 R53 R54 R55 R56 R57;R61 R62 R63 R64 R65 R66 R67;R71 R72 R73 R74 R75 R76 R77]
R0=[mean(x1.*y);mean(x2.*y);mean(x3.*y);mean(x4.*y);mean(x5.*y);mean(x6.*y);mean(x7.*y)]
A=pinv(R)*(R0)

Best Answer

This is MATLAB, so here is a much simpler solution without any loops:
M = C1(1:399,5:11);
R = mean(permute(M,[3,2,1]).*permute(M,[2,3,1]),3);
R0 = mean(M.*C1(1:399,13),1).';
B = pinv(R)*(R0)
And compared against the output of your code:
>> isequal(A,B)
ans = 1
For MATLAB versions prior to R2016b you will need replace the .* operators with bsxfun and times.