??? Error using ==> times Matrix dimensions must agree

1 回表示 (過去 30 日間)
Guillermo Lopez
Guillermo Lopez 2012 年 1 月 24 日
I have been trying to do my first program with matlab in order to plot some data on a graph. My function is as follows:
%refractive indices
clear all
nair=1;
nSi=3.5+0.005*1i;
nSiO2=1.5;
nMoS2=5.6;
%Materials thickness
dSiO2=285e-10;
dMoS2=input('insert MoS2 thickness (m): ');
donda=linspace(450e-9,700e-9,1000);
for M=1:length(dMoS2)
%Total matrix bare SiO2
m_bare=(Sij(nair,nSiO2)).*(Pj(nSiO2,dSiO2,donda)).* (Sij(nSiO2,nSi));
%Total matrix with MoS2
m=(Sij(nair,nMoS2)).*(Pj(nMoS2,dMoS2(M),donda)).*(Sij(nMoS2,nSiO2)).*(Pj(nSiO2,dSiO2,donda)).*(Sij(nSiO2,nSi));
%Reflection coefficients
R_bare=abs(m_bare(2,1)./m_bare(1,1)).^2;
R=abs(m(2,1)/m(1,1)).^2;
%Contrast
C(M)=(R-R_bare)/(R+R_bare);
end
%Output:
plot(donda,C)
xlabel('wavelength (nm)')
ylabel('Contrast')
Pj function:
%Propagation matrix
function p=Pj(nj,dj,lambda0)
phi=1i*2*pi*nj*dj./lambda0;
p=[exp(-phi) 0; 0 exp(+phi)];
end
And my Sij function:
%scattering matrix
function s=Sij(ni,nj)
nsum=ni+nj;
nn=(ni-nj)./nsum;
s=[1 nn; nn 1]./(2*ni/nsum);
end
When I try to run the program I used to get an error mldivide but after adding a dot to define variables everything was solved on that issue. NOW, im getting an error on line 13 which is as follows:
??? Error using ==> times
Matrix dimensions must agree.
Error in ==> Wavelength_vs_contrast at 13
m_bare=(Sij(nair,nSiO2)).*(Pj(nSiO2,dSiO2,donda)).*(Sij(nSiO2,nSi));
I don't know what im doing wrong, so if you could please help me out I would greatly appreciate it. Thanks in advance: Guillermo

採用された回答

Andrew Newell
Andrew Newell 2012 年 1 月 24 日
In the line
m_bare=(Sij(nair,nSiO2)).*(Pj(nSiO2,dSiO2,donda)).* (Sij(nSiO2,nSi));
you are doing element-by-element multiplication between matrices that are 2 x 2, 2 x 1001 and 2 x 2. Let's call them A, B and C. A multiplication like
A*B
(no dot) makes dimensional sense, as does
(A*B)'*C
I don't know if that is what you are trying to calculate, though.
I recommend you read Debugging.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMATLAB についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by