程序如下:
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('样本点','拟合曲线')
拟合结果如下:
rhomc,C,Eii,Eis分别为:
0.156253858607+0.005786753697576i 546230758.1694+48871855.16422i -7.845475715233e-007+2.978369193914e-008i -3.533514947268e-006+1.911710468176e-007i
而符合实际情况的结果应该是rhomc[0,1],C[0,10],Eii[0,X00],Eis[-X000,0]
从拟合曲线看,拟合曲线与实验点严重偏离,有可能是初值的问题,但一直没找到合适的初始值。而且拟合曲线多出一条线,求大神指点问题出现在哪里了?
![matlab非线性拟合命令nlinfit拟合4个自由参数的相关问题]()
1.jpg |