2013-10-11 4 views
0

Я пытаюсь создать модель Abeles matrix formalism для анализа некоторых экспериментальных данных. Я добавил ссылку на эту ссылку для ссылки, чтобы вы могли видеть, чего я пытаюсь достичь.Matlab - Умножение списка матриц

Суть моей проблемы в том, что я не могу умножить четыре набора матриц друг на друга, как в: A[1]*B[1]*C[1]*D[1], A[2]*B[2]*C[2]*D[2], ..., A[n]*B[n]*C[n]*D[n]. Затем мне нужно сохранить результаты в виде отдельных собственных матриц - каждая матрица представляет соответствующее значение передачи импульса от Qmin:Qstep:Qmax.

Также, когда я пытаюсь выполнить последний шаг; R = abs((ABCD(2,1)./ABCD(1,1)).^2) В итоге я получаю только одно значение, а не значение R для каждого значения Q.

Из-за размера кода простой цикл не является реалистичным.

my 'test' code is: 
%import data fid = fopen('run_22208_09.dat'); 
%A = textscan(fid,'%f%f%f',270,'headerlines',0,'delimiter',','); 

NQ = size(A{1,1}); 
NQ = NQ(1); 
Qmin = A{1,1}(1); 
Qmax = A{1,1}(NQ); 
Qstep = A{1,1}(2) - A{1,1}(1); 
fclose('all'); 

s0 = 2e-6; 
s1 = 10e-6; 
s2 = 6e-6; 
s3 = 4e-6; 
s4 = 8e-6; 
sn = 12e-6; 

r1 = 2; 
r2 = 10; 
r3 = 3; 
r4 = 7; 
t1 = 10; 
t2 = 45; 
t3 = 5; 
t4 = 20; 

Q=Qmin:Qstep:Qmax; 

k = 2.*Q; 
k1 = (((k).^2) - 4.*pi.*(s1 - s0)).^0.5; 
k2 = (((k).^2) - 4.*pi.*(s2 - s0)).^0.5; 
k3 = (((k).^2) - 4.*pi.*(s3 - s0)).^0.5; 
k4 = (((k).^2) - 4.*pi.*(s4 - s0)).^0.5; 
kn = (((k).^2) - 4.*pi.*(sn - s0)).^0.5; 

layer1 = ((k1 - k2)./(k1 + k2)).*(exp(-2.*k1.*k2.*(r1.^2))); 
beta1 = (sqrt(-1)).*k1.*t1; 

layer2 = ((k2 - k3)./(k2 + k3)).*(exp(-2.*k2.*k3.*(r2.^2))); 
beta2 = (sqrt(-1)).*k2.*t2; 

layer3 = ((k3 - k4)./(k3 + k4)).*(exp(-2.*k3.*k4.*(r3.^2))); 
beta3 = (sqrt(-1)).*k3.*t3; 

layer4 = ((k4 - kn)./(k4 + kn)).*(exp(-2.*k4.*kn.*(r4.^2))); 
beta4 = (sqrt(-1)).*k4.*t4; 

%general matrix 
C1 = [exp(beta1),layer1.*(exp(beta1));layer1.*exp(-beta1),exp(-beta1)] 
C2 = [exp(beta2),layer2.*(exp(beta2));layer2.*exp(-beta2),exp(-beta2)]; 
C3 = [exp(beta3),layer3.*(exp(beta3));layer3.*exp(-beta3),exp(-beta3)]; 
C4 = [exp(beta4),layer4.*(exp(beta4));layer4.*exp(-beta4),exp(-beta4)]; 

% CA = bsxfun(@times,C1,C2) 
% CB = bsxfun(@times,CA,C3); 
% C = bsxfun(@times,CB,C4) 

% R = abs((C(2,1)./C(1,1)).^2) 

ответ

0

Для поэлементно умножения массивов, вы пишете

M = C1 .* C2 .* C3 .* C4; 
+0

Умм, автор хочет поэлементное умножение. – Peter

+0

Peter прав, это приводит к: Ошибка при использовании * Размеры внутренней матрицы должны совпадать. – user2871762

+0

@ user2871762 ok, см. Мое редактирование – Jonas

Смежные вопросы