程序如下:
clear;clc
T=311.11;
myfun=@(p,x)log((p(1)*x(:,2)/(2*p(2))+x(:,1)).*(p(1)-x(:,1))./(x(:,1).*(p(1)-p(1)*x(:,2)/(2*p(2))-x(:,1))))+((7*p(1)*x(:,2)/(2*p(2))-x(:,1))/p(1))*p(3)/T+p(4)/T;
x=[0.0022 0.4059
0.0380 1.0118
0.0840 1.0833
0.1617 1.0640
0.3124 0.9387
0.6497 0.5216
0.7445 0.3405
0.7794 0.2928
0.8026 0.2425
0.8234 0.2163 ];
p0=[0.4043 1.19 80 -1460];
warning off
p=nlinfit(x,zeros(size(x,1),1),myfun,p0);
disp('rhomc,C,Eii,Eis分別為:');
disp(num2str(p));
plot(x(:,1),x(:,2),'ro');hold on;
ezplot(@(x,y)myfun(p,[x,y]),[0,1,0,2]);
title('擬合曲線');legend('樣本點','擬合曲線')
擬合結(jié)果如下:
rhomc,C,Eii,Eis分別為:
0.156253858607+0.005786753697576i 546230758.1694+48871855.16422i -7.845475715233e-007+2.978369193914e-008i -3.533514947268e-006+1.911710468176e-007i
而符合實際情況的結(jié)果應(yīng)該是rhomc[0,1],C[0,10],Eii[0,X00],Eis[-X000,0]
從擬合曲線看,擬合曲線與實驗點嚴重偏離,有可能是初值的問題,但一直沒找到合適的初始值。而且擬合曲線多出一條線,求大神指點問題出現(xiàn)在哪里了?
![matlab非線性擬合命令nlinfit擬合4個自由參數(shù)的相關(guān)問題]()
1.jpg |