このエラーで私を助けることができるかもしれません。私は、クロスバリデーション体制を使って、年齢に応じて曲線を適合させるためのコードをいくつか実行しています。最高のフィットを評価するために1000回カーブフィッティングを繰り返します。Matlab:フィッティングカーブ中にparforのforループを処理する
私のように私のモデルを定義します。私は、カーブフィット、次の残差を記録し、データ分割の異なる選択を反復処理するために、以下を実行し
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
あなたの場合それを実行するfor-loopとして4番目のループ(nIts)で実行します。 parfor-loopとして実行した場合、エラーは表示されません。
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, ...
これを修正する方法はありますか?私はどんなアドバイスにも大変感謝しています!
おかげで、
ベン
Strange。あなたのコードは私のために働く。 – informaton
ああ - それはparforとして動作しますか? – Ben
はい、parforとして。あなたのカーブフィッティングツールボックスとパラレル処理ツールボックスがここで矛盾しているのはなぜですか?あなたは良い措置のために 'すべてをクリアするようにすることができます。 – informaton