0

我正在使用 Matlab 用 poly1 曲线在 2 个坐标 (x,y) 中拟合一些数据。

问题是我找不到使拟合线更长的方法。

我需要它从 (180, 930) 到 (191, 944),但 Matlab 只是在数据附近绘制拟合线,它位于这两个坐标之间。

fit 命令(或 cftool 中的某些首选项)是否有一些参数可以帮助我?

此外,我已经尝试了 cftool 中的“调整轴限制”选项,但它根本没有帮助。

我已经搜索了已经提出的问题,但没有找到与此相关的任何内容。我是这个程序的新手,所以如果这是一个愚蠢的问题,我很抱歉提前谢谢,乔瓦尼

编辑:第一张图片的代码是:

[FitUp,goodnessUP] = fit(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,2),'poly1')
[FitDown,goodnessDOWN] = fit(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,3),'poly1')
plot(FitUp,'b')
hold on
plot(FitDown,'b')
hold on
errorbar(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,2),AKaterMatrix1msDX(:,4),'--r')
hold on
errorbar(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,3),AKaterMatrix1msDX(:,4),'--r')

第二个的代码是:

[FitUp,goodnessUP] = fit(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,2),'poly1')
[FitDown,goodnessDOWN] = fit(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,3),'poly1')
plot(FitDown,'b')
hold on
plot(FitUp,'b')
hold on
errorbar(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,2),AKaterMatrix1msDX(:,4),'--r')
hold on
errorbar(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,3),AKaterMatrix1msDX(:,4),'--r')

在这里你可以找到两个拟合,似乎第一个拟合没有被裁剪,而第二个hold on是: https ://docs.google.com/file/d/0B749BCu7mnZHaEhITUZ1YzdfVDA/edit?usp= sharing https:// docs.google.com/file/d/0B749BCu7mnZHeDVTOGRuSkktUmc/edit?usp=sharing

4

2 回答 2

0

如果你不需要很多适合的统计数据,polyfit后面polyval可以给你你的适合:

X = AKaterMatrix1msDX(:,1);
Y = AKaterMatrix1msDX(:,2);
dY = AKaterMatrix1msDX(:,4);
[a,S] = polyfit(X,Y)
extraPlotRange = 10;
newX = linspace(min(X)-extraPlotRange,max(X)+extraPlotRange,100);

[fitY,delta] = polyval(a,newX);

plot(X,Y)
hold on
plot(newX,fitY)
plot(newX,fitY+delta,':b')
plot(newX,fitY-delta,':b')
errorbar(X,Y,dY,'--r')
hold off

不幸的是,这不会为您提供您可能需要的相同的拟合优度统计数据,而只是拟合的置信区间。

另一种选择,如果你想留在fit,将使用 获得拟合系数coeffvalues。这些拟合系数将与您从polyfit.

aUp = coeffvalues(FitUp);
aDown = coeffValues(FitDown);

fitYup = polyval(aUp,newX);
fitYdown = polyval(aDown,newX);

等等

于 2013-10-19T16:00:07.450 回答
0

您只需要小心何时以及如何设置保持。首先制作一些虚拟数据

AKaterMatrix1msDX(:, 1) = 185:189;
AKaterMatrix1msDX(:, 2) = 2*rand(5, 1)+933;
AKaterMatrix1msDX(:, 3) = 2*rand(5, 1)+940;
AKaterMatrix1msDX(:, 4) = 2*rand(5, 1);

接下来,这是关键部分,将轴设置为您想要的并打开保持

figure
axis([180, 191, 930, 944]);
hold on

这正是你所做的

[FitUp,goodnessUP] = fit(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,2),'poly1')
[FitDown,goodnessDOWN] = fit(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,3),'poly1')
plot(FitUp,'b')
hold on
plot(FitDown,'b')
hold on
errorbar(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,2),AKaterMatrix1msDX(:,4),'--r')
hold on
errorbar(AKaterMatrix1msDX(:,1),AKaterMatrix1msDX(:,3),AKaterMatrix1msDX(:,4),'--r')

在此处输入图像描述

于 2013-10-19T16:50:19.757 回答