error message vectors must be the same length

Hello, im trying to plot the temperature distribution vs time, I get the right temp answer from running the code but when i try to plot it vs time it gives me an error message saying that vectors must be the same length. The question is asking to plot the surface temperature as a function of time from 0 to 1800 seconds. Thank you.
clear
clc
close
L=0.2;
Ti=600;
Tinf=22;
h=240;
k=80.2;
alpha=3.31e-5;
dx=0.01;
dt=1.5;
Fo=(alpha*dt)/dx^2;
Bii=(h*dx)/k;
Bio=(h*dx)/k;
x=[0:dx:L];
n=length(x);
T=Ti*ones(1,n);
t=[0:dt:1800];
for k=2:length(t)
Tnew(1)=T(1)*(1-2*Fo-2*Bio*Fo)+2*Fo*T(2)+2*Bio*Fo*Tinf;
for i=2:n-1
Tnew(i)=T(i)*(1-2*Fo)+Fo*(T(i+1)+T(i-1));
end
Tnew(n)=T(n)*(1-2*Fo-2*Bii*Fo)+2*Fo*T(n-1)+2*Bii*Fo*Tinf;
T=Tnew;
end
Tnew(n)
plot(t,Tnew)

4 Comments

i tried doing plot(t,Tnew(n)) i dont get an error message but my graph is empty
I think you got confused with your indexing. k is not used anywhere in your loop, so your loop does the same thing every time. I have no idea what your calculation should be, so I have no idea how it should be fixed. Your Tnew vector is 21 elements, while t is 1201.
im trying to calculate the temperature distribution through a slab 1d transient heat conduction using explicit finite difference method
@Rik, "k is not used anywhere in your loop, so your loop does the same thing every time"
Actually, the k loop calculates a new T based in its value in the previous iteration, so there's no issue on that front.
I suspect that the intent of the code is to plot the values of T (== Tnew) at a given index for each k.

Sign in to comment.

 Accepted Answer

Before you do anything else, the first thing you need to do is to comment your code. The code should start with:
%nameofscript: Calculate the temperature distribution through a ... finish the description
%inputs are: ...
%outptus are:
Then each variable should have a comment attached to it when it's declared
L = 0.2; %length of slab?
Ti = 600; %initial temperature somewhere?
...
I suspect that you're trying to plot the evolution of the temperature with time at a given x position, L possibly. The problem is that your current code overwrite all the temperatures at each timestep, so you're left with just the temperature at the last time step.
You can fix this two ways: Either you keep all the temperatures for all the time step and all the position. You'll need enough memory to store a numel(t) * numel(x) matrix. The advantage of this is that you can then easily plot the temperature for any position. The other option is to only keep the temperatures for the position of interest but if you need another position you'll have to recalculate everything. Of course, it uses less memory (only numel(t) elements to store|
Keeping all elements:
T = zeros(numel(t), numel(x)); %temperature of the slab at time t (rows) and position x (columns)
T(1, :) = Ti; %temperature at t = t0;
for k = 2:numel(t)
T(k, 1) = T(k-1, 1)*(1-2*Fo-2*Bio*Fo)+2*Fo*T(k-1, 2)+2*Bio*Fo*Tinf;
for i = 2:numel(x)-1
T(k, i) = T(k-1, i)*(1-2*Fo)+Fo*(T(k-1, i+1)+T(k-1, i-1));
end
T(k, n) = T(k-1, n)*(1-2*Fo-2*Bii*Fo)+2*Fo*T(k-1, n-1)+2*Bii*Fo*Tinf;
end
%plot temperature for all t at a different x
plot(t, T(:, end), 'DisplayName', 'x = L');
hold on
plot(t, T(:, 1), 'DisplayName', 'x = 0');
plot(t, T(:, 100), 'DisplayName', sprintf('x = %f', x(100)));

More Answers (0)

Products

Release

R2015b

Community Treasure Hunt

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

Start Hunting!