Index exceeds the number of array elements in ODE using anonymous function

I dont't understand what is wrong with this scirpt. For different set of equations I was able to use anonymous functions inside ODE handle and everuthing was just perfect, but now, in much larger system, I am constantly getting this error
Index exceeds the number of array elements (34).
Error in full_DAO>@(t,x)[1/L1*(.............
Error in odearguments (line 90) f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode15s (line 150) odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in full_DAO (line 118) [t,sol] = ode15s(deq,[0 100e-6],zeros(1,34));
Do you have idea what can be wrong? Clearly, number of equations is 34 and nowhere I am calling higher index so I don't get it. How to avoid this error?
clear
close all
clc
format shorteng
m = 0.6;
L1 = 40e-6;
L2 = 40e-6;
L3 = 125e-9;
L4 = 125e-9;
L5 = 125e-9;
L6 = 40e-6;
L7 = 40e-6;
L8 = 125e-9;
L9 = 125e-9;
L10 = 40e-6;
L11 = 40e-6;
L12 = (1/2 + m/2)*125e-9;
L13 = (1/2 + m/2)*125e-9;
L14 = 40e-6;
L15 = 40e-6;
L16 = 125e-9*(1 - m^2)/(2*m);
L17 = 125e-9*(1 - m^2)/(2*m);
U1 = -2;
U2 = 3;
U3 = 7;
Udd = 11;
Ru1 = 100;
Ru2 = 60;
Ru3 = 20;
Rudd = 7;
R1 = 50;
R2 = 50;
%RF loss modelling
Rc3 = 1e9;
Rc4 = 5e3;
Rc7 = 200e3;
Rc8 = 500e3;
Rc11 = 15e3;
Rc12 = 700e3;
RL3 = 5;
RL4 = 2;
RL5 = 7;
RL8 = 3;
RL9 = 5;
RL13 = 5;
RL12 = 4;
C1 = 10e-9;
C2 = 10e-9;
C3 = 50e-12;
C4 = 50e-12;
C5 = 10e-9;
C6 = 10e-9;
C7 = 50e-12;
C8 = 50e-12;
C9 = 10e-9;
C10 = 10e-9;
C11 = 50e-12;
C12 = 50e-12;
C13 = 10e-9;
C14 = m/2*50e-12;
C15 = 10e-9;
C16 = m/2*50e-12;
C17 = 10e-9;
%%% Shockley diode equation
Is = 1e-14;
k = 1.38e-23;
q = 1.602e-19;
T = 300;
Vt = k*T/q;
id = @(x) 0*Is*(exp(x/Vt) - 1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
deq = @(t,x) [...
1/L1*(U1 - x(1)*Ru1 - x(2));
1/C1*(x(1) - x(3));
1/L2*(x(2) - (x(4)/C2 + x(6)));
x(3) - id(x(4)/C2 + x(6));
1/L3*(x(8) - x(5)*RL3 - x(6));
1/C3*(x(5) - x(7) + (x(3) - id(x(4)/C2 + x(6))) - x(6)/Rc3);
1/L4*(x(6) - x(14) - x(7)*RL4);
1/C4*(x(9) - x(5) - x(8)/Rc4);
1/L5*(x(16) - x(9)*RL5 - x(8));
1/C5*(x(11) - x(13));
1/L6*(U2 - x(11)*Ru2 - x(10));
x(13) - id(x(12)/C6 + x(14));
1/L7*(x(10) - (x(12)/C6 + x(14)));
1/C7*(x(7) - x(15) + (x(13) - id(x(12)/C6 + x(14))) - x(14)/Rc7);
1/L8*(x(14) - x(22) - x(15)*RL8);
1/C8*(x(17) - x(16)/Rc8 - x(9));
1/L9*(x(24) - x(17)*RL9 - x(16));
1/C9*(x(19) - x(21));
1/L10*(U3 - x(19)*Ru3 - x(18));
x(21) - id(x(20)/C10 + x(22));
1/L11*(x(18) - (x(20)/C10 + x(22)));
1/C11*(x(15) - x(23) - x(22)/Rc11 + (x(21) - id(x(20)/C10 + x(22))));
1/L12*(x(22) - (x(34)/C17 + (x(23) - x(33))*R2) - x(23)*RL12);
1/C12*(-x(29) - x(25) - x(17) - x(24)/Rc12);
1/L13*(x(24) - (x(30)/C15 + (x(25) - x(31))*R1) - x(25*RL13));
x(29) - x(27);
1/L14*(x(26)/C13 - x(27)*Rudd - Udd);
x(31);
1/L15*(x(24) - x(26)/C13);
x(25) - x(31);
1/L16*(x(30)/C15 + (x(25) - x(31))*R2 - x(28)/C14);
x(33);
1/L17*(x(34)/C17 + (x(23) - x(33))*R2 - x(32)/C16);
x(23) - x(33);
];
[t,sol] = ode15s(deq,[0 100e-6],zeros(1,34));
figure(1)
plot(t,sol)

 采纳的回答

There’s a typo:
1/L13*(x(24) - (x(30)/C15 + (x(25) - x(31))*R1) - x(25*RL13));
↑ ← HERE
Correct that:
1/L13*(x(24) - (x(30)/C15 + (x(25) - x(31))*R1) - x(25)*RL13);
and it works!
format shorteng
m = 0.6;
L1 = 40e-6;
L2 = 40e-6;
L3 = 125e-9;
L4 = 125e-9;
L5 = 125e-9;
L6 = 40e-6;
L7 = 40e-6;
L8 = 125e-9;
L9 = 125e-9;
L10 = 40e-6;
L11 = 40e-6;
L12 = (1/2 + m/2)*125e-9;
L13 = (1/2 + m/2)*125e-9;
L14 = 40e-6;
L15 = 40e-6;
L16 = 125e-9*(1 - m^2)/(2*m);
L17 = 125e-9*(1 - m^2)/(2*m);
U1 = -2;
U2 = 3;
U3 = 7;
Udd = 11;
Ru1 = 100;
Ru2 = 60;
Ru3 = 20;
Rudd = 7;
R1 = 50;
R2 = 50;
%RF loss modelling
Rc3 = 1e9;
Rc4 = 5e3;
Rc7 = 200e3;
Rc8 = 500e3;
Rc11 = 15e3;
Rc12 = 700e3;
RL3 = 5;
RL4 = 2;
RL5 = 7;
RL8 = 3;
RL9 = 5;
RL13 = 5;
RL12 = 4;
C1 = 10e-9;
C2 = 10e-9;
C3 = 50e-12;
C4 = 50e-12;
C5 = 10e-9;
C6 = 10e-9;
C7 = 50e-12;
C8 = 50e-12;
C9 = 10e-9;
C10 = 10e-9;
C11 = 50e-12;
C12 = 50e-12;
C13 = 10e-9;
C14 = m/2*50e-12;
C15 = 10e-9;
C16 = m/2*50e-12;
C17 = 10e-9;
%%% Shockley diode equation
Is = 1e-14;
k = 1.38e-23;
q = 1.602e-19;
T = 300;
Vt = k*T/q;
id = @(x) 0*Is*(exp(x/Vt) - 1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
deq = @(t,x) [...
1/L1*(U1 - x(1)*Ru1 - x(2));
1/C1*(x(1) - x(3));
1/L2*(x(2) - (x(4)/C2 + x(6)));
x(3) - id(x(4)/C2 + x(6));
1/L3*(x(8) - x(5)*RL3 - x(6));
1/C3*(x(5) - x(7) + (x(3) - id(x(4)/C2 + x(6))) - x(6)/Rc3);
1/L4*(x(6) - x(14) - x(7)*RL4);
1/C4*(x(9) - x(5) - x(8)/Rc4);
1/L5*(x(16) - x(9)*RL5 - x(8));
1/C5*(x(11) - x(13));
1/L6*(U2 - x(11)*Ru2 - x(10));
x(13) - id(x(12)/C6 + x(14));
1/L7*(x(10) - (x(12)/C6 + x(14)));
1/C7*(x(7) - x(15) + (x(13) - id(x(12)/C6 + x(14))) - x(14)/Rc7);
1/L8*(x(14) - x(22) - x(15)*RL8);
1/C8*(x(17) - x(16)/Rc8 - x(9));
1/L9*(x(24) - x(17)*RL9 - x(16));
1/C9*(x(19) - x(21));
1/L10*(U3 - x(19)*Ru3 - x(18));
x(21) - id(x(20)/C10 + x(22));
1/L11*(x(18) - (x(20)/C10 + x(22)));
1/C11*(x(15) - x(23) - x(22)/Rc11 + (x(21) - id(x(20)/C10 + x(22))));
1/L12*(x(22) - (x(34)/C17 + (x(23) - x(33))*R2) - x(23)*RL12);
1/C12*(-x(29) - x(25) - x(17) - x(24)/Rc12);
% 1/L13*(x(24) - (x(30)/C15 + (x(25) - x(31))*R1) - x(25*RL13));
1/L13*(x(24) - (x(30)/C15 + (x(25) - x(31))*R1) - x(25)*RL13);
x(29) - x(27);
1/L14*(x(26)/C13 - x(27)*Rudd - Udd);
x(31);
1/L15*(x(24) - x(26)/C13);
x(25) - x(31);
1/L16*(x(30)/C15 + (x(25) - x(31))*R2 - x(28)/C14);
x(33);
1/L17*(x(34)/C17 + (x(23) - x(33))*R2 - x(32)/C16);
x(23) - x(33);
];
[t,sol] = ode15s(deq,[0 100e-6],zeros(1,34));
figure(1)
plot(t,sol)
.

3 个评论

Oh god. You sir are genius...as always :)
Also just in case that I encounter it again, how did you spot it? By stepping into ode solver?
Oh god. You sir are genius...as always :)
Thank you!
Also just in case that I encounter it again, how did you spot it? By stepping into ode solver?’
No. I just looked for subscript references that didn’t look right, and since I wasn’t concerned with anything else (syntax and other problems), it was relatively easy to detect.
I did it here in the online Run feature, however doing it offline on my computer could have thrown a line-specific error that would have made it easier to detect. Had I kept getting errors of various types, I might have done that. Fortunately, that wasn’t nbecessary.
.

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品

版本

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by