实验数据和图见水木论坛
http://www.newsmth.net/bbscon.php?bid=191&id=132630
有一组实验数据,t表示时间,v表示电压
数据如后所见。
我现在编写一个m文件,试图分段拟合,但得不到预期的效果。如果是分开拟合,则效果很好。估计是这样编写的分段拟合不对,请大侠指教更好的程序。
下面是我编写的m文件
fun1=inline('4.213-300*x/ref(1)-300*(ref(2)+ref(3))+300*ref(3)*exp(-x/(ref(3)*ref(4)))','ref','x')
fun2=inline('4.213-3000/ref(1)-300*ref(3)*exp(-x/(ref(3)*ref(4)))*(exp(10/(ref(3)*ref(4)))-1)','ref','x')
if t<=10
abc=nlinfit(t,v,fun1,[51891 0.00083 0.00013 12050]);
else
abc=nlinfit(t,v,fun2,[51891 0.00083 0.00013 12050]);
end
Cb=abc(1),R0=abc(2),Rp=abc(3),Cp=abc(4)
if t<=10
vv=4.213-300*t/Cb-300*(R0+Rp)+300*Rp*exp(-t/(Rp*Cp))
else
vv=4.213-3000/Cb-300*Rp*exp(-t/(Rp*Cp))*(exp(10/(Rp*Cp))-1)
end
plot(t,v,'*',t,vv)
fun1=inline('4.213-300*x/ref(1)-300*(ref(2)+ref(3))+300*ref(3)*exp(-x/(ref(3)*ref(4)))','ref','x');
fun2=inline('4.213-3000/ref(1)-300*ref(3)*exp(-x/(ref(3)*ref(4)))*(exp(10/(ref(3)*ref(4)))-1)','ref','x');
fun=@(ref,t)((t<=10).*fun1(ref,t)+(t>10).*fun2(ref,t));
abc=nlinfit(t',v,fun,[51891 0.00083 0.00013 12050]');
plot(t,v);hold on;
f=@(t)(fun(abc,t));
fplot(f,[0,50],'r')
该方案不行哦,只要稍微改变初始化条件,拟合结果差距就非常非常大!!!!