CODE:

function KineticsEst5 % 动力学ODE方程模型的参数估计

%

%

%

% The variables y here are y(1)=xB, y(2)=xoNB, y(3)=xmNB,y(4)=xpNB,y(5)=xDNB .

clear all

clc

k0 = [5 5 5 5 5]; % 参数初值

lb = [0 0 0 0 0]; % 参数下限

ub = [+inf +inf +inf +inf +inf]; % 参数上限

x0 = [0 0 0 0 0 0];

KineticsData;

yexp = ExpData(:,2:6); % yexp: 实验数据[x1 x4 x5 x6]

% 使用函数fmincon()进行参数估计

[k,fval,flag] = fmincon(@ObjFunc4Fmincon,k0,[],[],[],[],lb,ub,[],[],x0,yexp);

fprintf('\n使用函数fmincon()估计得到的参数值为:\n')

fprintf('\tk1 = %.4f\n',k(1))

fprintf('\tk2 = %.4f\n',k(2))

fprintf('\tk3 = %.4f\n',k(3))

fprintf('\tk4 = %.4f\n',k(4))

fprintf('\tk5 = %.4f\n',k(5))

fprintf(' The sum of the squares is: %.1e\n\n',fval)

k_fmincon = k;

% 使用函数lsqnonlin()进行参数估计

[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...

lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],x0,yexp);

ci = nlparci(k,residual,jacobian);

fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')

Output

% 以函数fmincon()估计得到的结果为初值,使用函数lsqnonlin()进行参数估计

k0 = k_fmincon;

[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...

lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],x0,yexp);

ci = nlparci(k,residual,jacobian);

fprintf('\n\n以fmincon()的结果为初值,使用函数lsqnonlin()估计得到的参数值为:\n')

Output

% ------------------------------------------------------------------

function f = ObjFunc4Fmincon(k,x0,yexp)

tspan = [0.00 : 5.03 : 15.09];

[t x] = ode45(@KineticEqs,tspan,x0,[],k);

y(:,1) = x(:,1);

y(:,2:4) = x(:,4:6);

f = sum((y(:,1)-yexp(:,1)).^2) + sum((y(:,2)-yexp(:,2)).^2) ...

+ sum((y(:,3)-yexp(:,3)).^2) + sum((y(:,4)-yexp(:,4)).^2);

% ------------------------------------------------------------------

function f = ObjFunc4LNL(k,x0,yexp)

tspan = [0.00 : 5.03 : 15.09];

[t x] = ode45(@KineticEqs,tspan,x0,[],k);

y(:,1) = x(:,1);

y(:,2:4) = x(:,4:6);

f1 = y(:,1) - yexp(:,1);

f2 = y(:,2) - yexp(:,2);

f3 = y(:,3) - yexp(:,3);

f4 = y(:,4) - yexp(:,4);

f = [f1; f2; f3; f4];

% ------------------------------------------------------------------

function dxdt = KineticEqs(t,x,k)

M=1.003;

dxdt = ...

[ ( (k(1)+k(2)+k(3))*(1-x(1))*M*(1-x(2)-x(3)-x(4)-2*x(5)) )

( M*(1-x(2)-x(3)-x(4)-2*x(5))*(k(1)*(1-x(1))-k(4)*x(2)) )

( k(2)*(1-x(1))*M*(1-x(2)-x(3)-x(4)-2*x(5)) )

( M*(1-x(2)-x(3)-x(4)-2*x(5))*(k(3)*(1-x(1))-k(5)*x(4)) )

( M*(1-x(2)-x(3)-x(4)-2*x(5))*(k(4)*x(2)+k(5)*x(4)) )

];

matlab数值很小出错,求大神帮忙解决一下,用MATLAB求解动力学数据总是出错~ - 计算模拟 - 小木虫 - 学术 科研 互动社区...相关推荐

  1. ubuntu14.04扩展屏幕后,打开matlab就死机。求大神帮忙解决!!!万分感谢

    ubuntu14.04扩展屏幕后,打开matlab就死机.求大神帮忙解决!!!万分感谢

  2. mbio期刊拒稿率_为什么第一篇SCI这么难中,投了两个期刊都说不适合拒我啊 - 论文投稿 - 小木虫 - 学术 科研 互动社区...

    哎,总觉得读博士水平还差很远,苦心琢磨了一篇文章,准备为博士毕业做下准备,谁知道两篇都被编辑以不合适在本刊发表而拒我,这到底是怎么回事呢?我自己觉得挺切合他们期刊的主题的啊,求大神帮忙解释下. 第一篇 ...

  3. linux写脚本实现作业检查,救大神帮忙调试linux系统上用qsub提交MS作业的脚本,万分感激!!! - 第一原理 - 小木虫 - 学术 科研 互动社区...

    在linux系统上已经安装好了MS8.0,也设定好了环境变量,可以直接用RunVASTEP.sh -np 24 job_name & 提交作业,但是不能分配节点,qstat也看不到作业.现在想 ...

  4. matlab画最小二乘线,matlab非线性最小二乘法求解 - 计算模拟 - 小木虫 - 学术 科研 互动社区...

    dingd 1stOpt求解:CODE: Variable A,B,C,D,E,Y; ParameterDomain = [0,]; Function Y=aa*A+bb*B+cc*C+dd*D+ee ...

  5. matlab如何取等距点,matlab编程等距取点 - 程序语言 - 小木虫 - 学术 科研 互动社区...

    各位大神,我想用matlab编一个程序,目的是对于一组数据等距取点,但不会写,请各位赐教! 首先,我有一个21×4的矩阵A[21,4],希望对每一列数据每间隔3个点取一个数,然后将这些取出来的点保存在 ...

  6. matlab decomposition filters,MATLAB小波去噪求助(附算法和显示图片)!不知自己哪个地方出了问题,求指点! - 信息科学 - 小木虫 - 学术 科研 互动社区...

    star2883 不是非常明白楼主的意思.我的理解是: 问题1:为什么中间两幅图,显示的都是空白? 答:你是指Figure2和Figure3的显示中,全是白色吗?这个是因为你用了colormap(ma ...

  7. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...

    libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...

  8. matlab 吸波材料,如何计算多层吸波材料的反射率 - 材料 - 小木虫 - 学术 科研 互动社区...

    各位大神,小女子最近在做多层吸波材料,可以测得每层材料的电磁参数,然后请同学编了一个计算多层吸波材料反射率的MATLAB程序,但行出来总觉得好像有点问题,有没有哪位可以帮我看一下程序对不对呢? PS: ...

  9. comsol matlab 循环,comsol保存为m文件,怎样在m文件里面加入for循环 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    我利用comsol做好一个案例后,需要大量改变一个参数值,于是我将mph文件保存为m文件,加入了一个for循环,利用comsol with matlab运行,但是显示错误,哪位大神晓得怎样在comso ...

  10. 学习 lt MATLAB gt 心得,lt;lt;MATLAB可视化大学物理学gt;gt;使大学物理更具体,更有趣。 - 物理 - 小木虫 - 学术 科研 互动社区...

    现代大学生除了会运用高等数学解决大学物理中的问题之外,还应该学会应用计算机语言--特别是MATLAB--解决问题. 通过MATLAB可帮助学生学习物理知识.例如,麦克斯韦速率分布率看起来很复杂,但是, ...

最新文章

  1. 教育学专硕考试科目计算机,2017考研:哪些专业的考试科目相同?
  2. 哪些深度相机有python接口_python 从深度相机realsense生成pcl点云
  3. 【干货】用Axure做原型,一秒钟提高效率的必知技巧总结
  4. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc
  5. Android无需权限显示悬浮窗, 兼谈逆向分析app
  6. python实现监控电脑打开网页_Python轻松实现动态网页爬虫(附详细源码)
  7. ​Redis分布式锁,你真的用对了吗?
  8. 阿里云centos 6.9安装oracle10g
  9. paip.提升性能----硬盘不同转速不同缓存对比转
  10. sql与MySQL like用法_MySQL中Like概念及用法讲解
  11. 如何去掉暴风影音广告,去掉暴风影音暂停时的广告
  12. java jdom_java中JDOM的基本使用方法
  13. Ubuntu软件下载速度慢解决
  14. 个人设置随身携带口袋操作系统手到擒来
  15. 如何用WPS表格制作甘特图?WPS表格制作甘特图详解!
  16. SQLServer -ServiceBroker
  17. matlab中常微分方法,MATLAB常微分方程
  18. NAND flash 和 NOR flash 区别
  19. oracle日志如何查看,oracle如何查看日志
  20. Hadoop生态圈(十六)- HDFS Snapshot快照详解

热门文章

  1. 各种数据库对应的jar包、驱动类名和URL格式
  2. windows简易版本 Redis 使用 demo样例(ssm框架下)
  3. spring用的很开心的标签(随时增加)
  4. SAP web 开发 (第二篇 bsp 开发 mvc模式 Part2 )
  5. hadoop中实现定制Writable类
  6. [转]关于sizeof()的一些思考
  7. .NET高级代码审计(第三课)Fastjson反序列化漏洞
  8. Python3 与 C# 并发编程之~ 进程篇
  9. [UWP]了解模板化控件(4):TemplatePart
  10. Linux命令之useradd和userdel(添加、删除用户)