如何在Matlab中将曲线拟合到离散序列数据(词干)上?

时间:2019-09-06 19:34:12

标签: matlab curve-fitting curve

我有两个FDX的矩阵TDXdim: 2xn(两个类),FDX(1, :)FDX(2, :)是对象的数量及其平均值,分别(也适用于TDX)。我使用stem绘制了上面的离散序列数据,现在我想显示一条曲线而不是它的线,以便从点(例如pdf)或(例如将曲线拟合到直方图)创建密度图,从而更好比较两个班级。

在Matlab中,stem的下图是否有拟合曲线的方法?

我还看到了诸如link1link2之类的链接,但是它们与直方图或连续数据有关。另外,我使用了fit曲线(link代替了茎,但是创建的两条曲线令人困惑。

示例:

FDX = [9,12,7,7,8,4,10,8,5,9,10; 0.626023067402372,0.647560923068733,0.266314729708634,0.512920709657816,0.408389652529404,0.444588941849425,0.800367166464757,1.28429713933315,0.391101796334982,0.219880153736852,0.439931802866314];
TDX = [1,1,2,1,1,1,1,1,1,1,1; 0.0888514059469934,0.0730468099283854,0.246560340244561,0.300711548987410,0.0871198693779434,3.11190476190476,0.185185185185183,0.246964650258985,0.113415750915749,0.132034632034618,0.201388888888900];


f1 = fit(TDX(2, :)', TDX(1, :)','smoothingspline');
plot(f1,'b', TDX(2, :)', TDX(1, :)','oc');
hold on
% stem(TDX(2, :), TDX(1, :),'*c');
grid on   
hold on


f2 = fit(FDX(2, :)', FDX(1, :)','smoothingspline');
plot(f2,'r',FDX(2, :)', FDX(1, :)','om');
hold on
% stem(FDX(2, :), FDX(1, :),'*m');
grid on   
hold off

title('Displacement Curve X', 'Units', 'normalized', 'Position', [2.5, 1.1, 0]); 
xlabel('Mean')
ylabel('Number of Objs')
legend('MeanTDX','MeanFDX')
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);

以下是FDXTDX的两个图,其大小分别为2x4322x114。 和

词干的输出:

enter image description here

拟合输出:

enter image description here

我想要的模型:

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用曲线拟合工具箱,该工具箱提供了非常好的功能。由于您未指定要使用的特定模型,因此我假设您具有正态分布的数据(类似于“茎的输出”图像)。但是您可以使用fittype()函数来基本上指定所需的任何模型。检查here以获得有关其参数的信息。还要考虑您选择的模型,它应该能合理地表示数据。

为简单起见,我选择使用一些示例数据,但希望它也可以与您的真实数据和所需的模型一起使用。

points = 100;
x = -points:points;
y = normpdf(x, -20, 20);
n = -0.01+2*0.01*rand(size(x));
y = y+n; % invent some noisy normal distributed test data

[xData, yData] = prepareCurveData(x, y);

% Set up fittype and options. (here assume normal dist)
ft = fittype(@(u, s, x)(1/(s*sqrt(2*pi))*exp(-(x-u).^2/(2*s^2))), 'coefficients', {'u', 's'}, 'independent', 'x', 'dependent', 'y')

% Fit model to data.
[fitresult, gof] = fit(xData, yData, ft);

% Plot fit with data.
figure
h = plot(fitresult, xData, yData);
legend(h, 'data', 'fit', 'Location', 'NorthEast');
xlabel('x'); ylabel('y'); grid on

% Extract the equation(ft) and the coefficients
coeffnames(fitresult)
coeffvalues(fitresult)

fit plot

如果您使用词干显示数据,这也应该起作用。

fit plot using stem