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

如图,x实际上是1x72的矩阵,目的是记录6年的月平均观测值,然后进行曲线拟合。拟合函数是以月份为变量,所以不能设成1到72.请教下如何实现把x延伸出去的效果?感谢!... 如图,x实际上是1x72的矩阵,目的是记录6年的月平均观测值,然后进行曲线拟合。拟合函数是以月份为变量,所以不能设成1到72.请教下如何实现把x延伸出去的效果?感谢! 展开
 我来答
tianxiawulang
2014-02-15 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2561万
展开全部

直接把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')))

百度网友c3efede
2014-02-15 · TA获得超过1460个赞
知道小有建树答主
回答量:535
采纳率:100%
帮助的人:571万
展开全部

这种情况下不应该拟合所有的数据. 而是应该作误差条形图. 一个例子如下: 

图中方框是平均值. 


接下来你可以对平均值做一个曲线拟合.  

更多追问追答
追问
可能我问的不太清楚,多个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.请问这种情况怎么整?
追答
哦哦, 这样啊. 
还是可以令 x=[1:72]; 这没有关系.
然后人工设定坐标显示字符就行了. set(gca, 'xTickLable', 人工设定的显示的数字或字符)

人工设定的显示的数字或字符 在你这里就可以写成 [1 2 3...12 1 2 3 ... 12 ...]
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式