polyfit()不遵循数据

时间:2015-03-03 16:28:11

标签: matlab curve-fitting

这是我的代码:

clear all
close all
clc


%% abdomen

apAbdWat = [5.7 7.4 11.2 14.9 18.6 22.4 26.1 29.8 33.6];
latAbdWat = [7.7 10 15    20   25    30   35 40    45];

apTisAbd = [8.9 11.4 13.9 15.9 18.4 22 24.9 30.7];
latTisAbd = [10.6 14 18 20.6 24 30 32.4 38.9];

apAnthAbd = [20.8];
latAnthAbd = [28.3];

figure
plot(apAbdWat, latAbdWat, '-+'); hold on;
plot(apTisAbd, latTisAbd, 'r-o'); hold on;
plot(apAnthAbd, latAnthAbd, '-k*')

xlabel('AP diameter (cm)')
ylabel('LAT diameter (cm)')
title('AP diameter vs. LAT diameter (abdomen phantom) ')
legend('water abdomen', 'tissue abdomen', 'anthrop abdomen');

x = [apAbdWat apTisAbd apAnthAbd];
y = [latAbdWat latTisAbd latAnthAbd];

[p,S,mu] = polyfit(y,x,1);
hold on; t = 1:40;
plot(t,p(1)*t+p(2), 'g-')

这是我得到的: enter image description here

绿线是否应该很好地遵循其余的所有要点?我无法弄清楚我做错了什么。感谢。

2 个答案:

答案 0 :(得分:1)

您有两个问题:

  • xy在包含polyfit的行中互换。
  • polyfit的三输出版本未在x中给出多项式。要在x中获取多项式,请使用双输出版本。

从文档(添加的格式以突出显示上述两个问题):

  

POLYFIT将多项式拟合为数据。

     

P = POLYFIT( X,Y ,N)找到多项式的系数P(X)[...]

     

[P,S] = POLYFIT(X,Y,N)返回多项式系数P和a       结构S [...]

     

[P,S,MU] = POLYFIT(X,Y,N)求多项式的系数       XHAT =(X-MU(1))/ MU(2)其中MU(1)= MEAN(X)和MU(2)= STD(X)[...]

所以,改变你的行

[p,S,mu] = polyfit(y,x,1);

[p,S] = polyfit(x,y,1);

结果图片:

enter image description here

答案 1 :(得分:1)

您收到错误的变量,您可以按如下方式编辑代码:

p= polyfit(y,x,1);
t=1:1:40;
hold on;plot(x,polyval(p,x),'r');

enter image description here