2013-10-18 39 views
0

我正在使用Matlab來用poly1曲線擬合2個座標(x,y)中的一些數據。Matlab不會改變擬合的極限

問題是,我找不到一種方法來使擬合線更長。

我需要它從(180,930)到(191,944),但是Matlab只是在數據附近繪製擬合線,這是在這兩個座標之間。

是否有一些可以幫助我的適合命令(或cftool中的一些首選項)的參數?此外,我試過了cftool中的「Adjust axes limits」選項,但它根本沒有幫助。

我已經搜遍了已經問過的問題,但是我還沒有找到任何與此相關的內容。 我是新來這個節目,所以我很抱歉,如果這是一個愚蠢的問題 由於提前, 喬瓦尼

編輯: 第一個圖像的代碼是:

[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

請在您的問題中添加代碼。 – Daniel

+0

我已經添加了代碼和配合的圖像來澄清我的問題。 – GionnyBanana

+0

我不能評論'fit'的用法,但如果你只是擬合一個簡單的多項式,'polyfit'和'polyeval'可能會更好。一旦你有你的擬合多項式,你可以評估它在任何你想要的網格。另外,hold功能是一個切換功能。只有第一個是必要的(在最後一個錯誤欄命令之後可能應該跟一個'hold off')。 – craigim

回答

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

+0

謝謝丹尼爾,那就像一個魅力:D – GionnyBanana

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);