2017-08-30 8 views
1

このエラーで私を助けることができるかもしれません。私は、クロスバリデーション体制を使って、年齢に応じて曲線を適合させるためのコードをいくつか実行しています。最高のフィットを評価するために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, ...

これを修正する方法はありますか?私はどんなアドバイスにも大変感謝しています!

おかげで、

ベン

+0

Strange。あなたのコードは私のために働く。 – informaton

+0

ああ - それはparforとして動作しますか? – Ben

+0

はい、parforとして。あなたのカーブフィッティングツールボックスとパラレル処理ツールボックスがここで矛盾しているのはなぜですか?あなたは良い措置のために 'すべてをクリアするようにすることができます。 – informaton

答えて

1

MATLABを再起動するか、それはあなたのために物事をクリアかどうかを確認するためにclear allを入力してみてください。

あなたのコードは私には役立ちますが、私の経験ではパラレルツールボックスはちょっと厄介なことがあります。

+0

ありがとう@情報私はすべてをクリアしたと思ったが、明らかに私はなかった。私は、カーブフィッティングやパラレルツールボックスの使用を望む人にとって便利なので、投稿を残しておきます。再度、感謝します。 – Ben

関連する問題