matlab statset函数,科学网—药物分析与matlab/octave:非线性数据拟合 - 徐海达的博文...

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

制剂溶出数据;

酶动力学参数的计算;

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 药物动力学中的数据拟合, 数据来自于《数理医药学杂志》,典型的药物动力学数据:

时间251020306090120150180210

浓度766659470300239180160145132123112

下面是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)

就可以了。

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

转载本文请联系原作者获取授权,同时请注明本文来自徐海达科学网博客。

链接地址:http://blog.sciencenet.cn/blog-1251937-1145568.html

上一篇:被忽略掉的课程

下一篇:《julia语言程序设计》读后

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值