Matlab 当'clear'不可用时,如何强制释放物理内存';不行?
与拟议副本的差异: 首先,我想说的是,我并不是说释放一个变量的物理内存,所以在本例中,Matlab 当'clear'不可用时,如何强制释放物理内存';不行?,matlab,memory,memory-management,memory-leaks,Matlab,Memory,Memory Management,Memory Leaks,与拟议副本的差异: 首先,我想说的是,我并不是说释放一个变量的物理内存,所以在本例中,clear、close或pack命令不起作用。在我的例子中,我的计算机的物理内存用完了,尽管在运行我的MATLAB脚本(不太长)几次之后使用了它们 我在一台有8Gb内存的windows计算机上使用MatlabR2016B。正如我之前所说,几次之后,我的计算机的物理内存开始耗尽,因此保持代码运行的唯一方法是重新启动程序(当我想要运行脚本时,我不能一直这样做) 全部清除 clc 全部关闭 %拿督恩特拉达: 长=60
clear
、close
或pack
命令不起作用。在我的例子中,我的计算机的物理内存用完了,尽管在运行我的MATLAB脚本(不太长)几次之后使用了它们
我在一台有8Gb内存的windows计算机上使用MatlabR2016B。正如我之前所说,几次之后,我的计算机的物理内存开始耗尽,因此保持代码运行的唯一方法是重新启动程序(当我想要运行脚本时,我不能一直这样做)
全部清除
clc
全部关闭
%拿督恩特拉达:
长=60;%长维加(米)
p_uni=1;%Carga repartida制服(kN/m)
n_除法=1000;%维加区第一分区
H=3;%分量水平极值
lon_barra=长/n_分区;
a=长;
P_y=P_uni*lon_barra;
%Inicio计划:
如果REM(n*除以1,2)=0%,则为Furras,FurZas表示
部队(1:((1师)/2))=((1师)/2):-1:1)*;
y_部队((n_师-1)/2)+1:n_师-1)=(1:1:(n_师-1)/2)*P_-y;
除此之外,还有一种方法,
y_力(n_划分)=P_y/2;
y部队(1:n师/2)=(n师/2-0.5):-1:0.5)*Py;
y_部队(n_师/2+1:n_师)=(0.5:1:n_师/2)*P_-y;
结束
%FurZas SOBRE NODOS接口
如果rem(n_除法-1,2)==0
N=一(1,N_第1部分);
阿尔法=一(1,n_分区-1);
对于i=1:n_第1部分
alfa(i)=atan(y_力(i)/H);
N(i)=y_力(i)/sin(alfa(i));
结束
alfa_fin=零(1,n_除法);
alfa_-fin(1:长度(alfa)/2)=alfa(1:长度(alfa)/2);
阿尔法鳍(长度(阿尔法)/2+2:end)=阿尔法(长度(阿尔法)/2+1:end);
N_fin=一(1,N_划分);
N_fin(1:长度(N)/2)=N(1:长度(N)/2);
N_鳍(长度(N)/2+2:端)=N(长度(N)/2+1:端);
N_鳍(长度(N)/2+1)=H;
对于i=1:n_除法+1
如果我我怀疑你在这个问题上会得到比上一篇文章更好的提示。我想指出的一点是:
长期使用(仅限Windows系统)
在32位Microsoft®Windows®上,由于Windows内存管理器不会将某些类型和大小的块返回到操作系统,因此MATLAB的工作区可能会随着时间的推移而分裂。清除MATLAB工作区并不能解决此问题。您可以通过首先分配最大的变量来最小化问题。然而,这并不能解决工作空间的最终碎片化问题,例如,由于在数天或数周内持续使用MATLAB而导致的碎片化问题。唯一的解决办法是保存您的工作并重新启动MATLAB
pack
命令将所有变量保存到磁盘并重新加载,对这种情况没有帮助
我知道它说的是“32位”,但我打赌这在某种程度上也适用于64位系统
底线-您需要遵循文档的指导原则,特别注意预分配(在循环中增长y
)
您可以做的另一件事是分析内存使用情况,以查找一些内存泄漏
还有一个选项,您可以在R2016b上使用,它没有保存在RAM中。请向我们展示您代码的相关部分,否则没有人能够帮助您。请不要重复提问。如果您不同意将上一个问题标记为重复问题,请编辑原始问题并解释其不同之处。评论中甚至建议你这样做,而你却忽略了。投票结束。
clear all
clc
close all
%Datos entrada:
Long=60; %Longitud viga (m)
p_uni=1; %Carga repartida uniforme(kN/m)
n_division = 1000; %Numero divisiones de la viga
H = 3; %Componente horizontal en extremos
lon_barra=Long/n_division;
a = Long;
P_y = p_uni*lon_barra;
% Inicio programa:
if rem(n_division-1,2)==0 %Para el caso de numero par de fuerzas, que hace que el foco fin-comienzo de la representacion de fuerzas
y_force(1:((n_division-1)/2))=(((n_division-1)/2):-1:1)*P_y;
y_force(((n_division-1)/2)+1:n_division-1)=(1:1:(n_division-1)/2)*P_y;
else %Para el caso de numero impar de fuerzas,
y_force(n_division)=P_y/2;
y_force(1:n_division/2)=((n_division/2-0.5):-1:0.5)*P_y;
y_force(n_division/2+1:n_division)=(0.5:1:n_division/2)*P_y;
end
%Numero par de fuerzas sobre nodos internos
if rem(n_division-1,2)==0
N = ones(1,n_division-1);
alfa = ones(1,n_division-1);
for i=1:n_division-1
alfa(i) = atan(y_force(i)/H);
N(i) = y_force(i)/sin(alfa(i));
end
alfa_fin = zeros(1,n_division);
alfa_fin(1:length(alfa)/2)=alfa(1:length(alfa)/2);
alfa_fin(length(alfa)/2+2:end)=alfa(length(alfa)/2+1:end);
N_fin = ones(1,n_division);
N_fin(1:length(N)/2)=N(1:length(N)/2);
N_fin(length(N)/2+2:end)=N(length(N)/2+1:end);
N_fin(length(N)/2+1) = H;
for i=1:n_division+1
if i<=((n_division+1)/2)
if i==1;
y(i) = 0;
else
y(i) = tan(alfa_fin(i-1))*lon_barra+y(i-1);
end
else
y(i)=y(i-1)-tan(alfa_fin(i-1))*lon_barra;
end
end
%Numero impar de fuerzas sobre nodos internos
else
N = ones(1,n_division);
alfa = ones(1,n_division);
for i=1:n_division
alfa(i) = atan(y_force(i)/H);
N(i) = y_force(i)/sin(alfa(i));
end
y = ones(1,n_division+1);
for i=1:n_division+1
if i<=((n_division/2)+1)
if i==1;
y(i) = 0;
else
y(i) = tan(alfa(i-1))*lon_barra+y(i-1);
end
else
y(i)=y(i-1)-tan(alfa(i-1))*lon_barra;
end
end
end
%Densidad para altura objetivo:
q_final=H/lon_barra;