En espérant que vous pourrez m'aider avec cette erreur. Je cours du code pour adapter des courbes aux âges en utilisant un régime de validation croisé. Je répète l'ajustement de la courbe 1000 fois pour évaluer le meilleur ajustement.Matlab: Travailler pour des sauts de boucle dans parfor lors de l'ajustement des courbes
je définis mes modèles comme:
linear_ft = fittype({'x', '1'});
monotonic_ft= fittype({'-1/x', '1'});
quadratic_ft = fittype('poly2');
je lance la commande suivante pour parcourir les différentes sélections de partage des données, l'enregistrement des résidus suivant l'ajustement de courbe ...
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
Si vous lancez-le avec la quatrième boucle (nIts) comme une boucle for-play. Si vous exécutez comme une boucle parfor il ne sera pas en indiquant l'erreur:
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, ...
Est-ce que quelqu'un a une idée comment résoudre ce problème? Je serais très reconnaissant pour tout conseil !!
Merci,
Ben
Étrange. Votre code fonctionne pour moi. – informaton
Oh - ça fonctionne comme un parfor? – Ben
Oui, en tant que parfor. Je me demande pourquoi votre boîte à outils d'ajustement de courbe et la boîte à outils de traitement parallèle provoquent un conflit ici. Vous pouvez essayer un «tout effacer» pour faire bonne mesure. – informaton