【发布时间】:2019-09-11 04:20:38
【问题描述】:
我有两个矩阵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。
和
词干输出:
拟合输出:
我想要的模型:
【问题讨论】:
-
您是拟合还是只是根据数据用样条线插值\平滑?我没有看到合适的模型或表达式?
-
我建议尝试组合幂和指数方程,“y = a * pow(x, b) * exp(c * x)”。良好的拟合初始参数估计值似乎是 a = 5.0E+03、b = 3.1E+00 和 c = -5.6E+00
-
@James Phillips:我无法定义“y”,因为 x 和 y 都有。例如:
y = FDX(1,:);和x = FDX(2,:);也适用于TDX。 -
我明白了 - 我只是使用了从发布的散点图中提取的数据,它具有 x 和 y 数据的外观。
-
@bla:我不知道需要哪种方法,但我想要一个模型来显示点的密度(两个类的两条曲线)。我还在 Mathwork 中看到了
csaps函数和pchip函数,但我不知道如何将它们用于我的向量。我为我的数据编写了一个脚本,发生了错误,The data sites should be distinct。
标签: matlab curve-fitting curve