??? Error using ==> times Matrix dimensions must agree
    3 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
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
0 comentarios
Respuesta aceptada
  Andrew Newell
      
 el 24 de En. de 2012
        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.
0 comentarios
Más respuestas (0)
Ver también
Categorías
				Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

