xuhaida76的个人博客分享 http://blog.sciencenet.cn/u/xuhaida76

博文

药物分析与matlab/octave:非线性数据拟合

已有 4007 次阅读 2018-11-10 20:53 |个人分类:octave|系统分类:科研笔记

 非线性数据拟合在药物分析中经常使用,比如:

  1.   药物动力学数据;

  2.   制剂溶出数据;

  3.   酶动力学参数的计算;

  4.   Elisa数据的处理等。

matlab中有多种方式进行非线性拟合:nlinfit,cftool等,因为octave中只有nlinfit,所以基于兼容性的考虑,我们只采用nlinfit函授,该函数用法如下:

beta = nlinfit(X,Y,modelfun,beta0)

beta = nlinfit(X,Y,modelfun,beta0,options)

beta = nlinfit(___,Name,Value)

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(___)

下面是几个例子:

 例子1 药物动力学中的数据拟合, 数据来自于《数理医药学杂志》,典型的药物动力学数据:

      

时间
2
5
10
20
30
60
90
120
150
180
210
浓度
766
659
470
300
239
180
160
145
132
123
112

下面是matlab计算过程:

%载入包文件

pkg load optim

%数据输入

t=[2 5 10 20 30 60 90 120 150 180 210];

c=[766 659 470 300 239 180 160 145 132 123 112];

% 设定拟合曲线方程

f=@(x,t) (x(1)*exp(-x(2)*t)+x(3)*exp(-x(4)*t));

% 设定初始值

b=[0 0 0 0];

% 修改迭代次数,默认次数太小

opts=statset('MaxIter',1000);

% 进行拟合

[b,r,j]=nlinfit(t,c,f,x0,opts)

就可以得到结果。


需要加以注意的是octave中MaxIter的默认值太小为400,需要修改默认参数。


例子2为药物溶出的数据,同样的方法进行weibull计算:


t=[20 25 30 35 40 50 60  90 120 180]

p=[0.046 0.11 0.19 0.22 0.27 0.31 0.42 0.59 0.72 0.86];

f=@(x,t)(1-exp(t-x(1)).^x(2)/x(3)))

nlinfit(t,p,f,x0)

就可以了。


其中主要的问题是该函数对于初始值敏感,还有就是函数定义要正确。



https://wap.sciencenet.cn/blog-1251937-1145568.html

上一篇:被忽略掉的课程
下一篇:《julia语言程序设计》读后
收藏 IP: 115.192.16.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-15 15:13

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部