Ⅰ 如何使用matlab 2014a 做数据曲线拟合
方法/步骤
输入数据
做数据曲线拟合,当然该有数据,本经验从以如下数据作为案例。
添加数据到curve fitting程序
这一步就是将你要拟合的数据添加到curve fitting程序中,同时给你拟合的曲线命名。
选择曲线拟合的方法类型
常见的拟合曲线有多项式的、指数的、对数的等等。curve fitting程序提供了很多的方法。你可以根据自己的数据具体选择。
选择好方法后,按照提供的公式选择具体的选项
本文的数据近似为线性的,我们选择多项式拟合的一阶方法。
拟合结果查看
拟合后,curve fitting会给你具体的函数表达式,你可以将他给出的参数的值带入你选择的方法中。
结果说明
在结果中,不仅可以看到函数的表达式,同时他还给出了95%置信区间的参数值,以及拟合好坏的一些指标,如:
SSE:
R-square:
Adjusted R-square:
RMSE:
画出图像
虽然在curve fitting程序有自带的图像显示,但是一般最好将拟合结果显示到单独的图像窗口。
保存结果
曲线拟合结束后,你可以保存你的拟合结果。选择你保存的路径即可。
Ⅱ matlab2014曲线拟合工具箱怎么输入数据
您好,这样的:一、 单一变量的曲线逼近
Matlab有一个功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线
性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这个工具箱。
假设我们要拟合的函数形式是 y=A*x*x + B*x, 且A>0,B>0 。
1、在命令行输入数据:
》x=[110.3323 148.7328 178.064 202.8258033 224.7105 244.5711 262.908 280.0447
296.204 311.5475]
》y=[5 10 15 20 25 30 35 40 45 50]
2、启动曲线拟合工具箱
》cftool
3、进入曲线拟合工具箱界面“Curve Fitting tool”
(1)点击“Data”按钮,弹出“Data”窗口;
(2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然
后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数
据集的曲线图;
(3)点击“Fitting”按钮,弹出“Fitting”窗口;
(4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data set”下拉菜单
选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类
型有:
Custom Equations:用户自定义的函数类型
Exponential:指数逼近,有2种类型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x)
Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w)
Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((x-b1)/c1)^2)
Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-
preserving
Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~
Power:幂逼近,有2种类型,a*x^b 、a*x^b + c
Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th
degree ~;此外,分子还包括constant型
Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思)
Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1)
Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)
选择好所需的拟合曲线类型及其子类型,并进行相关设置:
——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改
待估计参数的上下限等参数;
——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear
Equations线性等式”和“General Equations构造等式”两种标签。
在本例中选Custom Equations,点击“New”按钮,选择“General Equations”标签,输入函
数类型y=a*x*x + b*x,设置参数a、b的上下限,然后点击OK。
(5)类型设置完成后,点击“Apply”按钮,就可以在Results框中得到拟合结果,如下例:
general model:
f(x) = a*x*x+b*x
Coefficients (with 95% confidence bounds):
a = 0.009194 (0.009019, 0.00937)
b = 1.78e-011 (fixed at bound)
Goodness of fit:
SSE: 6.146
R-square: 0.997
Adjusted R-square: 0.997
RMSE: 0.8263
同时,也会在工具箱窗口中显示拟合曲线。
这样,就完成一次曲线拟合啦,十分方便快捷。当然,如果你觉得拟合效果不好,还可以在“
Fitting”窗口点击“New fit”按钮,按照步骤(4)~(5)进行一次新的拟合。
不过,需要注意的是,cftool 工具箱只能进行单个变量的曲线拟合,即待拟合的公式中,变
量只能有一个。对于混合型的曲线,例如 y = a*x + b/x ,工具箱的拟合效果并不好。下一
篇文章我介绍帮同学做的一个非线性函数的曲线拟合。
Ⅲ matlab的CurveFitting 工具箱里,不显示拟合后曲线
1.打开CFTOOL工具箱。在Matlab 6.5以上的环境下,在左下方有一个"Start"按钮,如同Windows的开始菜单,点开它,在目录"Toolboxes"下有一个"Curve Fitting",点开"Curve Fitting Tool",出现数据拟合工具界面,基本上所有的数据拟合和回归分析都可以在这里进行。
7.图片导出。另外要说的是,如果想把这个拟合的图像导出的话,在Curve Fitting Tool窗口的File菜单下选Print to Figure,此时弹出一个新的图像窗口,里面是你要导出的图像,在这个figure窗口的File菜单里再选Export,选择好合适的格式,一般是jpeg,选择好路径,点击OK就可以了。出来的图像可以在Word等编辑环境中使用,就不多说了。
要修改图像的性质,如数据点的大小、颜色等等的,只需要在对象上点右键,就差不多可以找到了。
Ⅳ matlab中怎么求拟合
polyfit最小二乘法拟合,一般这个就很好用
高级一点的,start——toolboxs——curve fitting——curve fitting tool
用拟合工具箱,这里包括了常用的所有拟合函数。你也可以自己定义函数拟合求出你要的系数。一般matlab书上都会介绍工具箱的用法。
进入曲线拟合工具箱界面“Curve Fitting tool”
(1)点击“Data”按钮,弹出“Data”窗口;
(2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数据集的曲线图;
(3)点击“Fitting”按钮,弹出“Fitting”窗口;
(4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data set”下拉菜单选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类型有:
Custom Equations:用户自定义的函数类型
Exponential:指数逼近,有2种类型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x)
Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w)
Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((x-b1)/c1)^2)
Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving
Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~
Power:幂逼近,有2种类型,a*x^b 、a*x^b + c
Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型
Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思)
Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1)
Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)
选择好所需的拟合曲线类型及其子类型,并进行相关设置:
——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改待估计参数的上下限等参数;
——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear Equations线性等式”和“General Equations构造等式”两种标签。
在本例中选Custom Equations,点击“New”按钮,选择“General Equations”标签,输入函数类型y=a*x*x + b*x,设置参数a、b的上下限,然后点击OK。
(5)类型设置完成后,点击“Apply”按钮,就可以在Results框中得到拟合结果,如下例:
general model:
f(x) = a*x*x+b*x
Coefficients (with 95% confidence bounds):
a = 0.009194 (0.009019, 0.00937)
b = 1.78e-011 (fixed at bound)
Goodness of fit:
SSE: 6.146
R-square: 0.997
Adjusted R-square: 0.997
RMSE: 0.8263
同时,也会在工具箱窗口中显示拟合曲线。
这样,就完成一次曲线拟合啦,十分方便快捷。当然,如果你觉得拟合效果不好,还可以在“Fitting”窗口点击“New fit”按钮,按照步骤(4)~(5)进行一次新的拟合。
不过,需要注意的是,cftool 工具箱只能进行单个变量的曲线拟合,即待拟合的公式中,变量只能有一个。对于混合型的曲线,例如 y = a*x + b/x ,工具箱的拟合效果并不好。
这是一点介绍,具体还得自己摸索啊,少年
Ⅳ 我想问一下,用matlab怎么插值运算得到r的值
用cftool拟合工具箱,可以快速得到你要的拟合函数。
Expotential指数逼近
Fourier傅立叶逼近
Gaussian 高斯逼近
Interpolant 插值逼近
Polynomial 多项式逼近
Power幂函数逼近
拟合结果的确定,主要要看R-square相关系数是否最接近1,RMSE均方根误差是否比较小
MATLAB来做三次样条插值,如何得到插值的函数表达式:
x=[1:1:10];
y=[2:2:20];
pp=interp1(x,y,'spline','pp')
breaks=pp.breaks
coefs=pp.coefs
三次样条插值(Cubic Spline Interpolation)简称Spline插值,是通过一系列形值点的一条光滑曲线,数学上通过求解三弯矩方程组得出曲线函数组的过程。
实际计算时还需要引入边界条件才能完成计算。一般的计算方法书上都没有说明非扭结边界的定义,但数值计算软件如Matlab都把非扭结边界条件作为默认的边界条件。
在工程上,构造三次样条插值函数通常有两种方法:
一是以给定插值结点处得二阶导数值作为未知数来求解,而工程上称二阶导数为弯矩,因此,这种方法成为三弯矩插值。
二是以给定插值结点处得一阶导数作为未知数来求解,而一阶导数右称为斜率,因此,这种方法称为三斜率插值。
Ⅵ matlab中的csape怎么使用
function pp = csape(x,y,conds,valconds)
%pp=csape(x,y,'变界类型','边界值'),生成各种边界条件的三次样条插值. 其中,(x,y)为数据向量
%边界类型可为:'complete',给定边界一阶导数.
% 'not-a-knot',非扭结条件,不用给边界值.
% 'periodic',周期性边界条件,不用给边界值.
% 'second',给定边界二阶导数.
% 'variational',自然样条(边界二阶导数为0)
% .
%例 考虑数据
% x | 1 2 4 5
% ---|-------------
% y | 1 3 4 2
%边界条件S''(1)=2.5,S''(5)=-3,
% x=[1 2 4 5];y=[1 3 4 2];
% pp=csape(x,y,'second',[2.5,-3]);pp.coefs
% xi=1:0.1:5;yi=ppval(pp,xi);
% plot(x,y,'o',xi,yi);
pp0 = csape(x,[1,zeros(1,length(y)),0],[1,0]);
pp = csape( x, [1 sin(x) 0], [1 2] ) %左边的点一阶导数为1,右边的点二阶导数为0
splinetool是一个图形化的插值工具
lagrange插值,由于lagrange插值可能不收敛,所以工程中很少有人用这种插值。matlab中没有专门的lagrange插值函数。但我们可以自己编一个,如下:
%lagrange插值子函数
function y=lagrange(x0,y0,x)
n=length(x0); m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end