24小时热门版块排行榜    

查看: 1079  |  回复: 12

zhaoshazhu

新虫 (小有名气)

[求助] 求Matlab高手指导 已有1人参与

Matlab运算结果的置信区间很大,和什么有关系呢?
function KineticsEst6
clear all
clc
tspan = [0 662.25];
k0 = [0.4587 0.4971  10  12 6 8 205 0.5653];   
lb = [0  0  0  0  0 0 0];
ub = [50  50  100  100 50 50 1000 50];

P0 =[0.04020         4.02010         0.18794         0        0;
     0.02228         4.45682         0.10418         0        0;
     0.01541         4.62428         0.07206         0        0;
     0.01336         4.67446         0.06244         0        0;
     0.04020         4.02010         0.18794         0        0;
     0.04020         4.02010         0.18794         0        0;
     0.04020         4.02010         0.18794         0        0
];  % 初始分压,MPa

Pi=[0.01303         4.00374         0.96404         0.007095         0.012097;
    0.00393         4.44636         0.53626         0.074475         0.005998;
    0.00127         4.61707         0.37150         0.070931         0.003074;
    0.00090         4.66795         0.32206         0.066794         0.002414;
    0.00243         4.00519         0.96961         0.158768         0.006883;
    0.00681         4.00390         0.96766         0.117792         0.009855;
    0.01303         4.00374         0.96404         0.070945         0.012097
];
% 经过Wc/F0后,各物质分压,MPa

% 使用函数lsqnonlin()进行参数估计
options=optimset('MaxFunEvals',1000000,'MaxIter',400000)
[k,resnorm,residual,exitflag,output,lambda,jacobian] = lsqnonlin(@ObjFunc,k0,lb,ub,[],P0,Pi);      
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))
% ------------------------------------------------------------------
function f = ObjFunc(k,P0,Pi)           % 目标函数
[m,n] = size(P0);
Pcal = zeros(m,n);
tspan =[0 662.25];         % 即Wc/F0,g.h/mol
for i = 1:m
[t PP] = ode45(@Euqations,tspan,P0(i,,[],k);
Pcal(i, = PP(end,;
end
f= Pcal-Pi;

% ------------------------------------------------------------------
function dPdt = Euqations(t, P, k)        % here t = Wc / F0
denom = 1+k(3)*P(1)+k(5)*P(4)+k(5)*P(3)+k(6)*P(5);               % k(3) = KDMM, k(4) = KME ,k(5)=KHPM,k(6)=KPDO,k(7)=Kp1,k(8)=Kp2
theA =k(3)*P(1)*P(2)*(1-P(4)*P(3)/k(7)*P(1)*P(2)^2) / denom;
theB =k(5)* P(4)*P(2)*(1-P(5)*P(3)/k(8)*P(4)*P(2)^2)/ denom;
r1 = k(1)*theA;
r2 = k(2)*theB;

dPDMMdt = -r1;
dPHdt = -2*r1-2*r2;
dPMEdt = r1+r2;
dPHPMdt = r1-r2;
dPPDOdt = r2;

dPdt = [dPDMMdt;dPHdt;dPMEdt;dPHPMdt;dPPDOdt];
使用函数lsqnonlin()估计得到的参数值为:
        k1 = 0.4599 ± 89509.6910
        k2 = 0.4971 ± 101889.0949
        k3 = 10.0001 ± 1946900.8019
        k4 = 12.0000 ± 8639183.4320
        k5 = 5.9997 ± 420897.9438
        k6 = 7.9999 ± 2837488.5903
        k7 = 205.0000 ± 1472315356.6507
        k8 = 0.5653 ± 3696268.6136
结果和我设的初值一样,是不是就没有计算程序。
回复此楼

» 猜你喜欢

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

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

月只蓝

主管区长 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
这算是很普遍的问题了,初值给得不好。建议添加相关系数或者决定系数定量地考察拟合效果,只看输出的参数数值没什么意义。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2014-10-24 16:25:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

楼上说初值给得不好是因为 MATLAB 的lsqnonlin 对初值的依赖性很大
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
3楼2014-10-24 16:27:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhaoshazhu

新虫 (小有名气)

引用回帖:
3楼: Originally posted by 月只蓝 at 2014-10-24 16:27:49
楼上说初值给得不好是因为 MATLAB 的lsqnonlin 对初值的依赖性很大

您可以帮我设计一下吗,因为我不是搞模拟的,这只是我论文中的一部分,我是初学者有点不入门。程序里需要加一些残差平方和,相关系数或者其他的,您可以帮我吗?谢谢了
4楼2014-10-24 21:14:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhaoshazhu

新虫 (小有名气)

引用回帖:
2楼: Originally posted by 月只蓝 at 2014-10-24 16:25:38
这算是很普遍的问题了,初值给得不好。建议添加相关系数或者决定系数定量地考察拟合效果,只看输出的参数数值没什么意义。

我现在改初值就会运行的特别慢,计算不出结果,是因为我的程序写的不对吗?您可以帮我看一下吗,我是初学者,对Matlab不怎么入门,帮我在程序中相应的残差平方和,残差,相关系数吧。。。谢谢啦
5楼2014-10-24 21:17:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhaoshazhu

新虫 (小有名气)

引用回帖:
3楼: Originally posted by 月只蓝 at 2014-10-24 16:27:49
楼上说初值给得不好是因为 MATLAB 的lsqnonlin 对初值的依赖性很大

非常感谢您能帮我解答。。
6楼2014-10-24 21:19:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

引用回帖:
5楼: Originally posted by zhaoshazhu at 2014-10-24 21:17:26
我现在改初值就会运行的特别慢,计算不出结果,是因为我的程序写的不对吗?您可以帮我看一下吗,我是初学者,对Matlab不怎么入门,帮我在程序中相应的残差平方和,残差,相关系数吧。。。谢谢啦...

参见:http://muchong.com/bbs/viewthread.php?tid=7603645
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
7楼2014-10-25 09:01:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhaoshazhu

新虫 (小有名气)

引用回帖:
7楼: Originally posted by 月只蓝 at 2014-10-25 09:01:06
参见:http://muchong.com/bbs/viewthread.php?tid=7603645...

谢谢您的指导
8楼2014-10-25 09:54:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhaoshazhu

新虫 (小有名气)

引用回帖:
7楼: Originally posted by 月只蓝 at 2014-10-25 09:01:06
参见:http://muchong.com/bbs/viewthread.php?tid=7603645...

我之前也尝试过1stop但是我需要龙格库塔法计算所以不能使用。我现在也不知道初值怎么选取,是一个很头疼的问题,有时候根本运算不出结果,是因为我的程序不对的原因吗?我想让您多帮我一下。
9楼2014-10-25 10:00:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

引用回帖:
9楼: Originally posted by zhaoshazhu at 2014-10-25 10:00:27
我之前也尝试过1stop但是我需要龙格库塔法计算所以不能使用。我现在也不知道初值怎么选取,是一个很头疼的问题,有时候根本运算不出结果,是因为我的程序不对的原因吗?我想让您多帮我一下。...

程序能跑通就是对的。
出不来结果和初值关系很大,用MATLAB,目前我也没有很好的办法能解决这个问题。

我推荐你联系一下 dingd,他有高版本的 1stopt软件,他的软件帮你做这个问题,就很简单,而且结果比MATLAB的好。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
10楼2014-10-25 10:57:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zhaoshazhu 的主题更新
信息提示
请填处理意见