v(t)=V-(V-V0)*exp(-t/tau)
移项,后两边同取对数
log(V-V(t))=log(V-V0)-t/tau
上面V,V(t),t已知,V0,tau未知。
令y=log(V-V(t))
x=t
那么就有kx+b=y
其中k=-1/tau,b=log(V-V0)
上面的过程就是将非线性化成线性。
将每个数据代入会得到二元一次线性方程组
方程数6,变量数2,可以由最小二乘法求出。
以下是Matlab代码:
V=14;
t=[0.3,0.5,1.0,2.0,4.0,7.0];
Vt=[5.6873,6.1434,7.1633,8.8626,11.0328,12.6962];
y=log(V-Vt);
A=[t(:),ones(size(t(:)))];
kb=A\y(:);
tau=-1/kb(1)
V0=V-exp(kb(2))
%%下面是显示拟合的结果
Vt_fit=V-(V-V0)*exp(-t/tau)
plot(Vt,Vt_fit,'*',Vt,Vt,'r')
xlabel('Vt原始数据')
ylabel('Vt拟合数据')
%%%%%%%%%%%%%%%
填空:
方法:化非线性问题成线性问题
V0=5.0001
tau=3.6165
最简单的方法,列方程求解。里面只有两个未知数,V0和时常数t
7.1633=14-(14-V0)*exp(-1/t) (1)
8.8626=14-(14-V0)*exp(-2/t) (2)
把(1)平方与(2)相比,就可以得到V0=4.9019
什么问题啊?