24小时热门版块排行榜    

查看: 3514  |  回复: 8
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

cheng1378653

新虫 (初入文坛)

[求助] 用matlab里的nlinfit如何拟合分段函数

Sample Text
t=[0 0.0833 0.25 0.5 1 2];
c=[0 0.0833 1.2491 1.7025 0.2623 0.0757];
函数形式为c=A*(1-exp(-K1*t))       0<=t<=T
                c=A*(1-exp(-k1*T))*exp(-k2*(t-T))     t>=T
如何用脚本式或是函数式M文件拟合,求出A,k1,k2,(如果可以请划一下图形)
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cheng1378653

新虫 (初入文坛)

引用回帖:
8楼: Originally posted by lgycjpcqu at 2013-03-31 10:34:12
fun=@(beta,t)((t<0.5).*fun1(beta,t)+(t>=0.5).*fun2(beta,t)); 这一句中的0.5应该换成beta(4),这个是一个参数,我忘改过来了,不好意思,不过和其它参数一样也必须有一个合理的初始值才能得到好的结果。...

谢谢
9楼2013-03-31 12:25:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 9 个回答

dingd

铁杆木虫 (职业作家)

【答案】应助回帖


感谢参与,应助指数 +1
fegg7502: 金币+1, 鼓励交流 2013-04-02 09:24:49
1stOpt更简单:
CODE:
Function c=if(t Data;
t=[0 0.0833 0.25 0.5 1 2];
c=[0 0.0833 1.2491 1.7025 0.2623 0.0757];

均方差(RMSE): 0.0282872879644411
残差平方和(SSE): 0.00480102396229929
相关系数(R): 0.999311354215736
相关系数之平方(R^2): 0.998623182664489
决定系数(DC): 0.998184285936899
卡方系数(Chi-Square): 0.0580621164226486
F统计(F-Statistic): 367.165006987895

参数        最佳估算
----------        -------------
t1        0.317859946002189
a        -0.0366738585259589
k1        -14.2282073650289
k2        3.70145325521581

jv1.jpg

2楼2013-03-29 08:50:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lgycjpcqu

金虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
fegg7502: 金币+1, 鼓励交流 2013-04-02 09:24:59
引用回帖:
2楼: Originally posted by dingd at 2013-03-29 08:50:59
1stOpt更简单:

Function c=if(t<T1,A*(1-exp(-K1*t)),A*(1-exp(-k1*T1))*exp(-k2*(t-T1)));
Data;
t=;
c=;


均方差(RMSE): 0.0282872879644411
残差平方和(SSE): 0.00480102396229929
相关系数(R): ...

为啥我的1sopt运算结果不一致呢?
参数        最佳估算
----------        -------------
t1                 0.500000049987681
a                  -0.0568673833778535
k1                 -6.86274581292278
k2                 3.70079073587775
不是说1sopt得到的是唯一解吗?
3楼2013-03-29 10:38:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lgycjpcqu

金虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★
cheng1378653: 回帖置顶 2013-03-29 18:09:29
cheng1378653: 金币+2, 有帮助 2013-03-30 22:02:11
fegg7502: 金币+2, 应助指数+1, 鼓励交流 2013-04-02 09:24:40
还是2楼的结果好,用刚才我用1sopt运算的结果作为初始值,用MATLAB进行拟合得到结果和1楼一致,看来非线性最优化还是1sopt强大啊
A =
-0.0367
k1 =
-14.2282
k2 =
3.7015
T =
0.3179
你需要MATLAB 代码的话如下
clear
tic
fun1=inline('beta(1).*(1-exp(-beta(2).*t))','beta','t');
fun2=inline('beta(1).*(1-exp(-beta(2).*beta(4)))*exp(-beta(3)*(t-beta(4)))','beta','t');
fun=@(beta,t)((t<0.5).*fun1(beta,t)+(t>=0.5).*fun2(beta,t));
t=[0 0.0833 0.25 0.5 1 2];
c=[0 0.0833 1.2491 1.7025 0.2623 0.0757];
beta=nlinfit(t,c,fun,[-0.05  -6.8 3.7 0.5]);
A=beta(1);
k1=beta(2);
k2=beta(3);
T=beta(4);
warning off all
c1=beta(1).*(1-exp(-beta(2).*t(1:4)));
c2=beta(1).*(1-exp(-beta(2).*beta(4))).*exp(-beta(3).*(t(4:6)-beta(4)));
cfit(1:4)=c1;
cfit(4:6)=c2;
plot(t,c,'*')
hold on;
plot(t,cfit,'r-')
toc
4楼2013-03-29 10:47:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见