Matlab 倍频程:内存不足或维度太大,无法容纳倍频程';s索引类型
我是八度音阶新手,我使用的是版本4.2.1.,32位。当我尝试使用比cca更大的矩阵操作时,会出现这个错误。5000x5000。对于较小的矩阵,它工作得很好。有没有办法增加这个允许的索引类型 我的代码: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
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的三对角矩阵算法成功地解决了这个问题,但我仍然想弄清这个问题的根源。