| 查看: 531 | 回复: 0 | |||
[求助]
用matlab求动力学参数有错误,求指导
|
|
程序是: tspan = [78.666667 59.000000 47.200000 39.333333 33.714286 29.500000 ]; x0=[0; 0; 0 ]; k0 = [0 0 0 0 0 0 0 0 0];%速率常数,平衡常数初值 lb = [0 0 0 0 0 0 0 0 0]; ub = [+inf +inf +inf +inf +inf +inf +inf +inf +inf]; data=... [ 78.666667 0.957100 0.797360 0.162324 70 2.5 59.000000 0.859400 0.792711 0.083877 70 2.5 47.200000 0.833500 0.764903 0.068597 70 2.5 39.333333 0.757000 0.709688 0.047313 50 1.5 33.714286 0.739600 0.699588 0.040012 50 1.5 29.500000 0.721000 0.686608 0.034392 50 1.5 ]; yexp=data(:,2:4);%取矩阵2-6列数据 % 使用函数lsqnonlin()进行参数估计 [k,resnorm,residual,exitflag,output,lambda,jacobian] = ... lsqnonlin(@ObjFunc,k0,lb,ub,[],tspan,x0,yexp); ci = nlparci(k,residual,jacobian); fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n') fprintf('\tk1 = %.4f ± %.4f\n',k(1),ci(1,2)-k(1)) fprintf('\tk2 = %.4f ± %.4f\n',k(2),ci(2,2)-k(2)) fprintf('\tk3 = %.4f ± %.4f\n',k(3),ci(3,2)-k(3)) fprintf('\tk4 = %.4f ± %.4f\n',k(4),ci(4,2)-k(4)) fprintf('\tk5 = %.4f ± %.4f\n',k(5),ci(5,2)-k(5)) fprintf('\tk6 = %.4f ± %.4f\n',k(6),ci(6,2)-k(6)) fprintf('\tk7 = %.4f ± %.4f\n',k(7),ci(7,2)-k(7)) fprintf('\tk8 = %.4f ± %.4f\n',k(8),ci(8,2)-k(8)) fprintf('\tk9 = %.4f ± %.4f\n',k(9),ci(9,2)-k(9)) fprintf(' The sum of the squares is: %.1e\n\n',resnorm) function f = ObjFunc(k,tspan,x0,yexp) % 目标函数 [t Xsim] = ode45(@KineticsEqs,tspan,x0,[],k); ysim(:,1) = Xsim(2:end,1); ysim(:,2) = Xsim(2:end,2); ysim(:,3) = Xsim(2:end,3); f =(sum((ysim(:,1)-yexp(:,1))^2)+sum((ysim(:,2)-yexp(:,2))^2) +sum((ysim(:,3)-yexp(:,3))^2))/72; function dCdt = KineticsEqs(t,C,k) % ODE模型方程,t为空时,C转化率、收率 P1=((1/(C(5)+1))*(1-C(2))*C(6))/(1-((1/(C(5)+1))*C(2))-((1/(C(5)+1))*C(4))); P2=((C(5)/(C(5)+1))-2*(1/(C(5)+1)*C(3)-4*(1/(C(5)+1)*C(4)/(1-((1/(C(5)+1))*C(2))-((1/(C(5)+1))*C(4))); P3=((1/(C(5)+1)*C(3))/(1-((1/(C(5)+1))*C(2))-((1/(C(5)+1))*C(4))); P4=((1/(C(5)+1)*C(4))/(1-((1/(C(5)+1))*C(2))-((1/(C(5)+1))*C(4))); P5=(((1/(C(5)+1)*C(3))+2*((1/(C(5)+1)*C(4)))/(1-((1/(C(5)+1))*C(2))-((1/(C(5)+1))*C(4))); % k(1) = Kdmo,k(1)=Kh;k(3)=Kmg;k(4)=Keg,k(5)=Kme; k(6)=k1,k(7)=k2, k(8)=Kp1,k(9)=Kp2, %P(1)=Pdmo,P(2)=Ph,P3=Pmg,P4=Peg,P5=Pme; theB = 1+k(4)*P4+k5*P5+((k(1)*P3*P5*P5)/(k(8)*(P2^3)); theC =k(7)*(P3-(P3*P5)/(k(9)*(P2^2)); r1 = theA/theB; r2 = theC/theB; dCAdt = - r1; dCBdt = r1 - r2 ; dCdt = [dCAdt; dCBdt]; ??? 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{:}); Caused by: Failure in initial user-supplied objective function evaluation. LSQNONLIN cannot continue. 求大神修正代码!!不胜感激! |
» 猜你喜欢
基金申请
已经有44人回复
CSC与新西兰维多利亚大学PhD奖学金项目
已经有0人回复
物理学I论文润色/翻译怎么收费?
已经有191人回复
新西兰Robinson研究所 招聘CSC公派访问人员
已经有0人回复
帮我的英语口语老师找学生
已经有0人回复
什么时候开奖?
已经有13人回复
散金币祈福
已经有94人回复
青基已中
已经有1人回复
散金币祈福
已经有185人回复
求助,如何提取ELK的rt-TDDFT在某一时刻的自旋密度分布和电子密度分布
已经有1人回复

找到一些相关的精华帖子,希望有用哦~
求助用matlab拟合动力学方程
已经有9人回复
求助用matlab拟合动力学方程
已经有13人回复
matlab 拟合反应动力学参数
已经有8人回复
Matlab 动力学方程拟合的很差,郁闷,大侠们帮助一下。先谢了
已经有5人回复
重金请教-如何用MAtlab对力学模型进行参数识别
已经有12人回复
matlab求解动力学 方程中的参数
已经有13人回复
matlab 拟合反应动力学参数结果很差。大家帮忙看一下
已经有14人回复
matlab 求指点 动力学方程拟合过程中导数的获取
已经有10人回复
matlab代码求解水动力学方程看不懂,请高手指点
已经有4人回复
有用MATLAB做化学反应动力学模拟的吗
已经有7人回复
【求助】催化反应动力学matlab计算各基元反应的速率常数时,该如何避免较小量被忽略?
已经有3人回复
【求助】使用Matlab拟合反应动力学方程问题
已经有7人回复
【求助】使用Matlab预估动力学方程问题
已经有13人回复
科研从小木虫开始,人人为我,我为人人










回复此楼
点击这里搜索更多相关资源
30