Index exceeds the number of array elements (252).

% Explicit Quickest scheme
clc; clear all;
xmin = 0; % [m]
xmax = 50*1000; % [m]
dx = 200; % [m]
tmax = 0.5*24*3600; % [s]
u = 0.45; % [m/s]
D=10; %[m2/s]
k=0.1/(24*3600); %[1/s]
dt = 50; % [s]
No = (xmax - xmin)/dx;
x = xmin : dx : xmax + dx;
%% initial and Boundary conditions
for i = 1:length(x)
if x(i)<=0
Co(i) = 100;
else
Co(i) = 0;
end
end
C = Co;
Cp = Co;
% Analytical solution
ns = tmax/dt;
for n = 1 : ns
for i = 1 : No+2
if x(i)<=u*tmax
d(i) = 100;
else
d(i) = 0;
end
end
end
% Quickest
ns = tmax/dt;
for n = 1 : ns
for i = 3 : No+2
F=D*dt/(dx)^2;
g=u*dt/dx;
gr= (C(i+1)-C(i))/dx;
gl=(C(i)-C(i-1))/dx;
cr=(C(i+1)-2*C(i)+C(i-1))/dx^2;
cl=(C(i-2)-2*C(i-1)+C(i))/dx^2;
Cp(i) = C(i)-g*((0.5*(C(i)+C(i+1))-0.5*dx*g*gr-0.166*dx^2*(1-g^2-3*F)*cr)-(0.5*(C(i-1)+C(i))-0.5*dx*g*gl-0.166*dx^2*(1-g^2-3*F)*cl))+F*((dx*gr-0.5*dx^2*g*cr)-(dx*gl-0.5*dx^2*g*cl))-k*C(i)*dt;
end
C = Cp;
end

1 个评论

Hey ummabb66,
please use the code insert function to display your code, so it can be understood. What is you exact problem?

请先登录,再进行评论。

回答(1 个)

Hello, ummaab66
The error id in the line with the expression
gr= (C(i+1)-C(i))/dx;
The array C has 252 elements and i goes from 3 to 252. So, when you try to access the element C(i+1) when i is 252, MATLAB is not able to find the element and throws the error.

类别

帮助中心File Exchange 中查找有关 Matrix Indexing 的更多信息

标签

提问:

2020-11-6

回答:

2025-7-1

Community Treasure Hunt

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

Start Hunting!

Translated by