Matlab:在拟合曲线时在 parfor 中处理 for 循环中断

Matlab: Working for-loop breaks in parfor while fitting curves

希望您能帮助我解决这个错误。我正在 运行 编写一些代码以使用交叉验证机制将曲线拟合到年龄。我将曲线拟合迭代 1000 次以评估最佳拟合。

我将我的模型定义为:

linear_ft = fittype({'x', '1'});
monotonic_ft= fittype({'-1/x', '1'});
quadratic_ft = fittype('poly2'); 

然后我运行以下内容迭代不同的数据拆分选择,记录曲线拟合后的残差...

Data = randn(4,300,10,10);
Ages = randn(300,1);

for thisDim1 = 1:4
    for thisDim2 = 1:10
        for thisDim3 = 1:10
            for nIts = 1:1000
                RandomOrder = randperm(300,300);
                Fit_Subs = RandomOrder(1:length(Ages)/2); % Take random subs to fit to
                Test_Subs = RandomOrder(length(Ages)/2+1:300); % Take random subs to test fit to

                Fit_Data = squeeze(Data(thisDim1,Fit_Subs,thisDim2,thisDim3)); % Take data to fit to
                Test_Data = squeeze(Data(thisDim1,Test_Subs,thisDim2,thisDim3)); % Take data to test fit

                Fit_Ages = Ages;
                Fit_Ages(Fit_Subs) = []; %Take ages of Fit Subs only
                Test_Ages = Ages;
                Test_Ages(Test_Subs) = []; % Take ages of Test Subs only

                Nsubs = (length(Ages)/2);

                % Model Data using Curves
                fFit_Lin = fit(Fit_Ages,Fit_Data',linear_ft);
                fFit_Mon = fit(Fit_Ages,Fit_Data',monotonic_ft);
                fFit_Quad = fit(Fit_Ages,Fit_Data',quadratic_ft);

                % Fit Modelled Data to Test Data
                tFit_Lin = fFit_Lin(Test_Ages);
                tFit_Mon = fFit_Mon(Test_Ages);
                tFit_Quad = fFit_Quad(Test_Ages);

                % Calculate Median Residual
                Lin_Med_Resid(nIts) = median(tFit_Lin - Test_Data');
                Mon_Med_Resid(nIts) = median(tFit_Mon - Test_Data');
                Quad_Med_Resid(nIts) = median(tFit_Quad - Test_Data');

            end
        end
    end
end

如果你 运行 将第四个循环 (nIts) 作为 for 循环,它将 运行。如果你 运行 它作为一个 parfor 循环它不会说明错误:

Error using fit>iFit (line 264) The name 'lower' is not an accessible property for an instance of class 'llsqoptions'.

Error in fit (line 108) [fitobj, goodness, output, convmsg] = iFit( xdatain, ydatain, fittypeobj, ...

有人知道如何解决这个问题吗?如果有任何建议,我将不胜感激!!

谢谢,

尝试重新启动 MATLAB 或键入 clear all 以查看它是否为您解决了问题。

您的代码适合我,但根据我的经验,并行工具箱可能有点挑剔。