24小时热门版块排行榜    

查看: 948  |  回复: 4

你的CEO

铁虫 (小有名气)

[求助] 动力学参数拟合matlab程序有问题 已有1人参与

求大神帮看下程序问题在哪?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

未来为你而来!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

你的CEO

铁虫 (小有名气)

程序如下 :

function PX4800602


clear all
clc
global x0
% k0 = [1.8887    0.0036    0.0070    0.7557    0.1455];
% k0 = [4.4163008451    0.0033686022     0.0065669052   1.6201160059   16.2647816];
k0= [ 5.2766233638  0.0030934069    0.0060459974    1.8656945060   20.6241874];

% 参数初值
lb = [0  0  0  0 0];                   % 参数下限
ub = [+inf  +inf  +inf  +inf  +inf ];    % 参数上限
x0 = [0 0 0 0 0 0];
tspn=[0   43.2  72];


% yexp =[0 0 0 0 0;0.2282 0.2067 0.0057 0.0025 0.0132;0.2394 0.2170 0.0063 0.0037 0.0123; 0.2515 0.2278 0.0069 0.0040        0.0128;0.2638 0.2378 0.0081        0.0043        0.0135;0.2738109        0.2461347        0.0049171        0.011883        0.01087607];                   % yexp: 实验数据

% yexp =[0 0 0 0 0;22.81824        20.67075        0.571198 0.253676                1.322614; 23.94047        21.7016        0.633422 0.372055                1.233396;25.14798        22.77878        0.692198 0.39614        1.280859;26.37669        23.78016        0.811828 0.432807                1.351893;27.38109        24.61347        0.8883        0.49171        1.387607]*0.01;                   % yexp: 实验数据

yexp=[0         0       0       0       0     0;
     22.253         20.067         0.340         0.633         1.213 53.06753634;
     23.532         21.175         0.385         0.662         1.310 50.31636493];
   
% yexp=[0 0 0 0 0 0;23.679         21.655         0.421         0.715         0.888 50.9; 24.415         22.131         0.463         0.724         1.096 48.978;25.148         22.580         0.481         0.751         1.336 47.073;26.377         23.580         0.564         0.869         1.364 44.518;27.110         23.948         0.594         1.177         1.392 43;
%     15.51 14.1        0.2476        0.545        0.614 67.75;15.78 14.24        0.265        0.6352        0.632 67.18;16.4 14.51        0.292        0.672        0.937 65.32;]*0.01;  % yexp: 两个配比
% yexp=[0 0 0 0 0 0;23.679         21.655         0.421         0.715         0.888 50.9; 24.415         22.131         0.463         0.724         1.096 48.978;25.148         22.580         0.481         0.751         1.336 47.073;26.377         23.580         0.564         0.869         1.364 44.518;27.110         23.948         0.594         1.177         1.392 43;] % yexp: 一个配比
% 使用函数lsqnonlin()进行参数估计
[k,resnorm,residual,exitflag,output,lambda,jacobian] = lsqnonlin(@ObjFunc4LNL,k0,lb,ub,optimset('TolFun',1.0000e-12),x0,yexp);   
ci = nlparci(k,residual,jacobian)
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.10f ± %.7f\n',k(1),ci(1,2)-k(1))
fprintf('\tk2 = %.10f ± %.7f\n',k(2),ci(2,2)-k(2))
fprintf('\tk3 = %.10f ± %.7f\n',k(3),ci(3,2)-k(3))
fprintf('\tk4 = %.10f ± %.7f\n',k(4),ci(4,2)-k(4))
fprintf('\tk5 = %.7f ± %.7f\n',k(5),ci(5,2)-k(5))
% fprintf('\tk6 = %.7f ± %.7f\n',k(4),ci(6,2)-k(6))
fprintf('  The sum of the squares is: %.1e\n\n',resnorm)



% ------------------------------------------------------------------
function f = ObjFunc4LNL(k,x0,yexp)
tspn=[0 43.2 72];
[t x] = ode45(@KineticEqs1,tspn,x0,[],k);
y = x
f1 = y(2:3,1) - yexp(2:3,1);
f2 = y(2:3,2) - yexp(2:3,2);
f3 = y(2:3,3) - yexp(2:3,3);
f4 = y(2:3,4) - yexp(2:3,4);
f5 = y(2:3,5) - yexp(2:3,5);
f6 = y(2:3,6) - yexp(2:3,6);
z1=x

% -------------------------------------------不同配比的方程组
function dxdt = KineticEqs1(t,x,k)
p0=1.3*1;
dxdt =  ...
[(k(1)*(2*p0*(1-x(1))/(19+0.5*x(6)))*(1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6)))
(k(1)*(2*p0*(1-x(1))/(19+0.5*x(6)))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6)))-2*(k(2)+k(3))*p0*x(2)/(19+0.5*x(6))-2*k(4)*p0*x(2)/(19+0.5*x(6))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6))))
  (2*k(2)*p0*x(2)/(19+0.5*x(6))-2*k(4)*p0*x(3)/(19+0.5*x(6))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6))))
   (2*k(3)*p0*x(2)/(19+0.5*x(6))-2*k(4)*p0*x(4)/(19+0.5*x(6))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6))))
   (k(4)*(2*(x(2)+x(3)+x(4))*p0/(19+0.5*x(6)))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6))))
   (2*k(5)*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6)))^2)
   ];
未来为你而来!
2楼2015-10-10 13:49:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

你的CEO

铁虫 (小有名气)

??? Error using ==> feval
Output argument "f" (and maybe others) not assigned during call to
"C:\Users\cai\Desktop\Matlab模拟\PX程序\PX新动力学\拟合程序\PX480602.m>ObjFunc4LNL".

**********错误提示*****************

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

Error in ==> PX480602 at 30
[k,resnorm,residual,exitflag,output,lambda,jacobian] =
lsqnonlin(@ObjFunc4LNL,k0,lb,ub,optimset('TolFun',1.0000e-12),x0,yexp);

Caused by:
    Failure in initial user-supplied objective function evaluation. LSQNONLIN cannot continue.
未来为你而来!
3楼2015-10-10 13:50:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
你的CEO: 金币+10, 有帮助, 感谢 2015-10-18 16:59:24
引用回帖:
3楼: Originally posted by 你的CEO at 2015-10-10 13:50:13
??? Error using ==> feval
Output argument "f" (and maybe others) not assigned during call to
"C:\Users\cai\Desktop\Matlab模拟\PX程序\PX新动力学\拟合程序\PX480602.m>ObjFunc4LNL& ...

第55行加一句:
f=[f1;f2;f3;f4;f5;f6];

修改后代码如下,已经可以运行:
CODE:
function PX4800602


clear all
clc
global x0
% k0 = [1.8887    0.0036    0.0070    0.7557    0.1455];
% k0 = [4.4163008451    0.0033686022     0.0065669052   1.6201160059   16.2647816];
k0= [ 5.2766233638  0.0030934069    0.0060459974    1.8656945060   20.6241874];

% 参数初值
lb = [0  0  0  0 0];                   % 参数下限
ub = [+inf  +inf  +inf  +inf  +inf ];    % 参数上限
x0 = [0 0 0 0 0 0];
tspn=[0   43.2  72];


% yexp =[0 0 0 0 0;0.2282 0.2067 0.0057 0.0025 0.0132;0.2394 0.2170 0.0063 0.0037 0.0123; 0.2515 0.2278 0.0069 0.0040        0.0128;0.2638 0.2378 0.0081        0.0043        0.0135;0.2738109        0.2461347        0.0049171        0.011883        0.01087607];                   % yexp: 实验数据

% yexp =[0 0 0 0 0;22.81824        20.67075        0.571198 0.253676                1.322614; 23.94047        21.7016        0.633422 0.372055                1.233396;25.14798        22.77878        0.692198 0.39614        1.280859;26.37669        23.78016        0.811828 0.432807                1.351893;27.38109        24.61347        0.8883        0.49171        1.387607]*0.01;                   % yexp: 实验数据

yexp=[0         0       0       0       0     0;
     22.253         20.067         0.340         0.633         1.213 53.06753634;
     23.532         21.175         0.385         0.662         1.310 50.31636493];
   
% yexp=[0 0 0 0 0 0;23.679         21.655         0.421         0.715         0.888 50.9; 24.415         22.131         0.463         0.724         1.096 48.978;25.148         22.580         0.481         0.751         1.336 47.073;26.377         23.580         0.564         0.869         1.364 44.518;27.110         23.948         0.594         1.177         1.392 43;
%     15.51 14.1        0.2476        0.545        0.614 67.75;15.78 14.24        0.265        0.6352        0.632 67.18;16.4 14.51        0.292        0.672        0.937 65.32;]*0.01;  % yexp: 两个配比
% yexp=[0 0 0 0 0 0;23.679         21.655         0.421         0.715         0.888 50.9; 24.415         22.131         0.463         0.724         1.096 48.978;25.148         22.580         0.481         0.751         1.336 47.073;26.377         23.580         0.564         0.869         1.364 44.518;27.110         23.948         0.594         1.177         1.392 43;] % yexp: 一个配比
% 使用函数lsqnonlin()进行参数估计
[k,resnorm,residual,exitflag,output,lambda,jacobian] = lsqnonlin(@ObjFunc4LNL,k0,lb,ub,optimset('TolFun',1.0000e-12),x0,yexp);   
ci = nlparci(k,residual,jacobian);
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.10f ± %.7f\n',k(1),ci(1,2)-k(1))
fprintf('\tk2 = %.10f ± %.7f\n',k(2),ci(2,2)-k(2))
fprintf('\tk3 = %.10f ± %.7f\n',k(3),ci(3,2)-k(3))
fprintf('\tk4 = %.10f ± %.7f\n',k(4),ci(4,2)-k(4))
fprintf('\tk5 = %.7f ± %.7f\n',k(5),ci(5,2)-k(5))
% fprintf('\tk6 = %.7f ± %.7f\n',k(4),ci(6,2)-k(6))
fprintf('  The sum of the squares is: %.1e\n\n',resnorm)



% ------------------------------------------------------------------
function f = ObjFunc4LNL(k,x0,yexp)
tspn=[0 43.2 72];
[t x] = ode45(@KineticEqs1,tspn,x0,[],k);
y = x;
f1 = y(2:3,1) - yexp(2:3,1);
f2 = y(2:3,2) - yexp(2:3,2);
f3 = y(2:3,3) - yexp(2:3,3);
f4 = y(2:3,4) - yexp(2:3,4);
f5 = y(2:3,5) - yexp(2:3,5);
f6 = y(2:3,6) - yexp(2:3,6);
z1=x;
f=[f1;f2;f3;f4;f5;f6];
% -------------------------------------------不同配比的方程组
function dxdt = KineticEqs1(t,x,k)
p0=1.3*1;
dxdt =  ...
[(k(1)*(2*p0*(1-x(1))/(19+0.5*x(6)))*(1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6)))
(k(1)*(2*p0*(1-x(1))/(19+0.5*x(6)))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6)))-2*(k(2)+k(3))*p0*x(2)/(19+0.5*x(6))-2*k(4)*p0*x(2)/(19+0.5*x(6))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6))))
  (2*k(2)*p0*x(2)/(19+0.5*x(6))-2*k(4)*p0*x(3)/(19+0.5*x(6))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6))))
   (2*k(3)*p0*x(2)/(19+0.5*x(6))-2*k(4)*p0*x(4)/(19+0.5*x(6))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6))))
   (k(4)*(2*(x(2)+x(3)+x(4))*p0/(19+0.5*x(6)))*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6))))
   (2*k(5)*((1-2*x(1)-2*x(5)-x(6))*p0/(19+0.5*x(6)))^2)
   ];

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
4楼2015-10-10 14:35:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

你的CEO

铁虫 (小有名气)

引用回帖:
4楼: Originally posted by 月只蓝 at 2015-10-10 14:35:18
第55行加一句:
f=;

修改后代码如下,已经可以运行:
function PX4800602


clear all
clc
global x0
% k0 = ;
% k0 = ;
k0= ;

% 参数初值
lb = ;                   % 参数下限
ub = ;    % ...

谢谢你,最近才登陆小木虫,可结果有问题呀,这是怎么回事,版主能看出来么

使用函数lsqnonlin()估计得到的参数值为:
        k1 = 0.0000000000 ± NaN
        k2 = 0.0001911071 ± NaN
        k3 = 0.0002896392 ± NaN
        k4 = 1.2592825422 ± NaN
        k5 = 19013.6021392 ± 30461010122.0232390
  The sum of the squares is: 7.0e+003
未来为你而来!
5楼2015-10-18 16:59:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 你的CEO 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 奇怪,两个人的filecode固定段从头到尾一模一样 +4 布布和一二 2026-08-10 4/200 2026-08-10 14:50 by 医学老男孩
[基金申请] 国自然结果 +4 Vierhys 2026-08-10 6/300 2026-08-10 14:29 by anjeeshine
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +6 家与远方 2026-08-10 9/450 2026-08-10 14:29 by 爱看书的可乐
[基金申请] 好奇怪的filecode +4 布布和一二 2026-08-08 5/250 2026-08-10 14:20 by 冰心玉壶晴
[基金申请] 应该是93bebmhtak前后十一个字符比较关键 +13 Lanmanbaby 2026-08-09 21/1050 2026-08-10 14:16 by 冰心玉壶晴
[基金申请] 据悉今年马上要出结果了 +7 瞬息宇宙 2026-08-10 8/400 2026-08-10 12:42 by Vivilian
[基金申请] 关于代码变化问题,想知道的进来 +16 且听虎啸 2026-08-07 23/1150 2026-08-10 12:35 by majunge000
[基金申请] 面上项目filecode邪修 +5 西山十月 2026-08-09 7/350 2026-08-10 07:32 by 仁砚薪传
[基金申请] filecode与中标关系的预测 +5 布布和一二 2026-08-07 5/250 2026-08-09 16:15 by 袁向阳007
[基金申请] fileCode有新解读? +10 Tide man 2026-08-08 18/900 2026-08-09 12:55 by 仁砚薪传
[基金申请] 国基金的申报应该改成非等额制,评价高的钱多评价低的钱少,但是增加资助率 +7 a089 2026-08-07 7/350 2026-08-08 18:05 by gltch
[基金申请] 基金中了 +14 laoda193707 2026-08-06 14/700 2026-08-08 00:23 by 实验小白ha
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 娱乐 +6 Tide man 2026-08-03 6/300 2026-08-07 22:40 by 铁帽子农民
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] 听说今天filecode变了 +24 布布和一二 2026-08-06 47/2350 2026-08-07 16:02 by zhiyanjiang
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
[基金申请] 有没有H口的?有收到消息的吗? +3 超级海虾 2026-08-04 3/150 2026-08-04 17:26 by 学教育滴
信息提示
请填处理意见