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

How to fit a curve on a discrete sequence data (stem) in Matlab?

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

在 Matlab 中,有什么方法可以在下面的 stem 图上拟合曲线吗?

我也看到了一些链接,例如 link1 and also link2 but they are about histogram or continues data. Also, I have used the fit curve (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。 和

词干输出:

拟合输出:

我想要的型号:

您可以使用曲线拟合工具箱,它提供了非常好的功能。由于您没有指定要使用的特定模型,我只是假设您有正态分布的数据(类似于您的 "output of stem" 图像)。但是您可以使用 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)

这在您使用 stem 显示数据的情况下也应该有效。