matlab问题求教
Initial point is a local minimum.
Optimization completed because the size of the gradient at the initial point
is less than 1e-4 times the selected value of the function tolerance.
试了好多初值都是这种提示 需要怎么查 返回小木虫查看更多
今日热帖
Initial point is a local minimum.
Optimization completed because the size of the gradient at the initial point
is less than 1e-4 times the selected value of the function tolerance.
试了好多初值都是这种提示 需要怎么查 返回小木虫查看更多
将模型代码附上来看看
有点长 是嵌套的 您有联系方式吗 方便交流一下吗 谢谢
我把代码发下 您看下吧
主程序
clear
clc
A=textread('Benzene+Methanol.txt');
a=size(A,1);
P=101.325;
A12=630.8;
A21=336.064;
B12=0.451;
for i=1:a
x1(i)=A(i,2);
x2(i)=A(i,3);
x3=1-x1-x2;
Texp(i)=A(i,1);
gamma1exp(i)=A(i,7);
gamma2exp(i)=A(i,8);
end
bata0=[2319 -90 -238 3000 -0.3 -0.3];
options = optimset('Algorithm','Levenberg-Marquardt','Display','iter','TolFun',1e-40,'MaxFunEvals',8000000,'MaxIter',150000,'TolX',1e-500);
[beta,resnorm,residual,exitflag,output,lambda,jacobian]=...
lsqnonlin(@ObjFunc,bata0,[],[],options,x1,x2,x3,Texp,gamma1exp,gamma2exp);
gamma1cal = Vapor1Cal( beta,x1,x2,x3,Texp );
gamma2cal = Vapor2Cal( beta,x1,x2,x3,Texp );
fprintf('Estimated Parameters;\n')
fprintf('\tA13=%.3f\n',beta(1))
fprintf('\tA31=%.3f\n',beta(2))
fprintf('\tA23=%.3f\n',beta(3))
fprintf('\tA32=%.3f\n',beta(4))
fprintf('\tA23=%.3f\n',beta(5))
fprintf('\tA32=%.3f\n',beta(6))
fprintf('\tThe sum of the squares is:%.6f\n',resnorm)
fprintf('\tThe mean Δgamma1 is:%.6f\n',mean(abs(residual)))
fprintf('\tThe mean Δgamma2 is:%.6f\n',mean(abs(residual)))
fprintf('\tThe gamma1cal is:\n',gamma2cal)
fprintf('\tThe gamma2cal is:\n',gamma2cal)
程序中
ObjFunc为
function f=ObjFunc(beta,x1,x2,x3,Texp,gamma1exp,gamma2exp)
gamma1cal=Vapor1Cal(beta,x1,x2,x3,Texp);
gamma2cal=Vapor2Cal(beta,x1,x2,x3,Texp);
f=(1-gamma1cal./gamma1exp).^2+(1-gamma2cal./gamma2exp).^2;
end
Vapor1Cal为
function gamma1cal= Vapor1Cal( beta,x1,x2,x3,Texp )
A12=630.8;
A21=336.064;
B12=0.451;
t12=A12./Texp;
t21=A21./Texp;
t13=beta(1)./Texp;
t31=beta(2)./Texp;
t23=beta(3)./Texp;
t32=beta(4)./Texp;
G12=exp(-B12.*t12);
G21=exp(-B12.*t21);
G13=exp(-beta(5).*t13);
G31=exp(-beta(5).*t31);
G23=exp(-beta(6).*t23);
G32=exp(-beta(6).*t32);
gamma1cal=exp(((G21.*x2+G31.*x3).*(t21.*G21.*x2+t31.*G31.*x3))./(x1+G21.*x2+G31.*x3).^2+...
(t12.*G12.*x2.^2+G12.*G32.*x2.*x3.*(t12-t32))./(G12.*x1+x2+G32.*x3).^2+...
(t13.*G13.*x3.^2+G13.*G23.*x2.*x3.*(t13-t23))./(G13.*x1+G23.*x2+x3).^2);
Vapor2Cal为
function gamma2cal = Vapor2Cal( beta,x1,x2,x3,Texp )
A12=630.8;
A21=336.064;
B12=0.451;
t12=A12./Texp;
t21=A21./Texp;
t13=beta(1)./Texp;
t31=beta(2)./Texp;
t23=beta(3)./Texp;
t32=beta(4)./Texp;
G12=exp(-B12.*t12);
G21=exp(-B12.*t21);
G13=exp(-beta(5).*t13);
G31=exp(-beta(5).*t31);
G23=exp(-beta(6).*t23);
G32=exp(-beta(6).*t32);
gamma2cal=exp(((G32.*x3+G12.*x1).*(t32.*G32.*x3+t12.*G12.*x1))./(x2+G32.*x3+G12.*x1).^2+...
(t23.*G23.*x3.^2+G23.*G13.*x1.*x3.*(t23-t13))./(G23.*x2+x3+G13.*x1).^2+...
(t21.*G21.*x1.^2+G21.*G31.*x1.*x3.*(t21-t31))./(G21.*x2+G31.*x3+x1).^2);,
六个变量 试了很多种初值 结果都是我给什么初值 结果就和初值一样
可以将模型和数据一并附上来,对照参考。
1stOpt比较适合非线性拟合,对初始值依赖低。