Matlab 倍频程:内存不足或维度太大,无法容纳倍频程';s索引类型

Matlab 倍频程:内存不足或维度太大,无法容纳倍频程';s索引类型,matlab,octave,Matlab,Octave,我是八度音阶新手,我使用的是版本4.2.1.,32位。当我尝试使用比cca更大的矩阵操作时,会出现这个错误。5000x5000。对于较小的矩阵,它工作得很好。有没有办法增加这个允许的索引类型 我的代码: function [dt,F,u0,n1u]=solve_diff_sec_ord() %n odd!!!! n = input('Input number: '); #slice the interval[-1,1] to n+1 pieces A = []; for i=1:1:n a

我是八度音阶新手,我使用的是版本4.2.1.,32位。当我尝试使用比cca更大的矩阵操作时,会出现这个错误。5000x5000。对于较小的矩阵,它工作得很好。有没有办法增加这个允许的索引类型

我的代码:

function [dt,F,u0,n1u]=solve_diff_sec_ord()
%n odd!!!!
n = input('Input number: '); #slice the interval[-1,1] to n+1 pieces
A = [];
for i=1:1:n 
  a = zeros(1,n+2);
  a(1,i)=1;
  a(1,i+1)=-2;
  a(1,i+2)=1;
  A = [A;a];  
end
B = A(:,[2:n+1]);
dt=det(B);
F=norm(B,'fro');
b=zeros(1,n);
h=2/(n+1);
for i=1:1:n
  if i <= (n+1)/2
    b(1,i)= (-1+i*h^2)+1;
  else
    b(1,i)= -(-1+i*h^2)+1;
  end
end
b=transpose(b);
x=linsolve(B,b,struct()); #basically solving D.E.
u0=x((n+1)/2,1);    
n1u=norm(x,1); 
函数[dt,F,u0,n1u]=solve_diff_sec_ord() %n奇怪!!!! n=输入(“输入编号”)#将间隔[-1,1]切成n+1片 A=[]; 对于i=1:1:n a=零(1,n+2); a(1,i)=1; a(1,i+1)=-2; a(1,i+2)=1; A=[A;A]; 结束 B=A(:,[2:n+1]); dt=det(B); F=范数(B,'fro'); b=零(1,n); h=2/(n+1); 对于i=1:1:n
如果我出错:内存不足或维度太大,不适合倍频程的索引类型

根据我的经验,如果你做了一些愚蠢的事情,导致被“几乎”0除法,或者沿着这些线做一些事情,导致“接近”无穷大等,尤其是如果你使用这些数字创建特定大小的数组,导致对倍频程的请求,以创建一个接近无限大小的数组等,这显然是无法做到的,因为它超过了维度允许的大小。我严重怀疑这是一个“可用内存”问题(5000x5000双倍矩阵大约需要200 Mb)。尝试调试,我敢打赌错误发生在for循环中。也可以在这里看到Carandraugh的评论:谢谢你的意见!虽然我使用Thomas的三对角矩阵算法成功地解决了这个问题,但我仍然想弄清这个问题的根源。