如何在 Matlab 中的离散序列数据(词干)上拟合曲线?
How to fit a curve on a discrete sequence data (stem) in Matlab?
我有两个矩阵FDX
和TDX
(两个类)和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]);
下面有两个图FDX
和TDX
,尺寸分别为2x432
和2x114
。
和
词干输出:
拟合输出:
我想要的型号:
您可以使用曲线拟合工具箱,它提供了非常好的功能。由于您没有指定要使用的特定模型,我只是假设您有正态分布的数据(类似于您的 "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 显示数据的情况下也应该有效。
我有两个矩阵FDX
和TDX
(两个类)和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]);
下面有两个图FDX
和TDX
,尺寸分别为2x432
和2x114
。
和
词干输出:
拟合输出:
我想要的型号:
您可以使用曲线拟合工具箱,它提供了非常好的功能。由于您没有指定要使用的特定模型,我只是假设您有正态分布的数据(类似于您的 "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 显示数据的情况下也应该有效。