为什么MATLAB中的ODE求解器弹出内存不足,甚至矩阵也不大?

时间:2014-01-28 04:31:55

标签: matlab solver ode

我尝试解决基于ODE的模拟问题。 但是我内存不足的问题,有人可以帮我解决这个问题,有点暗示吗?

警告:矩阵接近单一或严重缩放。结果可能

不准确的。 RCOND = 1.453788e-16。   在207的ode23s   在77的tr_ode

警告:Matrix的工作精度非常高。   在207的ode23s   在77的tr_ode

内存不足。输入HELP MEMORY以获取选项。

odenumjac出错(第127行)   ydel = y(:,ones(1,ny))+ diag(del);

ode23s出错(第224行)   [dfdy,Joptions.fac,nF] = odenumjac(odeFcn,{t,y,odeArgs {:}},f0,Joptions);

tr_pdn_ode_matlab_v中的错误(第77行) [t,x] = ode23s(@ f,[0,sim_param.end_time],电压,选项);

矩阵稀疏且只有45784 * 45784

我的机器是64位和12GB内存。 MATLAB 2012b。

代码快照:

...
options  = odeset('Mass', M); % M is a sparse matrix
[t,x] = ode45(@f, [0,end_time ], v, options); 
% end_time = 10^-8 , v is init. condition for f. 
... 
function out = f( t , y)
    out = -Gl *y ; % Gl is a sparse matrix
end

1 个答案:

答案 0 :(得分:0)

这不是一个小矩阵。如果以非稀疏方式存储,则为16GB。 ODENUMJAC应该以不破坏稀疏存储的方式实现,但可能是某些小错误尝试以完整格式存储它。它也可能是存储得恰到好处,但比你意识到的要大得多。