找回密码
 注册
Simdroid-非首页
查看: 168|回复: 7

给定曲线形式,能否拟合出曲线的参数

[复制链接]
发表于 2012-2-10 13:09:39 | 显示全部楼层 |阅读模式 来自 广东广州
模型给定,需要拟合的曲线为y=A+Bt+C*exp(D*t),其中有多项式又有指数形式,怎么根据实验得到的数据(y,t)求得曲线中A、B、C、D四个参数呢?
matlab有没有办法啊?
发表于 2012-2-10 15:07:50 | 显示全部楼层 来自 江苏扬州
Simdroid开发平台
对于这样一个比较简单的模型,可以使用lsqcurvefit 或 nlinfit 进行拟合。由于这两个命令需要提供合适的参数初值,两个命令交替进行,使参数不再变化为止。若所得到的参数作出的曲线与原数据仍有差距,再换个初值试试。若仍不理想,可将数据给出,我可以给你一个最佳答案。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2012-2-13 13:38:16 | 显示全部楼层 来自 广东广州
stats01 发表于 2012-2-10 15:07
对于这样一个比较简单的模型,可以使用lsqcurvefit 或 nlinfit 进行拟合。由于这两个命令需要提供合适的参 ...

感谢stats01的回复,使用lsqcurvefit进行拟合,得到的结果和数据差距较大,特别是数据量越来越多的时候。附件是试验数据。第一列为位移,第二列为时间

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2012-2-13 17:21:15 | 显示全部楼层 来自 江苏扬州
你给出的模型可能不太恰当,充其量只能拟合成图1的结果(参数见下),若用另外的模型,效果会好得多。
fx1=@(b,t)b(1)+b(2)*t+b(3)*exp(b(4)*t);
fx2=@(b,t)(b(1)+b(2)*t+b(3)*t.^2)./(1+b(4)*t+b(5)*exp(b(6)*t));
b1=[1047.344901  -0.4948145915  -1046.81793  -0.000475737546]
RSS=0.0117421253395
MSe=  2.4668e-006
R^2 = 0.94221

b2=[0.3984097309  1.93905891  0.001199634705  3.545998559  -0.2149314181  -0.4900225641]
RSS = 0.000138880252611
MSe =  2.9189e-008
R^2 =      0.99932
如图所示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2012-2-16 10:17:02 | 显示全部楼层 来自 广东广州
stats01 发表于 2012-2-13 17:21
你给出的模型可能不太恰当,充其量只能拟合成图1的结果(参数见下),若用另外的模型,效果会好得多。
fx1= ...

再次感谢stats01的帮忙。
另外想问问:
怎么想到用 fx2=@(b,t)(b(1)+b(2)*t+b(3)*t.^2)./(1+b(4)*t+b(5)*exp(b(6)*t)) 这个方程来拟合的?这是不是那个蠕变模型的 应变-时间曲线??

在matlab中怎么交替使用lsqcurvefit 、 nlinfit 进行拟合?还有初始参数取不一样结果也不一样,不知道怎么才能找到适合的结果。我拟合出来的曲线都差很远。能否传个您写的程序给我参考一下?
回复 不支持

使用道具 举报

发表于 2012-2-16 16:33:38 | 显示全部楼层 来自 江苏扬州
clear, clc
x=[...]';
y=[...]';
fx=@(b,t)(b(1)+b(2)*t+b(3)*t.^2)./(1+b(4)*t+b(5)*exp(b(6)*t));
b=[0.4  2  0.0012  3.546  -0.215  -0.49];
% folowing is the fitting process
for l=1:5
    b=lsqcurvefit(fx,b,x,y)
    b=nlinfit(x,y,fx,b)   
end
y1=fx(b,x);
RSS=(y-y1)'*(y-y1),%residual sum of squares
n=length(y);
SSy=var(y)*(n-1), %total SS of y variable
R2=(SSy-RSS)/SSy, %R square

figure(1),clf
x1=linspace(min(x),max(x),250);
y1=fx(b,x1);
plot(x,y,'ko','markerfacecolor','k')
hold on
plot(x1,y1,'r-','linewidth',2)
legend('data','fit','location','best')
axis tight
回复 不支持

使用道具 举报

 楼主| 发表于 2012-6-3 00:01:31 | 显示全部楼层 来自 广东广州
stats01 发表于 2012-2-16 16:33
clear, clc
x=[...]';
y=[...]';

还想请问这个Isqcurvefit的拟合原理是什么啊?我在Matlab帮助文件中只看到他是通过求某个方程的最小值来确定的,stats01大牛能详细说说吗?
回复 不支持

使用道具 举报

发表于 2012-6-3 17:02:32 | 显示全部楼层 来自 江苏扬州
这两个拟合命令,都是使点(数据)与线(拟合值)之间差异的平方之和(残差平方和)最小。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-5 22:06 , Processed in 0.036892 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表