24小时热门版块排行榜    

查看: 674  |  回复: 1

guanwei

银虫 (小有名气)

[求助] MATLAB拟合,正丁醇与乳酸酯化反应PH模型的拟合程序出现问题 已有1人参与

各位位,您好!
本人研究的方向是反应精馏,最近在评估PH模型的拟合找到反应速率常数,用最小二乘法进行计算,看到文献的编辑的程序,多次尝试,有如下疑问,希望各位虫友能帮忙解决


如下363.15K,正丁醇与乳酸酯化反应PH模型的拟合程序,

function KineticsEst1_int11
clear all
clc
t=[0 20 40 100 270 450 750 1410 1590 1810];%时间
rA=[0.0004765 0.0004507  0.0004250  0.0003477 0.001549 0.0001117 0.0000396 0.0000018  0.0000038 0.0000062];%反应速率
Pa=[0.042729739 0.041609737 0.040801805 0.038526838 0.033412812 0.030519156 0.028695168 0.02792077 0.027918742 0.0278887981]; %乳酸的摩尔分率
Pb=[0.123670897  0.122550895  0.121742963 0.119467996 0.11435397  0.111460314  0.109636326  0.108861928 0.1088599 0.108829956];%正T醇的摩尔分率
Pc=[0.833599364  0.834719366 0.835527299 0.837802265 0.842916291 0.845809947 0.847633933 0.848408333 0.848410361 0.848440305];%水的摩尔分率
Pd=[0.001120002 0.001927934 0.004202901 0.009316927 0.012210583 0.014034571 0.014808969 0.014810996  0.014840941  0.014850941];%乳酸正丁酯的摩尔分率
%线性拟合
P=2.337132745*Pa.*Pb-0.564655417*Pc.*Pd;y=rA';X=[ones(size(y))  P'];

b=X\y;k=b(2);     
%非线性拟合
beta0=[k]
[beta,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@ObjFunc,beta0,[],[],[],rA,Pa,Pb,Pc,Pd)  


%拟合效果图(实验与拟合的比较)
figure(1);plot(t,rA,'.')
r_poly=beta(1)*(2.337132745*Pa.*Pb-0.564655417*Pc.*Pd);
hold on;plot(t, r_poly,'g')
figure(2);plot(Pb,rA,'.'); hold on;plot(Pb, r_poly,'g')

%-----------------------------------------------------------------------------一
Function f=ObjFunc(beta,rA,Pa,Pb,Pc,Pd)
f=rA-beta(1)*(2.337132745*Pa.*Pb-0.564655417*Pc.*Pd);

出现以下错误
??? Error using ==> feval
Undefined function or method 'ObjFunc' for input arguments of type 'double'.

Error in ==> lsqnonlin at 203
            initVals.F = feval(funfcn{3},xCurrent,varargin{:});

Error in ==> KineticsEst1_int11 at 33
[beta,resnorm,residual,exitflag,output,lambda,jacobian] = ...

Caused by:
    Failure in initial user-supplied objective function evaluation. LSQNONLIN
    cannot continue.
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
包括MATLAB在内的4种常见软件的程序代码或者操作步骤参见:
http://muchong.com/bbs/viewthread.php?tid=6572963&authorid=1122189

如果是代数方程,MATLAB程序编写不方便,建议尝试用1stopt。
如果是常微分方程,可在本版块搜索相关MATLAB程序,或者求助专家dingd。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2014-09-05 18:18:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 guanwei 的主题更新
信息提示
请填处理意见