別のディレクトリ内のファイルからデータをインポートして特定のモデルに適合させるMATLAB関数を作成したいのですが、データをフィルター処理する必要があるためです(ファイル内のさまざまな場所に「スラッシュ」データがあります。たとえば、以前は何も測定されていません。分析されたモーションが開始されます)。
したがって、近似に使用されるデータを含むベクトルの長さが異なるため、行列で返すことができません(たとえば、以下の関数のx)。どうすればこれを解決できますか?
私はたくさんのデータファイルを持っているので、「手動」の方法を使いたくありません。私の機能は以下の通りです。すべてと提案を歓迎します。
datafit.m
function [p, x, y_c, y_func] = datafit(pattern, xcol, ycol, xfilter, calib, p_calib, func, p_0, nhl)
datafiles = dir(pattern);
path = fileparts(pattern);
p = NaN(length(datafiles));
y_func = [];
for i = 1:length(datafiles)
exist(strcat(path, '/', datafiles(i).name));
filename = datafiles(i).name;
data = importdata(strcat(path, '/', datafiles(i).name), '\t', nhl);
filedata = data.data/1e3;
xdata = filedata(:,xcol);
ydata = filedata(:,ycol);
filter = filedata(:,xcol) > xfilter(i);
x(i,:) = xdata(filter);
y(i,:) = ydata(filter);
y_c(i,:) = calib(y(i,:), p_calib);
error = @(par) sum(power(y_c(i,:) - func(x(i,:), par),2));
p(i,:) = fminsearch(error, p_0);
y_func = [y_func; func(x(i,:), p(i,:))];
end
end
サンプルデータ: http: //hastebin.com/mokocixeda.md