1前言 2基本概念和原理 3主要内容 4实例 5涉及的文件
1前言
之前帮疯学网做过一个利用Matlab编程进行参数拟合 的教程,由于疯学网好像倒闭了,希望之前做的工作不要白费,这里拿出来分享下,希望能对虫友的学习、科研工作有所帮助。其他的不多说,言归正传,下面从原理和实例对如何使用Matlab编程进行参数拟合进行讲解。
2基本概念和原理
所谓参数拟合,就是已知试验或者真实数据,然后寻找一个模型对其规律进行模拟,求取模型中未知参数的一个过程。根据模型的复杂程度我分成以下几类讲解: 代数方程模型 线性模型 非线性模型 单变量,单目标问题 多变量,单目标问题 多变量,多目标问题,共享参数 复数模型拟合 微分方程模型 简单微分方程参数拟合 复杂微分方程参数拟合
3主要内容
3.1代数方程模型
y=f(x,β) x, n维自变量x=[x1,x2,…,xn]' β,p维参数向量β =[β1, β2,…, βn]' y,m维因变量y=[y1,y2,…,yn]' f,m维函数向量f=[f1,f2,…,fn]'
Matlab 求解函数 线性最小二乘法:ployfit, regress 非线性最小二乘法:fit, lsqnonlin,lsqcurvefit,nlinfit nlintool,fmincon
3.2微分方程模型
dx/dt=f(t,x,β,u) x(t0)=x0 x, n维状态变量x=[x1,x2,…,xn]' x0, n维状态变量初值x=[x10,x20,…,xn0]' β,p维参数向量β =[β1, β2,…, βp]' u,r维操作变量y=[u1,u2,…,um]' f,ODE方程m维函数向量f=[f1,f2,…,fm]'
对于给定β,由龙格-库塔积分可得x(t) y(t)=g(x(t), β) y为m维输出量y=[y1,y2,…,yn]' g为输出量y与状态变量x之间非线性关系的函数向量g=[g1,g2,…,gn]' 用导数法和积分法将ODE问题转化为代数方程问题
3.2优化准则和参数初值确定方法
优化准则:最小二乘法,极大似然,概率密度函数 非线性模型必须采用非线性回归的方法 参数初值确定方法 (1)根据模型结构 和本质 描述物理系统的模型的结构和本质可能指明未知参数的取值范围 (2)模型方程的渐进行为 例如指数衰减模型yi=k1+k2exp(-k3*xi) xi-->∞,yi约为k1, xi-->0,yi=k1+k2(1-k3*xi),利用接近0的x及对应y回归,结合k1,就可得到k1 k2 k3初值 (3)模型方程的变换 把非线性系统转化为线性系统,线性最小二乘结果作为非线性估计的初值 (4)直接搜索,全局算法 如果对参数不了解,可用直接搜索或者全局(多起点,遗传等算法处理)
3.4决定性指标
回归均值的总偏离 Ne:实验点数目, yei,yci,i次实验值与计算值
由于公式比较难显示,见附件ppt里面内容
4实例
4.1线性拟合函数:regress()
调用格式:b=regress(y,X) [b,bint,r,rint, |