KarryMa 2022-07-11 16:53 采纳率: 100%
浏览 180
已结题

matlab报错 内存不足

问题遇到的现象和发生背景

The error description is as follows:

Error using full request 68813x68813 (35.3GB) array to exceed the preset maximum array size Creating an array larger than this limit can take a long time and result in no response from MATLAB for more information, see Array Size Limits or Default Items panel.

Error schurmat_sblk (line 35) if issparse(schur); schur = full(schur); end;

The function file schurmat_sblk is a file in cvx\sdpt3\Solver,

我的矩阵是有结构的,稀疏/低秩,还有别的解决方案吗?

问题相关代码,请勿粘贴截图

The value you may need are: n=8; d=2^n;m=(d^2)0.05;the size of Pauli is md^2, it's a sparse matrix. The size of y is m*1;
function [rhoE] = test_compressed_cc(n,~,m,Pauli,y)

d = 2^n;
cvx_begin sdp quiet
% how to define the variable ?
variable rhoE(d,d) hermitian;
rhoE == hermitian_semidefinite(d);
% ||x||_tr=tr(sqrt(x^\daggerx))=tr(sqrt(x^2))=Tr(x)
minimize(trace(rhoE));
subject to
(d/m)*(Pauli * vec(rhoE)) == y;
rhoE >= 0;
cvx_end
end

运行结果及报错内容

内存不足。

出错 schurmat_sblk (line 35)
if issparse(schur); schur = full(schur); end;

出错 HKMpred (line 60)
schur = schurmat_sblk(blk,At,par,schur,p,X,par.Zinv);

出错 sqlpmain (line 342)
HKMpred(blk,At,par,rp,Rd,sigmu,X,Z,invZchol);

出错 sqlp (line 242)
sqlpmain(blk3,At3,C3,b,par,parbarrier3,X03,y0,Z03);

出错 cvx_run_solver (line 50)
[ varargout{1:nargout} ] = sfunc( inputs{:} );

出错 cvx_sdpt3>solve (line 362)
[ obj, xx, y, zz, info ] = cvx_run_solver( @sqlp, blk, Avec, Cvec, b, OPTIONS, 'obj', 'x', 'y', 'z',
'info', settings, 5 ); %#ok

出错 cvxprob/solve (line 429)
[ x, status, tprec, iters, y ] = shim.solve( At, b, c, cones, quiet, prec, solv.settings,
eargs{:} );

出错 cvx_end (line 88)
solve( prob );

出错 Solve_CC_rhoE (line 22)
cvx_end

出错 test_8q_m (line 48)
[rhoE,noiseE] = Solve_CC_rhoE(n,r,m,s,Pauli,y,noiseT);

我的解答思路和尝试过的方法

尝试修改 cvx包里的 schurmat_sblk 文件,可以保存,但似乎运行会出问题,看不懂文件的代码;用足够大内存的服务器运行出现同样报错,不知道原因何在。

我想要达到的结果

代码能够顺利运行,解决内存不足问题

  • 写回答

1条回答 默认 最新

  • 鹅毛在路上了 Matlab领域优质创作者 2022-07-11 22:19
    关注

    感觉没有那么麻烦,就是因为 schur 这个矩阵太大了存不下吧。他提示你“计算中产生的68813x68813(占35.3GB临时内存)大小的方阵,超过了预设矩阵的最大范围,创建大于此限制的矩阵会消耗很长时间并导致MATLAB没有响应从而报错”,
    必须要这么大的数据量吗,能不能考虑取特征值压缩一下,或者不要一次迭代运算出这么大量?分块计算。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月22日
  • 已采纳回答 7月14日
  • 修改了问题 7月11日
  • 创建了问题 7月11日

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上