加载中…
个人资料
高山流水
高山流水
  • 博客等级:
  • 博客积分:0
  • 博客访问:245,494
  • 关注人气:60
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab调用cftool工具的函数 批量曲线拟合

(2013-09-16 15:58:45)
直接修改生成的拟合函数即可,然后利用cf_结构变量提取参数,其中cf_.a,cf_.b,cf_.c,……分别代表所设定的变量

Matlab调用cftool工具的函数方法

 (2011-09-30 10:39:13)
标签: 

matlab

 

杂谈

分类: Math

有一堆实验数据要拟合,MATLAB调用cftool工具箱,采用GUI模式显然会让人吐血,而用函数调用的方法就比较方便了。当然origin等软件可以批量弄,线性方程时matlab可以调用[p,e]=polyfit(x,y,n)完成。对于方程需要自定义时,个人认为Matlab的效率就更高了。

 

下面举个简化的拟合简单无温度系数形式的Arrhenius方程  K=A*exp(-E/RT)  例子:

1.原始数据:

T=[1000 1200 1400 1600 1800 2000];

K=[1.30E-04 1.60E-01 26 1.20E+03 2.30E+04 2.50E+05];

拟合方程形式 y=a*exp(b*x) 的Exponential形式

对T做一下基本转换:

Tr=-1./T;

2.先调用cftool,进行相关设置

  a. Data中设置x_data,y_data后Create data set

  b. Fitting中设置New Fit,Type of fit: Exponential--->a*exp(b*x),后Apply

  c. Curve Fitting Tool中File-->Generate M-file

3.修改 第一行 function createFit(Tr,K)为function [cf_,gof] = createFit(Tr,K)

  找到   % Fit this model using new data
         cf_= fit(Tr(ok_),K(ok_),ft_,'Startpoint',st_);

  修改为:

         % Fit this model using new data
         [cf_,gof] = fit(Tr(ok_),K(ok_),ft_,'Startpoint',st_);

4. 保存该M文件为createFit.m

5. 调用函数方法:

   [c,g]=createFit(Tr,K)

   根据系数的结构用"."运算符取出拟合系数等,如

   a=c.a

   b=c.b

   RMSE=g.rmse

6. cftool可自定义函数,如果拟合数据不理想需要设置系数范围,如拟合含温度系数形式的Arrhenius方程 K=A*exp(-E/RT)*(T)^n 时:

    st_ = [abc(i,1) abc(i,2) abc(i,3) ];      �c为预测系数矩阵,i为循环的列号
    ft_ = fittype('a*exp(b*x)*(-1/x)^c',...
    'dependent',{'y'},'independent',{'x'},...
    'coefficients',{'a', 'b', 'c'});

7. 将拟合系数写入解的矩阵中:

   factor(i,:)=[c.a c.b g.rmse];

 

自编程序需要调用 data文件中的T,K然后把 factor写入data文件中。由于拟合不能保证100%有解,所以需要人工干涉运行,Good Luck!

 

个人认为拟合含温度系数的Arrhenius方程的n时,是有些困难的。因为当n!=0时,根据曲线走势要先给出a,b的预测值,限定一下预测范围,然后再通过循环调整c值得到温度系数n.数据量小的话这个过程需要一定的人工参与,但当数据量比较大时,就需要循环判断得出残差值小的系数矩阵。这个在Matlab里面实现还是比较方便的。

原文来自:http://blog.sina.com.cn/s/blog_4a0a8b5d0100uare.html

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有