【发布时间】:2015-12-01 05:50:53
【问题描述】:
我已经在这里工作了好几个小时,我觉得简单的问题花费的时间最长,这很烦人。我似乎无法将曲线拟合到我的数据中,我尝试过 fit()、polyval(),但我无法让它们工作。我认为问题是,我的 x 轴以月为单位,而不是真正的数字,所以这些函数现在讨厌我。这是我的代码:
startDate = datenum('01-01-1985');
endDate = datenum('12-31-1985');
month = linspace(startDate,endDate,12);
waterLevel1985 = [75.2 75.3 75.4 75.6 75.7 75.75 75.6 75.5 75.3 75.25 75.2 75.25];
p = polyfit(month,waterLevel1985,4); %error is here apparently...
x = 1:0.5:12;
bestFit = polyval(p,x);
plot(month,waterLevel1985,x,bestFit)
ax = gca;
ax.XTick = month;
datetick('x','mmm','keepticks')
当我绘图时,我得到一个图表,其中 jan feb mar apr....etc 作为我的 x 轴,1985 年的水位值在我的 y 轴上。如果我只是把 plot (month, waterlevel1985, 'r+') 我没有得到拟合曲线到我的数据(看起来最接近 4 次多项式)。请帮我做这个,我想不通!
编辑:我什至尝试将 [1:1:12] 放在 polyfit 函数中而不是月份,但它仍然无法正常工作。我一直在玩弄 polyfit 和 polyval,但它们对我不起作用。我什至尝试过以下方法:
startDate = datenum('01-01-1985');
endDate = datenum('12-31-1985');
month = linspace(startDate,endDate,12);
waterLevel1985 = [75.2 75.3 75.4 75.6 75.7 75.75 75.6 75.5 75.3 75.25 75.2 75.25];
p = polyfit([1:1:12],waterLevel1985,4);
x = 1:0.5:12;
bestFit = polyval(p,x);
plot(month,waterLevel1985,'r+')
hold on
plot(x, bestFit)
hold off
ax = gca;
ax.XTick = month;
datetick('x','mmm','keepticks')
【问题讨论】:
-
如果您的数据是均匀分布的(每月一次观察),只需创建一个虚拟的
x变量1:12并为此进行拟合/评估,但是当您绘制时使用month。 -
但是您已经遗漏了给您带来问题的代码!请重新添加您的拟合和绘图代码。
-
@David 我试过了,但由于某些奇怪的原因,它仍然不起作用。我已经清除并再次尝试,仍然没有。我希望图表在 y 轴上有水位,在 x 轴上有一年中的 12 个月,然后我想绘制我的原始数据 plot(month,waterLevel1985,'r+') 然后绘制一条拟合曲线对于这些数据,这就是我使用 polyfit 和 polyval 函数的原因。
-
问题是,当我使用 polyfit(month,waterLevel1985,4) 时,它会警告我我的合身性不合适,并且不会绘制曲线。当我使用 polyfit([1:1:12], waterLevel1985,4) 时,它不会再次绘制拟合,但这次没有警告。
标签: matlab curve-fitting