Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-07-06
年龄: 40
帖子: 11
声望力: 17 ![]() |
![]()
本人在处理数据时,x为1行*24列的数据,y为n行*24列的数据,现假设n=5,其数据如下
x=0.2:0.2:4.8; y=[ 455.229 52.765 35.212 40.566 45.549 26.638 7.783 9.97 5.051 4.171 3.681 0.501 0 0 0 0 0 0 0 0 0 0 0 0 407.451 84.16 17.786 26.998 43.44 39.725 15.89 8.549 6.81 6.118 2.169 0.919 0.441 0 0 0 0 0 0 0 0 0 0 0 220.457 64.813 28.326 31.582 43.862 29.885 8.756 6.486 3.541 7.392 1.687 0.23 0.441 0 0 0 0 0 0 0 0 0 0 0 188.963 50.099 31.619 26.381 36.226 12.43 6.145 4.282 1.892 2.254 0 0.29 0.279 0 0.131 0 0 0 0 0 0 0 0 0 184.464 48.644 10.163 14.263 28.438 11.246 10.007 2.864 2.802 1.748 0.551 0.263 0.126 0 0.118 0 0 0 0 0 0 0 0 0 93.843 59.297 19.655 26.598 32.555 8.392 1.262 0.096 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; 本人想要拟合数据,函数为: fx1=@(b,x)b(1)*exp(-b(2)*x); 现在能够用for循环拟合出5条曲线,附程序如下: x=x( ![]() for i=1:1:5 yy=y(i, ![]() yy=yy( ![]() SSy(i)=var(yy)*(length(yy)-1); fx1=@(b,x)b(1)*exp(-b(2)*x); %fx2=@(b,x)b(1)*x.^b(2).*exp(-b(3)*x); b=rand(1,2); for l=1:5 b=lsqcurvefit(fx1,b,x,yy); b=nlinfit(x,yy,fx1,b); if l==5 b end end y1=fx1(b,x); figure(1) plot(x,yy,'-.+k'); hold on figure(2) plot(x,y1,'-pg'); hold on RSS(i)=(yy-y1)'*(yy-y1); R(i)=(SSy(i)-RSS(i))/SSy(i); if i==5 SSy RSS R end end 请问能不能在y数据的基础上,最后根据这5行数据只拟合出一条如上函数的曲线,这曲线与5行数据都相关,并求出相关系数。程序将如何修改?(SSy值体现的是目标变数的离均差平方和,RSS是不是越小越好,有时候出来的RSS都有几百,是数据质量不好吗?) 再请问能不能用数学方法中的F检验法或者其他的方法来验证这一条曲线的拟合效果?在程序中如何体现? 希望高手能够一一解答这些问题,不甚感激!谢谢! |
![]() |
![]() |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
[资料] | lbc898 | MATLAB论坛 | 0 | 2009-03-16 18:52 |
[求助]请问这种图怎么画 | yape14 | MATLAB论坛 | 4 | 2008-09-22 09:04 |
[求助]在SIMULINK里,如何将inegrator上方的箭头移到下面去 | yijianmei | MATLAB论坛 | 1 | 2008-07-24 10:15 |
仪表信息图像采集处理研究 | liuna2008 | MATLAB论坛 | 0 | 2008-04-12 18:53 |
Simplify Instrument Communication: Using Instrument Drivers with the Instrument Contr | TechnicalArticles | MATLAB技术文章 | 0 | 2008-01-06 16:32 |