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;