Matlab不会改变合适的限制

时间:2013-10-18 16:22:55

标签: matlab data-fitting

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

问题在于我找不到一种方法来使拟合线更长。

我需要从(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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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')

enter image description here