Incorrect dimensions for matrix multiplication
    9 views (last 30 days)
  
       Show older comments
    
    Mahsa Babaee
 on 22 Jul 2021
  
    
    
    
    
    Commented: Mahsa Babaee
 on 30 Jul 2021
            Hello friends! 
I am trying to plot a fourier serie. But I faced a problem as below:
Error using  * 
Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches the number of rows in the second matrix. To perform elementwise
multiplication, use '.*'.
Error in SingleLayer (line 100)
                        S2= S2+(4*XI*YI*ZI)*((T_ini-T_ts)*exp(-alpha*landa2(n,m,l)*t)-OMEGA.*(exp(-alpha*landa2(n,m,l)*t)-1)/landa2(n,m,l))/(Lx*Ly*ZI2);
I would be appreciated if you could guide me about my carelessness. My code is:
Lx= 0.040;   Ly= 0.040;   Lz= 0.00008;  tmax= 5;
k= 0.25;     rho= 1200;   Cp=3600 ;   alpha= k/(rho*Cp);
omega_b= 0;  rho_b= 1060;    C_b= 3770;
omega= sqrt(rho_b*C_b*omega_b/k);
w= omega^2;
T_b=310 ;  T_ini=309 ;    T_ts=310 ;
nmax=10 ; mmax=10 ; lmax=10 ;
mu= 80e+03;
I0=1  ; q_met= 368.1;
OMEGA= w*(T_b- T_ts)*+q_met/k;
%%%%%%%%%%%%
beta= zeros(1,nmax);
for n=1:nmax
    beta(n)= n*pi/Lx;
end
gamma= zeros(1,mmax);
for m=1:mmax
    gamma(m)= m*pi/Ly;
end
sigma= zeros(1,lmax);
for l=1:lmax
    sigma(l)= (2*l-1)*pi/(2*Lz);
end
landa2= zeros(nmax,mmax,lmax);
for n=1:nmax
    for m=1:mmax
        for l=1:lmax
            landa2(n,m,l)= (beta(n))^2+(gamma(m))^2+(sigma(l))^2;
        end
    end
end
Zeim= zeros(1,lmax);
for l=1:lmax
    Zeim(l)= (mu*sigma(l)*exp(-mu*Lz)*sin(sigma(l)*Lz)-mu^2*exp(-mu*Lz)*cos(sigma(l)*Lz)+mu^2)/(mu^2+sigma(l)^2);
end
XI= zeros(1,nmax);
for n=1:nmax
    XI(n)= 1/beta(n)*(1-cos(beta(n)*Lx));
end
YI= zeros(1,mmax);
for m=1:mmax
    YI(m)= 1/gamma(m)*(1-cos(gamma(m)*Ly));
end
ZI= zeros(1,lmax);
for l=1:lmax
    ZI(l)= 1/sigma(l)*sin(sigma(l)*Lz);
end
ZI2= Lz/2;
ql= zeros(nmax,mmax);
for n=1:nmax
    for m=1:mmax
        ql(n,m)= 1/(beta(n)*gamma(m))*(cos(beta(n)*Lx)-1)*(cos(gamma(m)*Ly)-1);      %ql= int(f(x,y)*X(n,x)*Y(m,y),0,Lx,0,Ly)    % Assumption f(x,y)=1
    end
end
a= zeros(nmax,mmax,lmax);   d= zeros(nmax,mmax,lmax);
S1= zeros(nmax,mmax,lmax);  S2= zeros(nmax,mmax,lmax);
for n=1:nmax
    for m=1:mmax
        for l=1:lmax
            S1=0;   S2=0;   T= zeros(nmax,mmax,lmax);
            for x=0:Lx/10:Lx
                for y= 0:Ly/10:Ly
                    for t=0:0.01:tmax
                        S1= S1+(4*I0*ql(n,m)*Zeim(l)*(1-exp(-alpha*landa2(n,m,l)*t)))/(Lx*Ly*k*ZI2*landa2(n,m,l));
                        S2= S2+(4*XI*YI*ZI)*((T_ini-T_ts)*exp(-alpha*landa2(n,m,l)*t)-OMEGA*(exp(-alpha*landa2(n,m,l)*t)-1)/landa2(n,m,l))/(Lx*Ly*ZI2);
                        T(n,m,l)=T(n,m,l)+(S1+S2)*sin(beta(n)*x)*sin(gamma(m)*y);
                    end
                end
            end
            plot (t,T)
        end
    end
end
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 22 Jul 2021
        XI= zeros(1,nmax);
YI= zeros(1,mmax);
XI and YI are the same size. 
S2= S2+(4*XI*YI*ZI)*((T_ini-T_ts)*exp(-alpha*landa2(n,m,l)*t)-OMEGA*(exp(-alpha*landa2(n,m,l)*t)-1)/landa2(n,m,l))/(Lx*Ly*ZI2);
You use XI*YI . In order for that to work, size(XI,2) == size(YI,1) must be true. size(YI,1) is 1 (because it is 1 x mmax), so size(XI,2) would have to be 1, so nmax would have to be 1.
nmax=10 ; mmax=10 ; lmax=10 ;
But it is not.
Remember that * is algebraic matrix multiplication ("inner product"). If you want to multiply element-by-element you need to use .* instead of *
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
