How to resolve "Out of memory" error?? please look into the following code

2 vues (au cours des 30 derniers jours)
Manish Kumar
Manish Kumar le 30 Août 2024
Commenté : Manish Kumar le 5 Sep 2024
clear all
clc
tspan = [0 2];
y01 = 0.1*ones(36,1);
y0 =[10 2.5 0 1 0.00025 0 0 0 0 (11.4*380/10000) -(5.5*380/10000) 380.8/380 0 (11.4*380/10000) (0.4*380/10000)...
10 2.5 (1.9e-3) 1 1 0 0 0 0 (11.4*380/10000) -(5.5*380/10000) 380.8/380 0 (11.4*380/10000) (0.4*380/10000)...
3.8*380/1000 0.4*380/10000 7.6*380/10000 1.6*380/10000 22.8*380/10000 0.8*380/10000];
options = odeset('RelTol',1e-4,'AbsTol',1e-6);
[t, y] = ode23tb(@sysMG2, tspan, y01, options);
save MGinitialcond.mat
function dydt = sysMG2(t, y)
i_dc1=y(1); v_dc1=y(2);delta1=y(3); P1=y(4); Q1=y(5); phi_d1=y(6); phi_q1=y(7); gamma_d1=y(8); gamma_q1=y(9);i_ld1=y(10);...
i_lq1=y(11); vo_d1=y(12); vo_q1=y(13); io_d1=y(14); io_q1=y(15);
i_dc2=y(16); v_dc2=y(17);delta2=y(18); P2=y(19); Q2=y(20); phi_d2=y(21); phi_q2=y(22); gamma_d2=y(23); gamma_q2=y(24);i_ld2=y(25); i_lq2=y(26); vo_d2=y(27); vo_q2=y(28); io_d2=y(29); io_q2=y(30);
i_lineD1=y(31);i_lineQ1=y(32);i_lineD2=y(33);i_lineQ2=y(34);
i_loadD1=y(35);i_loadQ1=y(36);
di_dc1dt=8790923519632281/8796093022208 - (9001905684103455*v_dc1)/9007199254740992 - (7201524547282765*i_dc1)/144115188075855872;
dv_dc1dt=(900970629561481*i_dc1)/4503599627370496 - (562949953421312*P1)/(2813966534836365*v_dc1);
ddelta1dt=200*pi;
dP1dt=(3141*io_d1*vo_d1)/100 - (3141*P1)/100 + (3141*io_q1*vo_q1)/100;
dQ1dt=(3141*io_q1*vo_d1)/100 - (3141*io_d1*vo_q1)/100 - (3141*Q1)/100;
dphi_d1dt=380 - vo_d1 - (13*Q1)/10000;
dphi_q1dt=-vo_q1;
dgamma_d1dt=(3*io_d1)/4 - i_ld1 - (4796153459164483*Q1)/73786976294838206464 + 390*phi_d1 - vo_d1/20 - (pi*vo_q1)/200 + 19;
dgamma_q1dt=(3*io_q1)/4 - i_lq1 + 390*phi_q1 - vo_q1/20 + (pi*vo_d1)/200;
di_ld1dt=(13300*v_dc1)/81 - vo_d1*((35*v_dc1)/81 + 20000/27) - (91*Q1*v_dc1)/162000 + (3200000*gamma_d1*v_dc1)/243 + (175*io_d1*v_dc1)/27 + (91000*phi_d1*v_dc1)/27 - i_lq1*((pi*v_dc1)/9 - 31367/100) - i_ld1*((700*v_dc1)/81 + 2000/27) - (7*pi*v_dc1*vo_q1)/162;
di_lq1dt=(3200000*gamma_q1*v_dc1)/243 - vo_q1*((35*v_dc1)/81 + 20000/27) + (175*io_q1*v_dc1)/27 + (91000*phi_q1*v_dc1)/27 + i_ld1*((pi*v_dc1)/9 - 31367/100) - i_lq1*((700*v_dc1)/81 + 2000/27) + (7*pi*v_dc1*vo_d1)/162;
dvo_d1dt=20000*i_ld1 - 20000*io_d1 + (31367*vo_q1)/100;
dvo_q1dt=20000*i_lq1 - 20000*io_q1 - (31367*vo_d1)/100;
dio_d1dt=(31367*io_q1)/100 + (20000*vo_d1)/7 - io_d1*((20000000*cos(delta1)^2)/7 + (20000000*sin(delta1)^2)/7 + 600/7) + (20000000*i_lineD1*cos(delta1))/7 + (20000000*i_lineQ1*sin(delta1))/7;
dio_q1dt=(20000*vo_q1)/7 - (31367*io_d1)/100 - io_q1*((20000000*cos(delta1)^2)/7 + (20000000*sin(delta1)^2)/7 + 600/7) + (20000000*i_lineQ1*cos(delta1))/7 - (20000000*i_lineD1*sin(delta1))/7;
di_dc2dt=8790923519632281/8796093022208 - (9001905684103455*v_dc2)/9007199254740992 - (7201524547282765*i_dc2)/144115188075855872;
dv_dc2dt=(900970629561481*i_dc2)/4503599627370496 - (562949953421312*P2)/(2813966534836365*v_dc2);
dde2ta1dt=(6935975771714791*P1)/73786976294838206464 - (6935975771714791*P2)/73786976294838206464 + 200*pi;
dP2dt=(3141*io_d2*vo_d2)/100 - (3141*P2)/100 + (3141*io_q2*vo_q2)/100;
dQ2dt=(3141*io_q2*vo_d2)/100 - (3141*io_d2*vo_q2)/100 - (3141*Q2)/100;
dphi_d2dt=380 - vo_d2 - (13*Q2)/10000;
dphi_q2dt=-vo_q2;
dgamma_d2dt=(3*io_d2)/4 - i_ld2 - (4796153459164483*Q2)/73786976294838206464 + 390*phi_d2 - vo_d2/20 - (pi*vo_q2)/200 + 19;
dgamma_q2dt=(3*io_q2)/4 - i_lq2 + 390*phi_q2 - vo_q2/20 + (pi*vo_d2)/200;
di_ld2dt=(13300*v_dc2)/81 - vo_d2*((35*v_dc2)/81 + 20000/27) - (91*Q2*v_dc2)/162000 + (3200000*gamma_d2*v_dc2)/243 + (175*io_d2*v_dc2)/27 + (91000*phi_d2*v_dc2)/27 - i_lq2*((pi*v_dc2)/9 - 31367/100) - i_ld2*((700*v_dc2)/81 + 2000/27) - (7*pi*v_dc2*vo_q2)/162;
di_lq2dt=(3200000*gamma_q2*v_dc2)/243 - vo_q2*((35*v_dc2)/81 + 20000/27) + (175*io_q2*v_dc2)/27 + (91000*phi_q2*v_dc2)/27 + i_ld2*((pi*v_dc2)/9 - 31367/100) - i_lq2*((700*v_dc2)/81 + 2000/27) + (7*pi*v_dc2*vo_d2)/162;
dvo_d2dt=20000*i_ld2 - 20000*io_d2 + (31367*vo_q2)/100;
dvo_q2dt=20000*i_lq2 - 20000*io_q2 - (31367*vo_d2)/100;
dio_d2dt=(31367*io_q2)/100 + (20000*vo_d2)/7 - io_d2*((20000000*cos(delta2)^2)/7 + (20000000*sin(delta2)^2)/7 + 600/7) + (20000000*i_lineD2*cos(delta2))/7 + (20000000*i_lineQ2*sin(delta2))/7;
dio_q2dt=(20000*vo_q2)/7 - (31367*io_d2)/100 - io_q2*((20000000*cos(delta2)^2)/7 + (20000000*sin(delta2)^2)/7 + 600/7) + (20000000*i_lineQ2*cos(delta2))/7 - (20000000*i_lineD2*sin(delta2))/7;
di_lineD1dt=(6746518852261009*i_lineD2)/2147483648 - (6748070551597029*i_lineD1)/2147483648 + (31367*i_lineQ1)/100 + (6746518852261009*io_d1*cos(delta1))/2147483648 - (6746518852261009*io_d2*cos(delta2))/2147483648 - (6746518852261009*io_q1*sin(delta1))/2147483648 + (6746518852261009*io_q2*sin(delta2))/2147483648;
di_lineQ1dt=(6746518852261009*i_lineQ2)/2147483648 - (6748070551597029*i_lineQ1)/2147483648 - (31367*i_lineD1)/100 + (6746518852261009*io_q1*cos(delta1))/2147483648 - (6746518852261009*io_q2*cos(delta2))/2147483648 + (6746518852261009*io_d1*sin(delta1))/2147483648 - (6746518852261009*io_d2*sin(delta2))/2147483648;
di_lineD2dt=(4652771622248973*i_lineD1)/8589934592 - (4652771622248973*i_loadD1)/8589934592 + (2325571576090593*i_lineD2)/4294967296 + (4652771622248973*i_lineQ1)/8589934592 + (31367*i_lineQ2)/100 - (4652771622248973*io_q1*cos(delta1))/8589934592 - (4652771622248973*io_d1*sin(delta1))/8589934592;
di_lineQ2dt=(4652771622248973*i_lineQ1)/8589934592 - (4652771622248973*i_loadQ1)/8589934592 - (31367*i_lineD2)/100 + (4651957387215079*i_lineQ2)/4294967296 - (4652771622248973*io_q2*cos(delta2))/8589934592 - (4652771622248973*io_d2*sin(delta2))/8589934592;
di_loadD1dt=1000000000000*i_lineD1 - (8396799999999999*i_loadD1)/8192 + 1000000000000*i_lineD2 + (31367*i_loadQ1)/100;
di_loadQ1dt=1000000000000*i_lineQ1 - (8396799999999999*i_loadQ1)/8192 - (31367*i_loadD1)/100 + 1000000000000*i_lineQ2;
dydt=[di_dc1dt;dv_dc1dt;ddelta1dt;dP1dt;dQ1dt;dphi_d1dt;dphi_q1dt;dgamma_d1dt;dgamma_q1dt;di_ld1dt;di_lq1dt;dvo_d1dt;dvo_q1dt;dio_d1dt;dio_q1dt;di_dc2dt;dv_dc2dt;dde2ta1dt;dP2dt;
dQ2dt;dphi_d2dt;dphi_q2dt;dgamma_d2dt;dgamma_q2dt;di_ld2dt;di_lq2dt;dvo_d2dt;dvo_q2dt;dio_d2dt;dio_q2dt;di_lineD1dt;di_lineQ1dt;di_lineD2dt;di_lineQ2dt;di_loadD1dt;di_loadQ1dt];
end
Error: -
Out of memory.
Error in ode23tb (line 680)
yout = [yout, zeros(neq,chunk)]; %#ok<AGROW>
Error in dydt_actual (line 9)
[t, y] = ode23tb(@sysMG2, tspan, y01, options);
  3 commentaires
Manish Kumar
Manish Kumar le 2 Sep 2024
When I run it for 20 ms, the following error occurs:
Error using horzcat. Requested 36*29032000 (7.8GB) array exceeds maximum array size...
Torsten
Torsten le 2 Sep 2024
Look at @Walter Roberson 's answer: You must limit the number of output times.

Connectez-vous pour commenter.

Réponse acceptée

Sam Chak
Sam Chak le 4 Sep 2024
From the simulation below, you can observe when the solutions begin to blow up. Do you really intend to log the unbounded, arbitrarily large values? If they are meaningful for your analysis, then you will need to increase the memory of your computer to store those values.
tend = [2e-11, 2e-6 2e-4];
y01 = 0.1*ones(36,1);
% y0 =[10 2.5 0 1 0.00025 0 0 0 0 (11.4*380/10000) -(5.5*380/10000) 380.8/380 0 (11.4*380/10000) (0.4*380/10000)...
% 10 2.5 (1.9e-3) 1 1 0 0 0 0 (11.4*380/10000) -(5.5*380/10000) 380.8/380 0 (11.4*380/10000) (0.4*380/10000)...
% 3.8*380/1000 0.4*380/10000 7.6*380/10000 1.6*380/10000 22.8*380/10000 0.8*380/10000];
options = odeset('RelTol', 1e-4, 'AbsTol', 1e-6);
for i = 1:length(tend)
[t, y] = ode23tb(@sysMG2, [0 tend(i)], y01, options);
figure(i)
plot(t, y), grid on, grid minor, xlabel('t'), xlim([0 tend(i)])
end
function dydt = sysMG2(t, y)
i_dc1 = y(1);
v_dc1 = y(2);
delta1 = y(3);
P1 = y(4);
Q1 = y(5);
phi_d1 = y(6);
phi_q1 = y(7);
gamma_d1 = y(8);
gamma_q1 = y(9);
i_ld1 = y(10);
i_lq1 = y(11);
vo_d1 = y(12);
vo_q1 = y(13);
io_d1 = y(14);
io_q1 = y(15);
i_dc2 = y(16);
v_dc2 = y(17);
delta2 = y(18);
P2 = y(19);
Q2 = y(20);
phi_d2 = y(21);
phi_q2 = y(22);
gamma_d2 = y(23);
gamma_q2 = y(24);
i_ld2 = y(25);
i_lq2 = y(26);
vo_d2 = y(27);
vo_q2 = y(28);
io_d2 = y(29);
io_q2 = y(30);
i_lineD1 = y(31);
i_lineQ1 = y(32);
i_lineD2 = y(33);
i_lineQ2 = y(34);
i_loadD1 = y(35);
i_loadQ1 = y(36);
di_dc1dt = 8790923519632281/8796093022208 - (9001905684103455*v_dc1)/9007199254740992 - (7201524547282765*i_dc1)/144115188075855872;
dv_dc1dt = (900970629561481*i_dc1)/4503599627370496 - (562949953421312*P1)/(2813966534836365*v_dc1);
ddelta1dt = 200*pi;
dP1dt = (3141*io_d1*vo_d1)/100 - (3141*P1)/100 + (3141*io_q1*vo_q1)/100;
dQ1dt = (3141*io_q1*vo_d1)/100 - (3141*io_d1*vo_q1)/100 - (3141*Q1)/100;
dphi_d1dt = 380 - vo_d1 - (13*Q1)/10000;
dphi_q1dt = -vo_q1;
dgamma_d1dt = (3*io_d1)/4 - i_ld1 - (4796153459164483*Q1)/73786976294838206464 + 390*phi_d1 - vo_d1/20 - (pi*vo_q1)/200 + 19;
dgamma_q1dt = (3*io_q1)/4 - i_lq1 + 390*phi_q1 - vo_q1/20 + (pi*vo_d1)/200;
di_ld1dt = (13300*v_dc1)/81 - vo_d1*((35*v_dc1)/81 + 20000/27) - (91*Q1*v_dc1)/162000 + (3200000*gamma_d1*v_dc1)/243 + (175*io_d1*v_dc1)/27 + (91000*phi_d1*v_dc1)/27 - i_lq1*((pi*v_dc1)/9 - 31367/100) - i_ld1*((700*v_dc1)/81 + 2000/27) - (7*pi*v_dc1*vo_q1)/162;
di_lq1dt = (3200000*gamma_q1*v_dc1)/243 - vo_q1*((35*v_dc1)/81 + 20000/27) + (175*io_q1*v_dc1)/27 + (91000*phi_q1*v_dc1)/27 + i_ld1*((pi*v_dc1)/9 - 31367/100) - i_lq1*((700*v_dc1)/81 + 2000/27) + (7*pi*v_dc1*vo_d1)/162;
dvo_d1dt = 20000*i_ld1 - 20000*io_d1 + (31367*vo_q1)/100;
dvo_q1dt = 20000*i_lq1 - 20000*io_q1 - (31367*vo_d1)/100;
dio_d1dt = (31367*io_q1)/100 + (20000*vo_d1)/7 - io_d1*((20000000*cos(delta1)^2)/7 + (20000000*sin(delta1)^2)/7 + 600/7) + (20000000*i_lineD1*cos(delta1))/7 + (20000000*i_lineQ1*sin(delta1))/7;
dio_q1dt = (20000*vo_q1)/7 - (31367*io_d1)/100 - io_q1*((20000000*cos(delta1)^2)/7 + (20000000*sin(delta1)^2)/7 + 600/7) + (20000000*i_lineQ1*cos(delta1))/7 - (20000000*i_lineD1*sin(delta1))/7;
di_dc2dt = 8790923519632281/8796093022208 - (9001905684103455*v_dc2)/9007199254740992 - (7201524547282765*i_dc2)/144115188075855872;
dv_dc2dt = (900970629561481*i_dc2)/4503599627370496 - (562949953421312*P2)/(2813966534836365*v_dc2);
dde2ta1dt = (6935975771714791*P1)/73786976294838206464 - (6935975771714791*P2)/73786976294838206464 + 200*pi;
dP2dt = (3141*io_d2*vo_d2)/100 - (3141*P2)/100 + (3141*io_q2*vo_q2)/100;
dQ2dt = (3141*io_q2*vo_d2)/100 - (3141*io_d2*vo_q2)/100 - (3141*Q2)/100;
dphi_d2dt = 380 - vo_d2 - (13*Q2)/10000;
dphi_q2dt = -vo_q2;
dgamma_d2dt = (3*io_d2)/4 - i_ld2 - (4796153459164483*Q2)/73786976294838206464 + 390*phi_d2 - vo_d2/20 - (pi*vo_q2)/200 + 19;
dgamma_q2dt = (3*io_q2)/4 - i_lq2 + 390*phi_q2 - vo_q2/20 + (pi*vo_d2)/200;
di_ld2dt = (13300*v_dc2)/81 - vo_d2*((35*v_dc2)/81 + 20000/27) - (91*Q2*v_dc2)/162000 + (3200000*gamma_d2*v_dc2)/243 + (175*io_d2*v_dc2)/27 + (91000*phi_d2*v_dc2)/27 - i_lq2*((pi*v_dc2)/9 - 31367/100) - i_ld2*((700*v_dc2)/81 + 2000/27) - (7*pi*v_dc2*vo_q2)/162;
di_lq2dt = (3200000*gamma_q2*v_dc2)/243 - vo_q2*((35*v_dc2)/81 + 20000/27) + (175*io_q2*v_dc2)/27 + (91000*phi_q2*v_dc2)/27 + i_ld2*((pi*v_dc2)/9 - 31367/100) - i_lq2*((700*v_dc2)/81 + 2000/27) + (7*pi*v_dc2*vo_d2)/162;
dvo_d2dt = 20000*i_ld2 - 20000*io_d2 + (31367*vo_q2)/100;
dvo_q2dt = 20000*i_lq2 - 20000*io_q2 - (31367*vo_d2)/100;
dio_d2dt = (31367*io_q2)/100 + (20000*vo_d2)/7 - io_d2*((20000000*cos(delta2)^2)/7 + (20000000*sin(delta2)^2)/7 + 600/7) + (20000000*i_lineD2*cos(delta2))/7 + (20000000*i_lineQ2*sin(delta2))/7;
dio_q2dt = (20000*vo_q2)/7 - (31367*io_d2)/100 - io_q2*((20000000*cos(delta2)^2)/7 + (20000000*sin(delta2)^2)/7 + 600/7) + (20000000*i_lineQ2*cos(delta2))/7 - (20000000*i_lineD2*sin(delta2))/7;
di_lineD1dt = (6746518852261009*i_lineD2)/2147483648 - (6748070551597029*i_lineD1)/2147483648 + (31367*i_lineQ1)/100 + (6746518852261009*io_d1*cos(delta1))/2147483648 - (6746518852261009*io_d2*cos(delta2))/2147483648 - (6746518852261009*io_q1*sin(delta1))/2147483648 + (6746518852261009*io_q2*sin(delta2))/2147483648;
di_lineQ1dt = (6746518852261009*i_lineQ2)/2147483648 - (6748070551597029*i_lineQ1)/2147483648 - (31367*i_lineD1)/100 + (6746518852261009*io_q1*cos(delta1))/2147483648 - (6746518852261009*io_q2*cos(delta2))/2147483648 + (6746518852261009*io_d1*sin(delta1))/2147483648 - (6746518852261009*io_d2*sin(delta2))/2147483648;
di_lineD2dt = (4652771622248973*i_lineD1)/8589934592 - (4652771622248973*i_loadD1)/8589934592 + (2325571576090593*i_lineD2)/4294967296 + (4652771622248973*i_lineQ1)/8589934592 + (31367*i_lineQ2)/100 - (4652771622248973*io_q1*cos(delta1))/8589934592 - (4652771622248973*io_d1*sin(delta1))/8589934592;
di_lineQ2dt = (4652771622248973*i_lineQ1)/8589934592 - (4652771622248973*i_loadQ1)/8589934592 - (31367*i_lineD2)/100 + (4651957387215079*i_lineQ2)/4294967296 - (4652771622248973*io_q2*cos(delta2))/8589934592 - (4652771622248973*io_d2*sin(delta2))/8589934592;
di_loadD1dt = 1000000000000*i_lineD1 - (8396799999999999*i_loadD1)/8192 + 1000000000000*i_lineD2 + (31367*i_loadQ1)/100;
di_loadQ1dt = 1000000000000*i_lineQ1 - (8396799999999999*i_loadQ1)/8192 - (31367*i_loadD1)/100 + 1000000000000*i_lineQ2;
dydt = [di_dc1dt;
dv_dc1dt;
ddelta1dt;
dP1dt;
dQ1dt;
dphi_d1dt;
dphi_q1dt;
dgamma_d1dt;
dgamma_q1dt;
di_ld1dt;
di_lq1dt;
dvo_d1dt;
dvo_q1dt;
dio_d1dt;
dio_q1dt;
di_dc2dt;
dv_dc2dt;
dde2ta1dt;
dP2dt;
dQ2dt;
dphi_d2dt;
dphi_q2dt;
dgamma_d2dt;
dgamma_q2dt;
di_ld2dt;
di_lq2dt;
dvo_d2dt;
dvo_q2dt;
dio_d2dt;
dio_q2dt;
di_lineD1dt;
di_lineQ1dt;
di_lineD2dt;
di_lineQ2dt;
di_loadD1dt;
di_loadQ1dt];
end

Plus de réponses (1)

Walter Roberson
Walter Roberson le 30 Août 2024
If you use something like
tspan = linspace(0, 2, 1001);
then it should not run out of memory.
It is running out of memory trying to store the dy results of an oscillating function.
  3 commentaires
Torsten
Torsten le 3 Sep 2024
Modifié(e) : Torsten le 3 Sep 2024
We might be able to help if you have technical problems/syntax errors with MATLAB, but you are the one who is responsible for the equations to be solved. And the long runtime is a problem inherent to your equations ...
Walter Roberson
Walter Roberson le 3 Sep 2024
I would experiment with something like tspan = [0 0.01] to get an idea of how the system reacts.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by