把数据给出来,我有办法。
等式右侧可以看成双自变量x(1)=x,x(2)=y,这样就成了多变量拟合了。
【补充】初始值不好确定,但方法就是这样的:
clc; clear
A=[...
0 4.84827E-9
0.05 7.20861E-9
0.1 9.486E-9
0.15 1.33346E-8
0.2 1.85467E-8
0.25 2.54804E-8
0.3 3.57885E-8
0.35 4.94846E-8
0.4 6.86021E-8
0.45 9.34068E-8
0.5 1.36416E-7
0.55 2.18504E-7
0.6 4.51033E-7
0.65 1.2785E-6
0.7 4.57114E-6
0.75 1.70904E-5
0.8 5.62476E-5
0.85 1.45646E-4
0.9 2.93975E-4
0.95 4.91251E-4];
format short g
x=A(:,1);y=A(:,2);
X=[x,y];
%y=I1*exp((x-y*Rs)/0.026/n1)+I2*exp((x-y*Rs)/0.026/n2)+(x-y*Rs)/Rsh-I1-I2+IL
%I1=a(1),Rs=a(2),n1=a(3),I2=a(4),n2=a(5),Rsh=a(6),IL=a(7)
fun=inline('a(1)*exp((x(:,1)-x(:,2)*a(2))/0.026/a(3))+a(4)*exp((x(:,1)-x(:,2)*a(2))/0.026/a(5))+(x(:,1)-x(:,2)*a(2))/a(6)-a(1)-a(4)+a(7)','a','x')
a=nlinfit(X,y,fun,[ 1 1 1 1 1 1 1])
%{
figure(1)
plot(x,y)
figure(2)
semilogy(x,y)
figure(3)
loglog(x,y)
%}
取消
评论