필터 지우기
필터 지우기

Index in position 2 is invalid. Array indices must be positive integers or logical values.

조회 수: 2 (최근 30일)
%% Material parameters
data_rho = [7840,0.44];
data_Cp = [490,0.0733333];
data_k = [13.1947,0.0126919];
%% Geometry
L = 0.03;
%% Boundary conditions
T0 = 1000;
Tinfinity = 20 + 273;
htc_top = 50;
htc_sides = 100;
htc_btm = 20;
Emissivity = 0.0;
time = 0;
%% thermocouple positions
tpx = [0.015 0.027 0.027];
tpy = [0.015 0.015 0.027];
%% Simulation control
n = 3;
CFL = 0.5;
itPlot = 10;
%% Discretize space
dx = L/(n-1);
x = 0:dx:L;
y = L:-dx:0; % T(1,1) is the top left
%% Initialize variables
T = ones(n,n)*T0;
T_new = zeros(n,n);
dtMat = zeros(n,n);
it = 0;
%% Physical constants
stefan = 5.670367e-8;
%% Record predictions
Temp_thermocouples = interp2(x,y,T,tpx,tpy);
SaveNumber = 1;
TimeVector(SaveNumber) = time;
TempSavedMatrix(SaveNumber,:) = Temp_thermocouples;
%% Model calculation
while max(max(T)) > 300 + 273.15
%% Thermophysical properties
rho = data_rho(1) + data_rho(2)*T;
k0 = data_k(1) + data_k(2)*T;
Cp = data_Cp(1) + data_Cp(2)*T;
%% Calculate temperature dependent parameters
alpha = k0./rho./Cp;
Br = stefan*Emissivity*dx./k0;
Biot_top = htc_top*dx./k0;
Biot_bottom = htc_btm*dx./k0;
Biot_sides = htc_sides*dx./k0;
%% time step
% interior
for i = 2: n-1
for j = 2: n-1
dtMat(i,j) = CFL*dx*dx/4./alpha(i,j);
end
end
% top left
i = 1;
j = 1;
dtRadTerm = 0;
dtTerm = 2+ Biot_top(i,j) + Biot_sides(i,j)+ dtRadTerm;
dtMat(i,j) = CFL*dx*dx/2./(alpha(i,j))*dtTerm;
for j = 2: n-1
% top edge
i = 1;
dtRadTerm = 0;
dtTerm = 2+ Biot_top(i,j)+ dtRadTerm;
dtMat(i,j) = CFL*dx*dx/2./(alpha(i,j))*dtTerm;
end
% top right
i = 1;
j = n;
dtRadTerm = 0;
dtTerm = 2+ Biot_top(i,j) + Biot_sides(i,j)+ dtRadTerm;
dtMat(i,j) = CFL*dx*dx/2./(alpha(i,j))*dtTerm;
for i = 2: n-1
% left edge
j = 1;
dtRadTerm = 0;
dtTerm = 2+ Biot_sides(i,j)+ dtRadTerm;
dtMat(i,j) = CFL*dx*dx/2./(alpha(i,j))*dtTerm;
end
for i = 2: n-1
% right edge
j = n;
dtRadTerm = 0;
dtTerm = 2+ Biot_sides(i,j)+ dtRadTerm;
dtMat(i,j) = CFL*dx*dx/2./(alpha(i,j))*dtTerm;
end
% btm left
i = n;
j = 1;
dtRadTerm = 0;
dtTerm = 2+ Biot_bottom(i,j) + Biot_sides(i,j)+ dtRadTerm;
dtMat(i,j) = CFL*dx*dx/2./(alpha(i,j))*dtTerm;
% btm edge
for j = 2: n-1
i = n;
dtRadTerm = 0;
dtTerm = 2+ Biot_bottom(i,j)+ dtRadTerm;
dtMat(i,j) = CFL*dx*dx/2./(alpha(i,j))*dtTerm;
end
% btm right
i = n;
j = n;
dtRadTerm = 0;
dtTerm = 2+ Biot_bottom(i,j) + Biot_sides(i,j)+ dtRadTerm;
dtMat(i,j) = CFL*dx*dx/2./(alpha(i,j))*dtTerm;
dt = min(dtMat(:));
%% Fourier number
Fo = alpha*dt/(dx*dx);
%% Calculate the new T vector T^(p+1)
% top left
i = 1;
j = 1;
part1 = (1-4*Fo(i,j)*T(i,j));
part2 = 2*Fo(i,j)*T(i+1,j) + T(i,j+1);
part3 = 2*Fo(i,j)*(Biot_top(i,j)+Biot_sides(i,j))*(Tinfinity-T(i,j));
T_new(i,j) = part1+part2+part3;
for j = 2: n-1
% top surface
i = 1;
part1 = (1-4*Fo(i,j)*T(i,j));
part2a = 2*Fo(i,j)*T(i+1,j);
part2b = Fo(i,j)*T(i,j+1);
part2c = Fo(i,j)*T(i,j-1);
part3 = 2*Fo(i,j)*(Biot_top(i,j))*(Tinfinity-T(i,j));
T_new(i,j) = part1+part2a+part2b+part2c+part3;
end
% top right
i = 1;
j = n;
part1 = (1-4*Fo(i,j)*T(i,j));
part2 = 2*Fo(i,j)*T(i+1,j) + T(i,j-1);
part3 = 2*Fo(i,j)*(Biot_top(i,j)+Biot_sides(i,j))*(Tinfinity-T(i,j));
T_new(i,j) = part1+part2+part3;
for i = 2: n-1
% left surface
j = 1;
part1 = (1-4*Fo(i,j)*T(i,j));
part2a = 2*Fo(i,j)*T(i,j+1);
part2b = Fo(i,j)*T(i+1,j);
part2c = Fo(i,j)*T(i-1,j);
part3 = 2*Fo(i,j)*(Biot_sides(i,j))*(Tinfinity-T(i,j));
T_new(i,j) = part1+part2a+part2b+part2c+part3;
end
% right surface
j = n;
part1 = (1-4*Fo(i,j)*T(i,j));
part2a = 2*Fo(i,j)*T(i,j-1);
part2b = Fo(i,j)*T(i+1,j);
part2c = Fo(i,j)*T(i-1,j);
part3 = 2*Fo(i,j)*(Biot_sides(i,j))*(Tinfinity-T(i,j));
T_new(i,j) = part1+part2a+part2b+part2c+part3;
% bottom left
i = n;
j = 1;
part1 = (1-4*Fo(i,j)*T(i,j));
part2 = 2*Fo(i,j)*T(i-1,j) + T(i,j+1);
part3 = 2*Fo(i,j)*(Biot_bottom(i,j)+Biot_sides(i,j))*(Tinfinity-T(i,j));
T_new(i,j) = part1+part2+part3;
% bottom edge
%
i = n;
part1 = (1-4*Fo(i,j)*T(i,j));
part2a = 2*Fo(i,j)*T(i-1,j);
part2b = Fo(i,j)*T(i,j+1);
part2c = Fo(i,j)*T(i,j-1);
part3 = 2*Fo(i,j)*(Biot_bottom(i,j))*(Tinfinity-T(i,j));
T_new(i,j) = part1+part2a+part2b+part2c+part3;
issue is with
part2c =
Fo(i,j)*T(i,j-1);
  댓글 수: 2
Ive J
Ive J 2021년 2월 4일
You are setting j at some point to 1, so j-1 would be zero.
Jan
Jan 2021년 2월 4일
@John McCann: Please post the complete error message and only the relevcant part of the code. Then the readers do not have to guess, where the problem occurs.

댓글을 달려면 로그인하십시오.

답변 (1개)

Jan
Jan 2021년 2월 4일
The debugger helps you to find the problem. Type in the command window:
dbstop if error
Then run your code again. Matlab will stop when the error occurs and you can examine the values of the locally used variables.

카테고리

Help CenterFile Exchange에서 Clocks and Timers에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by