非线性函数的线性化

在做曲线拟合时,常用的是最小二乘法(method of least squares)。我们知道线性拟合很容易做,非线性模型的拟合就难多了。为了降低拟合难度,很多时候我们可以把模型转换为非线性的形式。这里讨论下一元非线性函数的线性化方法,并举一个用matlab来做拟合的例子。 用幂函数 y=ax^2做例子。这个函数怎么非线性化呢?在微积分中有种常用的技巧,对于幂函数和指数函数常常用取对数的方法是使之简化,因为对数运算可以把幂指运算转化为加法和乘法运算,这就转换成了我们更熟悉、更擅长的问题。 对y=ax^b等号两边取自然对数,得 lny = lna + blnx) 令Y=lny,X=lnx,得Y = lna + bX,这是一个线性函数,这样我们就完成了线性化处理。此函数可以用非线性拟合函数polyfit拟合,调用格式为 p= polyfit(x,y,n),其中:

  • x,y为需要拟合的数据,用数组方式输入;
  • n表示多项式的最高阶数,特别地,当n=1时可以省略;
  • 输出参数p为拟合多项式的系数。
以下是一个实例:

Nu

11.6

18.1

23.5

26.9

32.2

36.8

39.0

43.2

Re

3520

6050

8400

9970

12520

14810

15900

18080

 用经验模型Nu = a Re^b对表格中的的数据进行拟合,确定模型中的参数a,b。

令y=Nu,x=lnRe,则

y=lna + bx

以下为程序段:

>> Re=[3520 6050 8400 9970 12520 14810 15900 18080]‘;
>> Nu=[11.6 18.1 23.5 26.9 32.2 36.8 39.0 43.2]‘;
>> y=log(Nu)
y =
2.4510
2.8959
3.1570
3.2921
3.4720
3.6055
3.6636
3.7658
>> x=log(Re)
x =
8.1662
8.7078
9.0360
9.2073
9.4351
9.6031
9.6741
9.8026
>> p=polyfit(x,y,1)
p =
0.8011 -4.0852

即b=0.8011,lna=-4.0852

>> a=exp(-4.0852)
a =
0.0168

于是得关系式为:

Nu=0.0168Re^0.8011

17fav 收藏本文

标签: ,

留下回复


收藏 & 分享

Powered by 17fav.com