您的位置:首页 > 编程语言 > MATLAB

Matlab曲线拟合

2014-05-06 23:49 302 查看
Excel拟合曲线方程

Excel可以通过画散点图,添加趋势线,对数据进行简单的对数,线性,多项式,指数,幂函数曲线拟合,可能不适用于它们的组合,也就是交复杂的线性;另一种方法是使用加载项中的规划求解,运用统计和数值分析知识,确定目标函数和拟合参数初值,然后求出最优的拟合参数,画出散点图,观看效果。
第二种方法,可以参考用论文《EXCEL及其规划求解功能拟合曲线方程》 http://ishare.iask.sina.com.cn/f/18741114.html?from=like

Matlab拟合曲线方程
Matlab拟合曲线,可以使用最优化工具箱里的非线性拟合函数lsqcurvefit(最小二乘法)和 概率论和数理统计工具箱里的非线性回归函数nlinfit函数或nlintool函数,还有直接求最小二乘解,若是多项式的拟合,用ployfit函数。

Matlab的曲线拟合工具箱CFtool使用简介
详细参见 http://hi.baidu.com/snowlxm/blog/item/15a714b122ae95500823025f.html
注意的是cftool 工具箱只能进行单个变量 的曲线拟合

1. lsqcurvefit
[x,res]
= lsqcurvefit(fun,x0,xdata,ydata,lb,ub)

其中,fun是在M文件中定义的函数,xdata,ydata为原始数据,x0是函数中参数的初始值,lb、ub分别为变量x的下限、上限;x为参数的最优值,res是x的残差平方和sum((fun(x,xdata)-ydata).^2)

1)编写函数文件
function Thta = hth(x,ht)
%编写函数M文件,内容如下

%编写完毕,保存为hth.m

Thta=(x(3)-x(4))./((1+(x(1).*ht).^x(2)).^(1-(1./x(2))))+x(4);

%不运行hth.m,而是进行下一步骤,否则提示x未定义
%在命令窗口输入,以下内容

ht=[0 27.2 53.04 62.56 69.36 81.60 95.20 108.80 126.48 159.12 197.20 251.60 262.48 286.96 359.04 452.88 503.20];

th=[476 434 406 401 392 382 365 351 335 312 287 271 261 253 252 236 234]*0.001;

x0=[0.1 1.5 0.5 0.1];

x1=[0 1 0 0];

x2=[5 5 1 1];

[x resnorm]=lsqcurvefit(@hth,x0,ht,th,x1,x2)

2)定义内置函数
f=inline(fun,'参变量','自变量')
fx=inline('(x(3)-x(4))./((1+(x(1).*ht).^x(2)).^(1-(1./x(2))))+x( 4)','x','ht');

ht=[0 27.2 53.04 62.56 69.36 81.60 95.20 108.80 126.48 159.12 197.20 251.60 262.48 286.96 359.04 452.88 503.20];

th=[476 434 406 401 392 382 365 351 335 312 287 271 261 253 252 236 234]*0.001;

x0=[0.1 1.5 0.5 0.1];

x1=[0 1 0 0];

x2=[5 5 1 1];

[x,res]=lsqcurvefit(f,x0,ht,th,x1,x2)

y1=fx(x,ht);

plot(th,ht,' o',y1,ht,'-')

2.nlinfit
[beta,r,J]
=
nlinfit(x,y,fun,beta0)
其中,x,y为原始数据,fun是在M文件中定义的函数,beta0是函数中参数的初始值;beta为参数的最优值,r是各点处的拟合残差,J为雅克比矩阵的数值.
%非线性回归

fun=inline('(x(3)-x(4))./((1+(x(1).*ht).^x(2)).^(1-(1./x(2))))+x(4)','x','ht');

ht=[0 27.2 53.04 62.56 69.36 81.60 95.20 108.80 126.48 159.12 197.20 251.60 262.48 286.96 359.04 452.88 503.20];

th=[476 434 406 401 392 382 365 351 335 312 287 271 261 253 252 236 234]*0.001;

x0=[0.1 1.2 0.5 0.1];

[x,r,J]=nlinfit(ht,th,fun,x0);

x

R=sum(r.^2) %误差平方和

y=fun(x,ht);

plot(th,ht,'*',y,ht,'-r')

3.求最小二乘解

%函数线性组合的曲线拟合方法

%y(x)=c1+c2*exp(-3*x)+c3*cos(-2*x).*exp(-4*x)+c4*x.^2

x=[0 0.2 0.4 0.7 0.9 0.92 0.99 1.2 1.4 1.48 1.5]';

y=[2.88 2.2576 1.9683 1.9258 2.0862 2.109 2.1979 2.5409 2.9627 3.155 3.2052]';

A=[ones(size(x)),exp(-3*x),cos(-2*x).*exp(-4*x),x.^2];

c=A\y; %最小二乘解

c1=c'

x0=[0:0.01:1.5]';

A1=[ones(size(x0)),exp(-3*x0),cos(-2*x0).*exp(-4*x0),x0.^2];

y1=A1*c;

plot(x0,y1,x,y,'rx');

4.polyfit

plot(x,y,n),根据数据x,y得到一个n次拟合多项式P(x)的系数;polyval(p,x)由系数p(从高次到低次顺序)确定的多项式在x个点上的值
x=1:0.5:5;
y=[2.6 3.3 3.7 4.0 4.1 4.0 3.8 3.3 2.8];

p=polyfit(x,y,2)

y1=polyval(p,x);

plot(x,y1,x,y,'ro')
http://emuch.net/bbs/viewthread.php?tid=4924055
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: