error message vectors must be the same length
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
salem alnaqbi
am 19 Jul. 2018
Kommentiert: salem alnaqbi
am 19 Jul. 2018
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 Kommentare
Guillaume
am 19 Jul. 2018
@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.
Akzeptierte Antwort
Guillaume
am 19 Jul. 2018
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)));
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Numerical Integration and Differentiation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!