Why is my loop not running? (Error using / Matrix dimensions must agree)

2 views (last 30 days)
That's my code, supposedly it is about a water particle undergoing both, heat and mass transfer at the same time, and I'm monitoring the rate of change of both, diameter and temperature at the same time with a time step of 0.00001 seconds.
Tb = 20; % temperature of the bulk air surrounding the particle [C]
Tp(1) = 15; % temperature of the particle's surface [C]
RHo = 0.5; % Relative Humidity air [%]
psat = 2.34; % saturation pressure at room temp [kpa]
pinf = RHo*psat; % partial pressure in bulk [kpa]
M=0.018; % molar mass of water molecule [Kg.mol-1]
Ru = 8.314; % Universal gas constant [Kg.mol.m2/s2.K]
cinf = (pinf*1000)*(M) / ((Ru)*(Tb+273)); % vapor concentration in air at 20 degrees
RHp = 1; %Relative Humidity at surface particle [%]
p = RHp*psat; % partial pressure at the surface of particle [kpa]
st = 0.0727; % surface tension at room temp [N/m]
den = 1000; % density at room temp [kg/m3]
dp(1)=200*10^-9; % initial diameter of the water particle [m]
Kr(1) = exp((4*st*M)/(Ru*den*dp(1)*(Tb+273))); % kelvin effect ratio
pd =Kr*p; % real partial pressure at the surface of the particle [kpa]
cp(1) =(pd*1000)*(M)/((Ru)*(Tp(1)+273)); % water vapor concentration at the particle's surface [Kg/m3]
t = 0.00001; % timestep [s]
D = 2.5*10^-5; % diffusivity coefficient of water at room temp [m2/s]
L = 2.44*10^6; % latent heat of vaporization for water at room temp
cp = 1007; %specific heat at room temp
kair = 0.026; % thermal conductivity for air at room temp [W/mK]
Tp(1) = 15;
dp(1) = 200*10^-9;
Kr(1) = exp((4*st*M)/(Ru*den*dp(1)*(Tb+273)));
cp(1) =(pd*1000)*(M)/((Ru)*(Tp(1)+273));
mp(1) = (pi/6) *den*(dp(1))^3; %mass particle initially
mpdot(1)=(pi/6)*D*dp(1)*(cp(1)-cinf); %mass rate of the particle initially
t2(1) = 0; %time interval initially
i = 0;
while dp(i+1) > 0
% mass transfer %
mp(i+1) = mp(i) - mpdot(i)*t; %% new mass every iteration
dp(i+1)= ((6*mp(i+1))/(pi*den))^(1/3); %% new diameter every iteration
%heat transfer %
A(i) = -((L*D*(cp(i) - cinf)) + (kair*(Tp(i) - Tb)));
B(i) = ((12*t)/(den*cp*(dp(i))^2));
Tp(i+1) = (B(i)*A(i)) + Tp(i);
Kr(i+1)= exp((4*st*M)/(Ru*den*dp(i+1)*(Tb+273)));
cp(i+1) =(p*Kr(i+1)*1000)*(M)/((Ru)*(Tp(i+1)+273));
t2(i+1) =t2(i) + t;
mpdot(i+1) = (pi/6)*D*dp(i+1)*(cp(i+1)-cinf);
% break if imaginary numbers start appearing %
if imag(dp(i+1)) ~= 0
%%% PLOTTING %%%
subplot (2,1,1)
plot (t2 ,dp*10^9)
xlabel('time [s]'), ylabel('diameter [nm]')
subplot (2,1,2)
plot (t2,Tp)
xlabel('time [s]'), ylabel('Particle Temperature [C]')
When it comes to the B parameter, it shows this error; ( Error using / Matrix dimensions must agree.)
A and B are parameters to be used for the differential equation that gets me the new temperature at the new timestep.
Why is it not working for B ?

Accepted Answer

David Hill
David Hill on 26 Sep 2022
Cannot multiply by the entire array (cp).
%heat transfer %
A(i) = -((L*D*(cp(i) - cinf)) + (kair*(Tp(i) - Tb)));
B(i) = ((12*t)/(den*cp(i)*(dp(i))^2));%cp(i)
Tp(i+1) = (B(i)*A(i)) + Tp(i);

More Answers (1)

Walter Roberson
Walter Roberson on 26 Sep 2022
cp(1) =(pd*1000)*(M)/((Ru)*(Tp(1)+273));
cp(i+1) =(p*Kr(i+1)*1000)*(M)/((Ru)*(Tp(i+1)+273));
cp is a matrix.
B(i) = ((12*t)/(den*cp*(dp(i))^2));
You are dividing by something that involves all of cp. After the first iteration, cp would be a vector. Even if the / operation worked properly, the result would surely be a vector that could not be assignd to B(i)
The MATLAB / operator is matrix division. P/Q is similar to P*inv(Q) but with some restrictions on size. P/Q is effectively a "fitting" operation. The element-by-element division operator in MATLAB is ./ like P./Q


Find more on Thermal Analysis in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!