在Matlab中数值拟合的应用(2)

2019-02-26 11:28

们有两种方法可以解决,一是将非线性函数进行适当的变换变成线性形式,另一种是有Matlab的优化工具箱中提供的lsqcurvefit()函数或者lsqnonlin()函数 进行求解。

2.2.1非线性拟合化为线性拟合

对于某些非线性的变量关系可以通过简单的变量替换使之直线化,这样就可以按最小二乘法原理求出替换后变量的直线方程。在实际中常利用此直线方程绘制数据的标准曲线,同

时根据需要可将此直线方程还原为曲线方程,实现对数据的曲线拟合。常用的非线性函数线性化的方法如下:

1、指数函数y?aebx,当b > 0时, y 随x增大而增大;当b < 0时, y 随x增大而减少。可以两边取对数,得lny?lna?bx。因此当以ln y 和x绘制的散点图呈直线趋势时,可考虑采用指数函数来描述y 与x 之间的非线性关系,lna 和b 分别为截距和斜率。

2、对数函数 y?a?blnx,当b > 0时, y 随x增大而增大,先快后慢;当b < 0时, y 随x 增大而减少,先快后慢。因此,当以y 和ln x 绘制的散点图呈直线趋势时,可考虑采用对数函数描述y 与x 之间的非线性关系,式中的b 和a 分别为斜率和截距。

3、幂函数y?axb,当b > 0时, y 随x增大而增大;当b < 0时, y 随x增大而减少。可以两边取对数,得到lny?lna?blnx。因此,当以lny和ln x绘制的散点图呈直线趋势时,可考虑采用幂函数来描述y 与x 之间的非线性关系,lna和b 分别为截距和斜率。

例3. 用电压V=10伏的电池给电容器充电,电容器上t时刻的电压为

v(t)?V?(V?V0)e,其中是电容器的初始电压V0,?是充电常数。试由下面一组t,V数据确定V0,? t (秒) V (伏) 解:

v(t)?V?(V?V0)e(已知V=10)可见,v(t)与τ成指数变化关系,所以在通过曲线拟合的时候,使用指数曲线y?a1ea2x。(非线性拟合)。首先进行变量代换在程序中用v1代替v(t),t0代替τ,v2是拟合后的曲线方程:

6 / 16

?t??t? 0.5 1 2 3 4 5 7 9 6.36 6.48 7.26 8.22 8.66 8. 99 9.43 9.63 对v(t)?V?(V?V0)e变 形 后 取 对 数,有ln(10?v(t))?ln(10?v0)??t令y?ln(10?v(t)),f1?ln(10?v0),f2?-t10,则v0?10?ef2, t0 输入:

t=[0.5 ,1,2,3,4,5,7,9];

v1=[6.36,6.48,7.26,8.22,8.66,8.99,9.43,9.63]; y=log(10- v1); f=polyfit(t,y,1) t0=-1/f(1)

v0=10-exp(f(2))

v2=10-(10-v0)*exp(-t/t0); plot(t,v1,'rx',t,v2,'k:') grid on

?t?

1f1??

得到结果为:

f =-0.2835 1.4766 t0 = 3.5269 v0 =5.6221

拟合图像为:

可见拟合效果还是可以的,所以v(t)?V?(V?5.6221)e?t3.5269

2.2.2优化工具箱的lsqcurvefit()函数

在解决实际的非线性拟合问题的时候,我们可以通过对实际数据进行一些变

7 / 16

换,去观察数据可能满足的函数规律,但是在实际进行求解参数的时候,尽量还是利用优化工具箱中提供的lsqcurvefit()函数或者甚至有时候需要自己运用一些智能算法来求解这类最优化问题。这里我们介绍一下Matlab 自带的lsqcurvefit()函数的用法,该函数的调用格式为:

(1) x = lsqcurvefit (‘fun’,x0,xdata,ydata);

(2) x =lsqcurvefit (‘fun’,x0,xdata,ydata,options);

(3) x = lsqcurvefit (‘fun’,x0,xdata,ydata,options,’grad’);

(4) [x, options] = lsqcurvefit (‘fun’,x0,xdata,ydata,?);

(5) [x, options,funval] = lsqcurvefit (‘fun’,x0,xdata,ydata,?);

(6) [x, options,funval, Jacob] = lsqcurvefit (‘fun’,x0,xdata,ydata,?);

x = lsqcurvefit (‘fun’,x0,xdata,ydata,options);

其中,fun是一个事先建立的定义函数F(x,xdata)的M-文件, 自变量为x和xdata,x0 为最优化的初始值,xdata、ydata 是原始输入输出数据向量;返回值p 为拟合输出的未知参数。

lsqnonlin()函数的用法及调用格式为:

lsqnonlin用以求含参量x(向量)的向量值函数f(x)?(f1(x),f2(x),....fn(x))T 中的参量x,使得fT(x)f(x)?f1(x)2?f2(x)2?...?fn(x)2最小。调用格式为:

‘fun’,x0); 1) x=lsqnonlin(

‘fun’,x0,options); 2) x= lsqnonlin (

‘fun’,x0,options,‘grad’); 3) x= lsqnonlin (

‘fun’,x0,?); 4) [x,options]= lsqnonlin (

‘fun’,x0,?); 5) [x,options,funval]= lsqnonlin (

‘fun’,x0,options); x= lsqnonlin (

fun是一个事先建立的定义函数f(x)的M-文件,自变量为x,x0为迭代初值,options为选项见无约束优化

例4:调用lsqcurvefit()函数进行最小二乘拟合求解例3:已知

v(t)?V?(V?V0)e 解:输入:

t=[0.5 ,1,2,3,4,5,7,9];

v=[6.36,6.48,7.26,8.22,8.66,8.99,9.43,9.63];

f=@(b,t) 10-(10-b(1))*exp(-t/b(2)); %定义拟合函数模型

b=lsqcurvefit(f,[2,7.26,0],t,v) %调用lsqcurvefit()函数进行最小二乘拟合求解 vFit=f(x,t);

plot(t,v,'ko',t,vFit) %绘制图形 legend('原始数据点','拟合曲线')

?t?

得到结果:

b = 5.5577 3.5002 0

8 / 16

得到图像为:

可知拟合效果不错,故拟合方程表达式为:v(t)?V?(V?5.5577)e?t3.5002

2.3多元拟合

我们在有些实际问题中自变量的数量可能会有两个或者多个,这时候问题就变成了多元拟合。多元拟合同样存在线性拟合和非线性拟合的情形。对于多元线性拟合,Matlab 最优化工具箱中提供了lsqlin()来求解这类问题。对于多元非线性拟合,Matlab 拟合工具箱中没有提供函数来解决,有兴趣的学生可以根据最小二乘的原理自己来编写程序实现,另外一种替代的方法是使用Matlab统计工具箱中提供的求解多元非线性回归的函数nlinfit()来解决这类问题。下面我们就分别结合实例来介绍这两个函数的用法。

例5: 电影院调查分别投放电视广告费用和报纸广告费用对每周电影院收入的影响,得到下面的数据,建立回归模型并进行检验,诊断是否有异常点。并预测电视广告费用和报纸广告费用分别为2和4时的电影院收入。 每周收入 96 90 95 92 95 95 94 94 电视广告费用 1.5 2.0 1.5 2.5 3.3 2.3 4.2 2.5 报纸广告费用 5.0 2.0 4.0 2.5 3.0 3.5 2.5 3.0

9 / 16

解:编写下面的程序,调用lsqlin()函数来解决该问题。

x1=[1.5,2.0,1.5,2.5,3.3,2.3,4.2,2.5]';

x2=[5.0,2.0,4.0,2.5,3.0,3.5,2.5,3.0]'; y=[96,90,95,92,95,95,94,94]';

M=[x1,x2,ones(size(x1))]; %构造调用lsqlin 函数所需的M 矩阵

X=lsqlin(M,y)%调用lsqlin()函数求解二元线性拟合问题

[x1grid x2grid]=meshgrid(x1,x2);

y1=X(1)*x1grid+X(2)*x2grid+X(3);

mesh(x1grid,x2grid,y1) %绘制网格曲面图

hold on;

plot3(x1,x2,y,'kd') %绘制原始数据点

alpha(0.5) %设置透明程度

hold off;

得到结果为:

X = 1.2985 2.3372 83.2116

得到的图形为:

可见点基本在拟合面上,所以拟合结果为y?83.2116?1.2985x1?2.3372x2 例6:用函数nlinfit()来解决这类问题,反应动力学中的Hougen‐Waston 模型是非线性模型的一个经典例子,其模型如下:y??1x2?x3/?5 y 为反应

1??2x1??3x2??4x3速率,其三个决定因素分别为x1(氢气),x2(n‐戊烷),x3(异戊烷) ,以下是一组实验数据,试建立回归模型,求出未知参数?i

10 / 16


在Matlab中数值拟合的应用(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:生物多样性保护优先区域

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: