24小时热门版块排行榜    

查看: 628  |  回复: 2

llgcty

金虫 (正式写手)

[求助] 在线等,请版主看看如何运算不了。总是报错

小弟实在是一窍不通对matlab,不要怪小弟提的问题比较傻,一个是报错中的问题,这个[k,fval,flag] = fmincon(@ObjFunc7Fmincon一句的@ObjFunc7Fmincon是怎么设定的?我看有的人写@ObjFunc4Fmincon.
然后麻烦大家看看这个我自己模拟的代码,是按照版主 @dbb627的代码写的,到底是哪里不对麻烦改下谢谢了。
function parafit
%  
% r1 = k(1)*C(1);
% r2 = k(2)*C(1);
% r3 = k(3)*C(2);
% r4 = k(4)*C(3);
% r5 = k(5)*C(2);
% r6 = k(6)*C(3);
%
% dCAdt = - r1 - r2;
% dCBdt = r1 + r4 - r3 - r5;
% dCCdt = r2 + r3 - r4 – r6 ;
% dCDdt = r5 + r6;
clear all
clc
%        t/min   CA-1     CB-2        CC-3   CD-4   / mol/L
  Kinetics=[0       100    0         0          0      
          10        0.2441  0.1390   0.28.31   0.0171   
          20        0.432  0.1629   0.2370   0.0192   
          30        0.756   0.1992  0.2509    0.0349   
          40        0.522   0.2091   0.2737    0.0531   
          50        0.426    0.1967   0.3231   0.0634   
          60        0.397    0.1803   0.3536   0.0822   
          70        0.431    0.1732   0.3330   0.0945  
          80        0.531   0.1645    0.3310  0.0987];
k0 = [0.0000000005  0.0000000005  0.0000000005  0.00000000005  0.00000005  0.00000005];         % 参数初值
lb = [0  0  0  0  0  0];                   % 参数下限
ub = [1 1  1  1  1  1];    % 参数上限
x0 = [100  0  0  0];
yexp = Kinetics;                  % yexp: 实验数据[x1        x4        x5        x6]
warning off
% 使用函数fmincon()进行参数估计
[k,fval,flag] = fmincon(@ObjFunc7Fmincon,k0,[],[],[],[],lb,ub,[],[],x0,yexp);
fprintf('\n使用函数fmincon()估计得到的参数值为:\n')
fprintf('\tk1 = %.11f\n',k(1))
fprintf('\tk2 = %.11f\n',k(2))
fprintf('\tk3 = %.11f\n',k(3))
fprintf('\tk4 = %.11f\n',k(4))
fprintf('\tk5 = %.11f\n',k(5))
fprintf('\tk6 = %.11f\n',k(6))
fprintf('  The sum of the squares is: %.1e\n\n',fval)
k_fm= k;
warning off
% 使用函数lsqnonlin()进行参数估计
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@ObjFunc7LNL,k0,lb,ub,[],x0,yexp);      
ci = nlparci(k,residual,jacobian);
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.11f\n',k(1))
fprintf('\tk2 = %.11f\n',k(2))
fprintf('\tk3 = %.11f\n',k(3))
fprintf('\tk4 = %.11f\n',k(4))
fprintf('\tk5 = %.11f\n',k(5))
fprintf('\tk6 = %.11f\n',k(6))
fprintf('  The sum of the squares is: %.1e\n\n',resnorm)
k_ls = k;
output
warning off
% 以函数fmincon()估计得到的结果为初值,使用函数lsqnonlin()进行参数估计
k0 = k_fm;
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@ObjFunc7LNL,k0,lb,ub,[],x0,yexp);      
ci = nlparci(k,residual,jacobian);
fprintf('\n\n以fmincon()的结果为初值,使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.11f\n',k(1))
fprintf('\tk2 = %.11f\n',k(2))
fprintf('\tk3 = %.11f\n',k(3))
fprintf('\tk4 = %.11f\n',k(4))
fprintf('\tk5 = %.11f\n',k(5))
fprintf('\tk6 = %.11f\n',k(6))
fprintf('  The sum of the squares is: %.1e\n\n',resnorm)
k_fmls = k;
output
tspan = [0 : 10 : 80];
[t x] = ode45(@KineticEqs,tspan,x0,[],k_fmls);
figure;
plot(t,x(:,1),t,yexp(:,2),'*');legend('ca-pr','ca-real')
figure;plot(t,x(:,2:5));
hold on
plot(t,yexp(:,3:6),'o');legend('cb-pr','cc-pr','cd-pr','ce-pr','cb-real','cc-real','cd-real','ce-real')
% ------------------------------------------------------------------
function f = ObjFunc7Fmincon(k,x0,yexp)
tspan = [0 : 10 : 80];
[t x] = ode45(@KineticEqs,tspan,x0,[],k);   
y(:,2) = x(:,1);
y(:,3:6) = x(:,2:5);
f =  sum((y(:,2)-yexp(:,2)).^2) + sum((y(:,3)-yexp(:,3)).^2)   ...
    + sum((y(:,4)-yexp(:,4)).^2) + sum((y(:,5)-yexp(:,5)).^2)   ...
    + sum((y(:,6)-yexp(:,6)).^2) ;

% ------------------------------------------------------------------
function f = ObjFunc7LNL(k,x0,yexp)
tspan = [0.0 : 10 : 80];
[t x] = ode45(@KineticEqs,tspan,x0,[],k);   
y(:,2) = x(:,1);
y(:,3:6) = x(:,2:5);
f1 = y(:,2) - yexp(:,2);
f2 = y(:,3) - yexp(:,3);
f3 = y(:,4) - yexp(:,4);
f4 = y(:,5) - yexp(:,5);
f5 = y(:,6) - yexp(:,6);
f = [f1; f2; f3; f4; f5];

% ------------------------------------------------------------------
function dxdt = KineticEqs(t,x,k)
r1 = k(1)*x(1);
r2 = k(2)*x(1);
r3 = k(3)*x(2);
r4 = k(4)*x(3);
r5 = k(5)*x(2);
r6 = k(6)*x(3);

dCAdt = - r1 - r2;
dCBdt = r2 + r4 - r3 - r5;
dCCdt = r2 + r3 - r4 - r6;
dCDdt = r5 + r6;

dxdt = [dCAdt; dCBdt; dCCdt; dCDdt];
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

llgcty

金虫 (正式写手)

快点来吧,帮忙一下!!!
2楼2015-11-29 21:52:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

llgcty

金虫 (正式写手)

各位大神帮帮忙
3楼2015-11-30 11:21:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 llgcty 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 0854 考研调剂 招生了!AI 方向 +5 pk3725069 2026-03-19 17/850 2026-03-24 17:30 by zhouxuan..
[考研] 求调剂 +6 研研,接电话 2026-03-24 7/350 2026-03-24 17:01 by barlinike
[考研] 0856材料专硕353求调剂 +5 NIFFFfff 2026-03-20 5/250 2026-03-24 11:46 by 544594351
[考研] 284求调剂 +10 Zhao anqi 2026-03-22 10/500 2026-03-24 00:08 by Equinoxhua
[考研] 303求调剂 +4 元夕元 2026-03-20 4/200 2026-03-23 19:00 by macy2011
[考研] 一志愿南京理工大学085701资源与环境302分求调剂 +5 葵梓卫队 2026-03-18 7/350 2026-03-23 16:26 by lingjue
[考研] 263求调剂 +6 yqdszhdap- 2026-03-22 9/450 2026-03-23 12:57 by yqdszhdap-
[考研] 一志愿070300浙大化学358分,求调剂! +4 酥酥鱼.. 2026-03-21 4/200 2026-03-23 08:12 by Iveryant
[考研] 289材料与化工(085600)B区求调剂 +3 这么名字咋样 2026-03-22 4/200 2026-03-22 17:56 by 云民大李老师
[考研] 260求调剂 +3 朱芷琳 2026-03-20 4/200 2026-03-22 15:12 by 朱芷琳
[考研] 318求调剂 +4 plum李子 2026-03-21 7/350 2026-03-22 14:17 by ColorlessPI
[考研] 材料工程专硕 348分求调剂 +3 冬辞. 2026-03-17 5/250 2026-03-21 18:47 by 学员8dgXkO
[考研] 311求调剂 +3 勇敢的小吴 2026-03-20 3/150 2026-03-21 17:40 by ColorlessPI
[基金申请] 学校已经提交到NSFC,还能修改吗? 40+4 babangida 2026-03-19 9/450 2026-03-21 16:12 by babangida
[考研] 085700资源与环境308求调剂 +12 墨墨漠 2026-03-18 13/650 2026-03-21 01:42 by JourneyLucky
[考研] 一志愿中海洋材料工程专硕330分求调剂 +8 小材化本科 2026-03-18 8/400 2026-03-20 23:16 by JourneyLucky
[考研] 一志愿武汉理工材料工程专硕调剂 +9 Doleres 2026-03-19 9/450 2026-03-20 22:36 by JourneyLucky
[考研] 材料学求调剂 +4 Stella_Yao 2026-03-20 4/200 2026-03-20 20:28 by ms629
[考研] 本科郑州大学物理学院,一志愿华科070200学硕,346求调剂 +4 我不是一根葱 2026-03-18 4/200 2026-03-19 09:11 by 浮云166
[考研] 【同济软件】软件(085405)考研求调剂 +3 2026eternal 2026-03-18 3/150 2026-03-18 19:09 by 搏击518
信息提示
请填处理意见