This gives an error that says, "Index in position 2 is invalid. Array indices must be positive integers or logical values."

6 次查看(过去 30 天)
I cant seem to figure out what is causeing the error saying the indices must be positive integers or logical values. All help is appreciated but I dont understand most feedback when it is super heavy in matlab lingo
close all, clear, clc
load('EnvironmentalForcing.mat')
Bmax = 1;
uL_min = 6;
uI = 10;
e = 0.001;
Ap = 5000;
Pi = 930.27249;
Si = Pi/Ap;
Li = 0.01*Si;
Ii = 0;
Ri = uI*Ii;
Bi = 1;
Pb = 1;
for i = 1:length(T)
if T(i)>0 && T(i)<35
Tb(i) = (0.000241*(T(i)^2.06737))*((35-T(i))^0.72859);
end
end
j = 1;
for i=1:length(t)
uL(i) = sum(Tb(j:i));
while uL(i) > uL_min
j = j+1;
uL(i) = sum(Tb(j:i));
end
end
Unrecognized function or variable 't'.
B = Bmax*Tb;
p = [B, uL, uI, e, Te, Pb];
y0 = [Pi, Si, Li, Ii, Ri, Bi];
odeFunc = SLIRmodel(tspan, y0, p);
[t,y] = rk4(odeFunc, tspan, y0, p);
%% Functions
function [dydt] = SLIRmodel(t,y0,p)
%assign parameters
beta = p(1);
uL = p(2);
uI = p(3);
e = p(4);
Te = p(5);
Pb = p(6);
%assign variables
P = y0(1);
S = y0(2);
L = y0(3);
I = y0(4);
R = y0(5);
dPdt = ((1.33*t)*Te)+((0.1724*Pb - 0.0000212*Pb^2)*Te);
dSdt = (-beta*S*I)+(((1.33*t)*Te)+((0.1724*Pb - 0.0000212*Pb^2)*Te));
dLdt = (beta*S*I)-((uL^-1)*L)+e;
dIdt = ((uL^-1)*L)-((uI^-1)*I);
dRdt = (uI^-1)*I;
dydt = [dPdt, dSdt, dLdt, dIdt, dRdt];
end
function [t, y] = rk4(odeFunc, tspan, y0, p)
% N = length(tspan);
% q = length(y0);
% t0 = tspan(2);
% h = tspan(2) - tspan(1);
% t = zeros(N, 1);
% y = zeros(q, N);
% t(1) = t0;
% y(:, 1) = y0;
N = length(tspan);
t = tspan;
y = zeros(length(y0),N);
y(:,1) = y0(:);
for n=1:N-1
h = tspan(n+1)-tspan(n);
k1 = h*odeFunc(n, y(:,n), p);
k2 = h*odeFunc(n + 0.5, y(:,n) + 0.5*k1, p);
k3 = h*odeFunc(n + 0.5, y(:,n) + 0.5*k2, p);
k4 = h*odeFunc(n + h, y(:,n) + k3, p);
y(:, n+1) = y(:,n)+((k1+(2*k2)+(2*k3)+k4))/6;
t(n+1) = t(n) + h;
end
end
  3 个评论
CONNOR
CONNOR 2023-11-30
Thats not the error I am seeing and i dont know why it is doing that but t is in the loaded file along with T
The error I am seeing is on line 75
Walter Roberson
Walter Roberson 2023-12-1
whos -file 'EnvironmentalForcing.mat'
Name Size Bytes Class Attributes T 1x1465 11720 double U 1x1465 11720 double V 1x1465 11720 double tspan 1x1465 11720 double
t is not in the file. T is in the file.

请先登录,再进行评论。

回答(1 个)

sai charan sampara
sai charan sampara 2023-12-5
Hello Connor,
I understand that you are trying to find out why the error “Index in position 2 is invalid.Array indices must be positive integers or logical values.” is popping up.
Firstly, there are some errors that need to be fixed. In line number 21 the variable “t” is unrecognized. Since the variable “i” is used to index through array “Tb” the line should be changed as
for i=1:length(Tb)
Also, the variable “Te” is not defined anywhere in the script or in the mat file. Some value should be given to the variable “Te”. After resolving these two there is still the error that "Index in position 2 is invalid. Array indices must be positive integers or logical values.". This is because in line 71(shown below) a part of the function rk4 there is an error.
k1 = h*odeFunc(n, y(:,n), p);
As per the script “odeFunc” is a 2-Dimensional array and using parenthesis to index through it means that the variables “n”, “y(:,n)”, “p” are treated as indexes of the array “odeFunc”. “y(:,n)” returns an array of size 4x1 of non-integer values and this cannot be given as an index to array. This is the cause for the error saying index at position 2 is invalid, since “y(:,n)” is at position 2 and is not an integer nor a logical variable. This needs to be fixed. Check if “odeFunc” being a 2-Dimensional array is correct or if it should be a function. Also passing three arguments as index inputs for a 2-Dimensional array “odeFunc” will also give an error. Fixing these two will resolve the error.
You can refer to the below resources to learn more:

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by