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

조회 수: 2 (최근 30일)
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
Manish Kumar
Manish Kumar 2024년 9월 2일
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 2024년 9월 2일
Look at @Walter Roberson 's answer: You must limit the number of output times.

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

채택된 답변

Sam Chak
Sam Chak 2024년 9월 4일
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

추가 답변 (1개)

Walter Roberson
Walter Roberson 2024년 8월 30일
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
Torsten
Torsten 2024년 9월 3일
편집: Torsten 2024년 9월 3일
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 2024년 9월 3일
I would experiment with something like tspan = [0 0.01] to get an idea of how the system reacts.

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

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by