查看单个帖子
旧 2008-12-21, 14:41   #1
toumingyouyou
初级会员
 
注册日期: 2008-07-06
年龄: 40
帖子: 11
声望力: 17
toumingyouyou 正向着好的方向发展
默认 [求助]自定义函数数据拟合问题,请求帮助

本人在处理数据时,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检验法或者其他的方法来验证这一条曲线的拟合效果?在程序中如何体现?
希望高手能够一一解答这些问题,不甚感激!谢谢!
toumingyouyou 当前离线   回复时引用此帖