建模算法——拟合 (转)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建模算法——拟合 (转)相关的知识,希望对你有一定的参考价值。

一、线性最小二乘法

1、基本思路

技术分享,其r(x)是事先选定的一组线性无关的函数。ak是待定系数。然后拟合的准则就是使得yi与f(xi)的距离的平方和最小,称之为最小二乘准则

2、系数的确定

技术分享,要使距离的平方和最小,那只要取得技术分享,使得取到极值,就可以解除待定系数ak,记

技术分享

然后线性方程组为技术分享,所以当R列满秩,R’R是可逆的,所以方程组有唯一解技术分享

3、函数r(x)的选取

一般是直观的去判断用什么样的曲线。然后下面有一般常用的曲线

技术分享

技术分享一般需要做变量代换,化为对a1和a2的线性函数。

然后可以多选几个r(x),然后选择距离的平方和最小的一个。

4、MATLAB实现

(1)解方程法

技术分享

一个demo

技术分享

技术分享
function ab=Zuixiaoerchengfa(x,y)
%x,y为数据点,但是要为行向量

x=x‘;y=y‘;
r=[ones(5,1),x.^2];
ab=r\y;
x0=19:0.1:44;
y0=ab(1)+ab(2)*x0.^2;
plot(x,y,‘bo‘,x0,y0,‘r‘);
技术分享

技术分享

(2)多项式拟合法

技术分享,然后来拟合给定的数据,然后MATLAB由封装好的函数

a=ployfit(x0,y0,m)

多项式在x处的值y可以用这个函数计算

y=polyval(a,x)

其中x0,y0是要拟合的数据,m为拟合多项式的次数,输出参数a为拟合多项式技术分享的系数技术分享

一个demo

技术分享

>> x0=[1990   1991   1992   1993   1994 1995  1996];
>> y0=[70  122 144  152   174  196  202];
>> plot(x0,y0,‘*‘);

先画出散点图,观察使用多少次的多项式拟合

技术分享

然后明显看出可以使用直线拟合所以

技术分享
a=polyfit(x0,y0,1)

a =

   1.0e+04 *

    0.0021   -4.0705

>> y97=polyval(a,1997)

y97 =

  233.4286

>> y98=polyval(a,1998)

y98 =

  253.9286

>>
技术分享

二、最小二乘优化

技术分享

四、最重要的~~~~~~~~~~!!!!!!!!!!!!!!!!

曲线拟合的用户界面求法!!!!!!!!!!!!

直接使用命令cftool

五、曲线拟合与函数逼近

技术分享

技术分享

一个demo

技术分享

int用于符号∫

int(s)符号表达式s的不定积分.

int(s,v)符号表达式s关于变量v的不定积分.

int(s,a,b)符号表达式s的定积分, a,b分别为积分的下限和上限.

int(s,v,a,b)符号表达式s关于变量v从 a到b的定积分.

当int求不出符号解,会自动转求数值解.

技术分享
syms x
base=[1,x^2,x^4];

y1=base.‘*base
y2=cos(x)*base.‘
r1=int(y1,-pi/2,pi/2)     %算积分
r2=int(y2,-pi/2,pi/2)

a=r1\r2
xishu1=double(a)
digits(8),xishu2=vpa(a)
技术分享

以上是关于建模算法——拟合 (转)的主要内容,如果未能解决你的问题,请参考以下文章

最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)

谁能给一个java编写的利用最小二乘法进行曲线拟合的算法?

[数学建模]使用MATLAB实现数据拟合

关于VC的最小二乘法曲线拟合算法问题

备战数学建模17-回归分析算法

Python最小二乘法拟合与作图