我有两个FDX
的矩阵TDX
和dim: 2xn
(两个类),FDX(1, :)
,FDX(2, :)
是对象的数量及其平均值,分别(也适用于TDX
)。我使用stem
绘制了上面的离散序列数据,现在我想显示一条曲线而不是它的线,以便从点(例如pdf)或(例如将曲线拟合到直方图)创建密度图,从而更好比较两个班级。
在Matlab中,stem
的下图是否有拟合曲线的方法?
我还看到了诸如link1和link2之类的链接,但是它们与直方图或连续数据有关。另外,我使用了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]);
以下是FDX
和TDX
的两个图,其大小分别为2x432
和2x114
。
和
词干的输出:
拟合输出:
我想要的模型:
答案 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)
如果您使用词干显示数据,这也应该起作用。