我使用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
答案 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')