作业帮 > 综合 > 作业

一个x对应多个y,怎样用matlab曲线拟合?

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/08/09 00:42:24
一个x对应多个y,怎样用matlab曲线拟合?


如图,x实际上是1x72的矩阵,目的是记录6年的月平均观测值,然后进行曲线拟合.拟合函数是以月份为变量,所以不能设成1到72.请教下如何实现把x延伸出去的效果?感谢!


一个x对应多个y,怎样用matlab曲线拟合?
直接把x和y都当成向量处理就可以了:
% 生成示例数据
x=repmat(1:12,6,1);
y=2+3*sin(x)+0.5*rand(size(x));
% 拟合函数
f=@(c,x)c(1)+c(2)*sin(x);
% 拟合
c=lsqcurvefit(f,[1 1],x(:),y(:))
% 绘图
plot(x(:),y(:),'k.',x(1,:),f(c,x(1,:)),'r--')
legend('原始数据','拟合数据')

再问: 可能我问的不太清楚,多个Y值不是误差,而是不同年份当月的值。比如x=1对应了6个y值,这6个y实际上是2000年-2005年每年1月的值,我希望把x从1-12再1-12这样平铺6次出去,反应从2000年-2005年的时间延伸。结果如果直接输入x=[1 2 3 ...12 1 2 3 ... 12 ...]这样就只能显示一次1-12.请问这种情况怎么整?
再答: 你这说的是怎样画图的问题,与拟合是两码事。 既然说拟合,那就首先要明确最基本的概念:自变量是什么,因变量是什么,函数的形式,以及有哪些系数是需要拟合的?可以如你所说那样,把多年的数据延伸出去,但拟合的时候怎么算?要把年份也作为自变量考虑进去吗?那样函数的形式又是什么? 至于说多个Y值算不算是误差,也要看你怎样理解。如果是把月份作为自变量,各月平均观测值作为因变量考虑,那么,不同年份的观测值完全可以理解为对同一变量不同次观测所表现出来的误差。 如果你想把各年份的数据铺开了画,并且坐标轴上标出适当的年度和月份,可以参考下面的代码(其中x、y和上面相同):X=datenum(repmat(2000:2005,12,1),x',15);
Y=y';
plot(X(:),Y(:),'k.:')
set(gca,'xlim',[X(1) X(end)])
set(gca,'xticklabel',arrayfun(@(d){datestr(d,'yyyy/mm')},get(gca,'xtick')))