当前位置: 首页 > 计算模拟 >matlab问题求教

matlab问题求教

作者 等待苏樱
来源: 小木虫 350 7 举报帖子
+关注

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.

试了好多初值都是这种提示 需要怎么查 返回小木虫查看更多

今日热帖
  • 精华评论
  • 独孤神宇

    将模型代码附上来看看

  • 等待苏樱

    引用回帖:
    2楼: Originally posted by 独孤神宇 at 2018-07-05 14:45:35
    将模型代码附上来看看

    有点长 是嵌套的 您有联系方式吗 方便交流一下吗 谢谢

  • 等待苏樱

    引用回帖:
    2楼: Originally posted by 独孤神宇 at 2018-07-05 14:45:35
    将模型代码附上来看看

    我把代码发下 您看下吧

  • 等待苏樱

    主程序

    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);,

  • 等待苏樱

    引用回帖:
    2楼: Originally posted by 独孤神宇 at 2018-07-05 14:45:35
    将模型代码附上来看看

    六个变量 试了很多种初值 结果都是我给什么初值 结果就和初值一样

  • 独孤神宇

    引用回帖:
    7楼: Originally posted by 等待苏樱 at 2018-07-05 15:52:05
    六个变量 试了很多种初值 结果都是我给什么初值 结果就和初值一样...

    可以将模型和数据一并附上来,对照参考。

    1stOpt比较适合非线性拟合,对初始值依赖低。

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓