精华内容
下载资源
问答
  • 就看做是非线性拟合吧,仿照下面的例子:function shiyan2x1 = linspace( 0.5, 10, 15 );x2 = linspace( 10, 20, 15 );y = 2.5 * x1.^0.5 .* x2.^0.3; % 假设公式是这样的% 利用已知数据进行非线性拟合,根据...

    这个就看做是非线性拟合吧,仿照下面的例子:

    function shiyan2

    x1 = linspace( 0.5, 10, 15 );

    x2 = linspace( 10, 20, 15 );

    y = 2.5 * x1.^0.5 .* x2.^0.3; % 假设公式是这样的

    % 利用已知数据进行非线性拟合,根据经验给abc一个初始值1, 1, 1,初始值不一定非要很准确

    p = lsqcurvefit( @subfun, [ 1, 1, 1 ], [ x1', x2' ], y' );

    disp( '拟合参数结果如下:' )

    disp( [ 'a = ', num2str( p( 1 ) ), ', b = ', num2str( p( 2 ) ), ...

    ', c = ', num2str( p( 3 ) ) ] );

    function ydata = subfun( p, xdata )

    ydata = p( 1 ) * xdata( :, 1 ).^p( 2 ) .* xdata( :, 2 ).^p( 3 );

    6681169ce8c131fdf6354f280fc544ab.png

    展开全文
  • 首先申明本人是土木专业的因为有需要要用到 matlab 中的拟合用途今天好好学习 一些关于 matlab 变量拟合的东西从网上下载了一些程序也运行了一下就举一些 实例附上源程序吧主要是两个自变量和三个自变量一个因变量...
  • 1、首先需要知道matlab中查看数据类型函数是class,可以先在命令行窗口中help class。2、在命令行窗口中输入“a=123 class(a)”。3、按回车键可以看到变量a的类型是double类型。4、输入“b='1234' class(b)”。5、按...

    1、首先需要知道matlab中查看数据类型函数是class,可以先在命令行窗口中help class。2、在命令行窗口中输入“a=123 class(a)”。3、按回车键可以看到变量a的类型是double类型。4、输入“b='1234' class(b)”。5、按回车键之后,可以看到变量b的类型是字符类型,我们也可以查看一下matlab中常用数据类型www.mh456.com防采集。

    matlab中变2113量未定义:在命令窗口中输入的时5261候要调用函数4102QPSK_evm(s),其中输入前,首先定义一下1653s,如:赋值s=1:10,这样再调用QPSK_evm(s),就不会出现如此问题了!就是如果给一个变量赋值,而且是在if语句内,也就是说,要满足一个条件才能改这一变量赋值,而如果运行时输入的数据不满足,那么这个变量就没有被赋值,也就是未定义

    你的首先自己编写此函数(‘tableau’),函数一般格式: function output=funname(input) 函数体语句,即输入变量与输入变量的关系 end

    b64543a98226cffc44df10abb5014a90f603ea36.jpg

    if语句2113中如果整个函数编写没有错误,那就是多个if语句5261中少4102了一个end。你检查一下,某个if中下面是不是缺1653少一个end,要养成写if下面直接写end的习惯,然后再在中间写入条件。function函数中的末尾有定义变量也要写end,虽然很多时候可以省略,function函数最后加上end可以减少“未定义的报错”。

    matlab中变量未定义:在命令窗口中输入的时候要调用函数QPSK_evm(s),其中输入前,首先定义一下s,如:赋值s=1:10,这样再调用QPSK_evm(s),就不会出现如此问题了!就是如果给一个变量赋值,

    848e1e4c8972b333bd2fb4eb02103e81.png

    未定义函数的意思是指你写的程序中调用了这个函数,但是你没有定义这个函数相关算法,你需要用function函数单另在另一个脚本中定义这个函数的算法还有一种是未定义变量的值,也会出现这种情况,你只要在程序合适的前面位置对相应变量赋值即可内容来自www.mh456.com请勿采集。

    展开全文
  • 由于急需用到变量曲线拟合而本人刚刚接触MATLAB,希望高手及热心的朋友帮帮忙给出拟合方程和拟合曲线,一共有两组数据,X1,X2,X3是自变量,Y是因变量,需要利用这些数据用matlab编程拟合成一条曲线,得出一...

    大家好,由于急需用到多变量曲线拟合而本人刚刚接触MATLAB,希望高手及热心的朋友帮帮忙给出拟合方程和拟合曲线,一共有两组数据,X1,X2,X3是自变量,Y是因变量,需要利用这些数据用matlab编程拟合成一条曲线,得出一个含有X31,X2,X变量的Y=f(X1,X2,X3)函数,非常感谢!以下是两组组数据:

    一组:

    Y                    X1               X2                              X3

    501.2633173           0.539902361        0.28046229                  0.179635349

    427.3926985          0.635031635        0.177045177                  0.187923188

    366.4193             0.705707491         0.148751486                 0.145541023

    395.7147339           0.728558453        0.130660439                 0.140781108

    462.5657443           0.76414478         0.112896903                 0.122958317

    426.3725002           0.772320795        0.112136267                 0.115542938

    424.8704642           0.851527714        0.029172424                 0.119299862

    二组

    Y                   X1                   X2                              X3

    5             0.539902361                 0.28046229                 0.179635349

    7.61          0.635031635                 0.177045177               0.187923188

    8.09          0.705707491                0.148751486                0.145541023

    9.16          0.728558453                0.130660439               0.140781108

    6.23          0.76414478                  0.112896903                0.122958317

    8.46          0.772320795               0.112136267                 0.115542938

    6.92          0.851527714               0.029172424                 0.119299862

    展开全文
  • MATLAB拟合算法

    千次阅读 2020-07-26 21:04:44
    一篇文章彻底搞懂拟合

    Preface

    插值算法是要经过所有的点,但当数据很大的时候,如果还要经过所有的样本点,这个时候用于插值的多项式阶数就会非常高,就会出现龙格现象,在样本点附近函数的导数非常大,通常趋于无穷,这就造成了曲线陡峭,波动非常大,此种情况下拟合算法便出现来解决这个问题。
    与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。

    拟合和插值的区别

    插值算法中,得到的多项式f(x)f(x)要经过所有样本点。但是如果样本点太多,那么这个多项式次数过高,会造成龙格现象。尽管我们可以选择分段的方法避免这种现象,但是更多时候我们更倾向于得到一个确定的曲线,尽管这条曲线不能经过每一个样本点,但只要保证误差足够小即可,这就是拟合的思想。(拟合的结果是得到一个确定的曲线)

    一个简单的例子:找出XY的最佳拟合曲线

    • 先将数据导入MATLABMATLAB
      关于如何将EXCELEXCEL数据导入MATLABMATLAB,我上一期已经讲过,请参考博文:将EXCEL数据导入MATLAB
      完成如下:
    • 画散点图,查看X和Y的分布趋势

      • 以不同的颜色标记散点:要使用不同的颜色,请将 c 指定为向量,使用这个有个前提是颜色的数量要与数据的长度保持一致

        c = linspace(1,10,length(x));
        
      • 用’.'标记数据

        scatter(x,y,'.')
        
      • 改变标记点大小

        >> size = 600;
        >> scatter(x,y,size,c,'.')
        

    可以看到大致呈直线一次函数关系。

    确定拟合曲线

    • 我们设这些样本点的坐标为 (xi,yi),i=1,2,,n\left( x_i,y_i \right) ,i=1,2,\cdots ,n
    • 我们设置拟合曲线为:y=kx+by=kx+b

    那么问题来了,kb取何值时样本点和拟合曲线最接近呢?我们先一步一步来,这里要用到最小二乘法的有关知识。

    最小二乘法

    先介绍最小二乘法的两种定义方式:

    • k,b=argmink,b(Σni=1yiyi) \overset{\land}{k},\overset{\land}{b}=\underset{k,b}{arg\min}\left( \underset{i=1}{\overset{n}{\varSigma}}\left| y_i-\overset{\land}{y}_i \right| \right)
    • k,b=argmink,b(Σni=1(yiyi)2) \overset{\land}{k},\overset{\land}{b}=\underset{k,b}{arg\min}\left( \underset{i=1}{\overset{n}{\varSigma}}\left( y_i-\overset{\land}{y}_i \right) ^2 \right)

    其中yi=kxi+b\overset{\land}{y}_i=kx_i+b是将x的坐标代入拟合曲线中得到的拟合纵坐标,因为y头上有个三角形的符号,所以我们也叫它y-hat,像戴了一顶帽子一样,arg参数的英文单词arguement的缩写,以上两种定义方式都是将拟合的纵坐标与实际的纵坐标进行比较,不过第一种是两个直接相减取绝对值,第二个是相减后取平方,而argmin和其下标的意思是,参数(arg)kb取何值时yiyi\overset{\land}{y}_i\text{,}y_i的比较值(两种方式)取得最小,也就是用哪一种定义方式可以使得到的误差最小。

    使用第二种定义方式

    因为不管哪种定义方式,以上得到的肯定是一个函数,既然是一个函数,我们要求它的最小值的话,就必须对其求导,而第一种定义方式含有绝对值,不容易求导,因此计算起来就会比较复杂,而在MATLAB中对高阶的函数求导是十分方便的,所以我们毫不犹豫的选择第二种定义方式,这也是为什么最小二乘法带个二的原因,因为有平方(本人瞎猜的)。

    为什么不用四次方?

    那肯定就有人要问了,既然MATLAB求解高阶导数比较容易的话,为什么不用三阶,四阶…呢。

    • 高阶极端数据对拟和曲线有较大的影响
    • 最小二乘法得到的结果与概率论中的 极大似然估计一致
    • 奇次方会使误差正负相抵消

    况且,我问你,拟合的初衷是什么?难道像插值一样经过每个样本点然后产生龙格现象?拟合就是要用最简单的函数模拟出数据的走势。

    求解k,b(过程复杂,可省略)

    设这些样本点为(xi,yi),i=1,2,,n\left( x_i,y_i \right) ,i=1,2,\cdots ,n,我们设置的拟合曲线为y=kx+by=kx+b,拟合值等于yi=kxi+b\overset{\land}{y}_i=kx_i+b,那么k^,b^=argmink,b(i=1n(yiy^i)2)=argmink,b(i=1n(yikxib)2)\hat{k},\hat{b}=\underset{k,b}{\text{arg}\min}\left( \sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2} \right) =\underset{k,b}{\text{arg}\min}\left( \sum_{i=1}^n{\left( y_i-kx_i-b \right) ^2} \right)

    • L=i=1n(yikxib)2L=\sum_{i=1}^n{\left( y_i-kx_i-b \right) ^2}

    • 现在要找k,b使得L最小,最小的kb就是k,b\overset{\land}{k},\overset{\land}{b}

    • 因为L的函数中kb都是变量,所以要求解最小值的话就需要分别对其求偏导。

    • 移项
    • 变形
    • k
    • b

    MATLAB求解最小二乘

    clear,clc;
    load xy;
    size = 300;
    n = length(x)				%求出x矩阵有多少行
    c = linspace(1,10,l)		%产生一系列颜色,颜色向量c要与数据x的维度一致
    scatter(x,y,size,c,'.')		%以大小为300,系列可变颜色,标记符号为"."的规则绘制散点图
    hold on;
    k = (n*sum(x.*y)-sum(y)*sum(x)) / (n*sum(x.^2)-sum(x)*sum(x))			%拟合曲线的斜率
    b = (sum(x.^2)*sum(y)-sum(x)*sum(x.*y)) / (n*sum(x.^2)-sum(x)*sum(x))	%拟合曲线的截距
    
    %% 根据已知斜率绘制直线
    f = @(x) k*x+b;				%求解函数的形式,@符号后面跟上自变量(如果自变量有两个的话,则括号里面也有两个)
    fplot(f,[-5,5])				%第一个参数是函数,第二个参数是自变量的范围
    legend('样本数据','拟合数据')
    

    如何评价拟合的好坏?

    三个指标

    • 总体平方和(Total sum of squares)

    SST=i=1n(yiyˉ)2SST=\sum_{i=1}^n{\left( y_i-\bar{y} \right) ^2}

    • 误差平方和(The sum of squares due to error)

    SSE=i=1n(yiy^i)2 SSE=\sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2}

    • 回归平方和(Sum of squares of the regression)

    SSR=i=1n(y^iyˉ)2 SSR=\sum_{i=1}^n{\left( \hat{y}_i-\bar{y} \right) ^2}

    一个等式

    SST=SSE+SSRSST =SSE+SSR

    一个系数

    R2R^2称为拟合优度,也叫可决优度,是表示拟合好坏的指标,R2R^2越接近1,说明误差平方和SSESSE越接近0,误差越小说明拟合的越好。

    • R2R^2只能用于拟合函数是线性函数时对其拟合结果的评价
    • 非线性函数和其它函数(例如复杂的指数函数)比较拟合的好坏时,直接看SSESSE即可
    • R2R^2可能为负

    证明SST=SSE+SSRSST =SSE+SSR

    这里要用到前面的求导的条件

    一阶偏导数条件

    yi=kxi+b\overset{\land}{y}_i=kx_i+b,带入得到

    所以

    SST=SSE+SSRSST =SSE+SSR

    何为线性函数?

    R2R^2只能用于拟合函数是线性函数时,拟合结果的评价

    线性函数通常有两个概念,第一个是对参数线性,另一个是对变量线性,我们主要讨论的是对参数线性。

    • 线性于参数
    • 线性于变量

    参考古扎拉蒂《计量经济学基础》

    一个易错的点

    y=a+bx2y=a+bx^2是线性函数吗?
    a,b都是常数的情况下,y就是一个线性函数,线性于参数。

    如何判断线性于参数?

    在函数中,参数仅以一次方出现,且不能乘以或除以其他任何的参数,并不能出现参数的复合函数形式。

    线性于参数的例子

    非线性于参数的例子

    MATLAB计算拟合优度

    mean() 是求均值的函数

    y_hat = k*x+b;					%y的拟合值
    SSR = sum((y_hat-mean(y)).^2)	%回归平方和
    SSE = sum((y-y_hat).^2)			%误差平方和
    SST = sum((y-mean(y)).^2)		%总体平方和
    R_2 = SSR/SST					%拟合优度
    
    k =
        2.0948
    b =
       -1.0548
       
    SSR =
      151.1583
      
    SSE =
        5.7281
        
    SST =
      156.8863
      
    R_2 =
        0.9635
    

    完整代码

    clear,clc;
    load xy;
    size = 300;
    l = length(x)					%求出x矩阵有多少行(2表示列)
    c = linspace(1,10,l)			%产生一系列颜色,颜色向量c要与数据x的维度一致
    scatter(x,y,size,c,'.')			%以大小为300,系列可变颜色,标记符号为"."的规则绘制散点图
    hold on;
    k = (l*sum(x.*y)-sum(y)*sum(x)) / (l*sum(x.^2)-sum(x)*sum(x))			%拟合曲线的斜率
    b = (sum(x.^2)*sum(y)-sum(x)*sum(x.*y)) / (l*sum(x.^2)-sum(x)*sum(x))	%拟合曲线的截距
    %% 根据已知斜率绘制直线
    f = @(x) k*x+b;					%求解函数的形式,@符号后面跟上自变量(如果自变量有两个的话,则括号里面也有两个)
    fplot(f,[-5,5])					%第一个参数是函数,第二个参数是自变量的范围
    legend('样本数据','拟合数据')
    y_hat = k*x+b;					%y的拟合值
    SSR = sum((y_hat-mean(y)).^2)	%回归平方和
    SSE = sum((y-y_hat).^2)			%误差平方和
    SST = sum((y-mean(y)).^2)		%总体平方和
    R_2 = SSR/SST					%拟合优度
    
    

    转载请注明出处

    展开全文
  • Gauss-Newton算法 MATLAB实现结果回顾算法实现总结 结果回顾 Gauss-Newton算法对Gauss-newton算法做了详细的解释,并且使用C++做了实例程序。 但是程序其实有微小错误,实际的坐标并不是年代1815—1885,而是1—8...
  • Matlab拟合——Curve Fitting工具

    千次阅读 2020-12-17 20:45:44
    这里记录一下自己使用matlab拟合的流程,也希望你太清楚matlab拟合用法的小伙伴能有所收获。 Curve Fitting工具1 打开工具2 用函数表达式拟合数据3 拟合设置4 自定义函数拟合5 无函数表达式的插值拟合6 导出拟合函数...
  • 在运行MATLAB编程进行数据的处理过程当中,我们常常用到matlab曲线拟合,但是工具箱由于需要人工交互,得到的拟合结果,需要人工的去提取,再输入,所以,工具箱拟合结果十分不适合调用,以及继续下面的操作,所以...
  • MATLAB拟合工具箱

    千次阅读 2018-08-14 14:29:45
    今天意外发现matlab的曲线拟合工具箱cftool,转http://blog.csdn.net/chenyusiyuan/article/details/1942605,希望以后能用到 一、 单一变量的曲线逼近 Matlab有一功能强大的曲线拟合工具箱 cftool ,使用方便...
  • MATLAB拟合出的代码绘图麦金 将R包mkin提供计算例程对化学降解的数据的分析,包括米ulticompartment亲属ETICS根据需要形成和转化产物下降建模,或者如果几降解隔室都有涉及。 安装 您可以从R内安装最新发布的...
  • matlab拟合工具箱cftool

    千次阅读 2014-06-03 10:05:08
    matlab拟合工具箱cftool %拟合数据曲线;线性最小二乘法是解决曲线拟合的最常用的方法, %1、多项式拟合函数;p=polyfit(x,y,n);求p拟合函数在xi处的近似值pi=polyval(p,xi); %2、利用常用矩阵的除法解决复杂...
  • matlab拟合工具箱

    千次阅读 2012-09-03 16:40:48
    Matlab有一功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这工具箱。 假设我们要拟合的函数形式是 y=A*x*x + B*x,...
  • MATLAB拟合函数和工具一元函数拟合可用cftool工具箱,对于一元多项式拟合也可用polyfit()多元线性函数y=ax的拟合函数regress()语法是:[a, aint]=regress(y,x,alpha)其中1-alpha是置信度,默认alpha=0.05.即置信度为...
  • matlab曲线拟合与矩阵计算Matlab应用重点(1)曲线拟合 曲线拟合定义 在实际工程应用和科学实践中,经常需要寻求 两个(或多个)变量间的关系,而实际去只能 通过观测得到一些离散的数据点。针对这些分 散的数据点,运用...
  • 解:y1=polyfit(x,y,N)函数的说明:这里函数polyfit第一参数传递的是拟合数据的自变量,第二参数是因变量,第三参数是拟合多项式的阶数,这由我们给定。如下图。我们可以给定不同的N,运用不同的多项式进行...
  • 这一期的内容是在上一期的基础上进行升级,MATLAB如何利用代码实现自动拟合(多个函数、多个参数同时拟合多组数据),下面表格中的内容为本次用到的数据:XY1Y2Y3011130.9260.8550.86370.8500.8140.863130.8130.6440....
  • matlab 曲线拟合

    千次阅读 2016-03-24 20:17:32
    matlab 曲线拟合的相关代码
  • matlab曲线拟合

    万次阅读 多人点赞 2015-11-25 22:57:49
    matlab中,用polyfit函数来求得最小二乘拟合多项式的系数,再用polyval函数按所得的多项式计算所给点上的函数近似值。 例子:用一三次多项式在区间[0:2*pi]内逼近函数sin(x) 在给定区间内均匀选取20采样...
  • 使用Matlab做单变量曲线拟合

    千次阅读 2011-01-31 18:55:00
    Matlab有一功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。假设我们要拟合的函数形式是 y=A*x*x + B*x, 且A>0,B>0 。1、在命令行输入数据:》x=[110.3323 148.7328 178.064 ...
  • Matlab曲线拟合

    千次阅读 2013-04-14 21:20:32
    最近用Matlab处理实验数据,拟合曲线用的较。    Excel拟合曲线方程    Excel可以通过画散点图,添加趋势线,对数据进行简单的对数,线性,多项式,指数,幂函数曲线拟合,可能不适用于它们的组合,也就是...
  • 在Origin中使用自定义函数进行非线性拟合  ...matlab拟合工具箱cftool %拟合数据曲线;线性最小二乘法是解决曲线拟合的最常用的方法, %1、多项式拟合函数;p=polyfit(x,y,n);求p拟合函数在xi处的近似值pi=polyv
  • 最小二乘法与matlab拟合工具箱cftool

    万次阅读 多人点赞 2015-05-03 16:21:41
    一)关于最小二乘法 百度百科解释: 最小二乘法(又称最小平方法)...用于数据拟合,直观的认识如下图所示:实际中你的数据可能是绿线所表示的那样(当然多数时候是离散的点),很明显,这样的数据没有规律也不光
  • 一)关于最小二乘法百度百科解释:最小二乘法(又称...用于数据拟合,直观的认识如下图所示:实际中你的数据可能是绿线所表示的那样(当然多数时候是离散的点),很明显,这样的数据没有规律也不光滑,那么你想用一光...
  • matlab基础 数据拟合

    2015-08-16 11:08:10
    matlab拟合数据有工具箱cftool (支持多项式 指数 高斯多种函数拟合.)  当x-y有对应关系时,即x,y都是已知数据集,用 polyfit函数 可以作多项式拟合 polyfit(x,y,n) n表示多项式次数  实际中往往自变量和因变量 有...
  • 2、启动曲线拟合工具箱》cftool 3、进入曲线拟合工具箱界面“Curve Fitting tool”(1)点击“Data”按钮,弹出“Data”窗口;(2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,...
  • Matlab 曲线拟合

    2015-05-14 23:30:12
    matlab中经常需要对数据进行曲线拟合,如最常见的多项式拟合,一般可以通过cftool调用曲线拟合工具(curve fit tool),通过图形界面可以很方便的进行曲线拟合,但是有些时候也会遇到不方便用图形工具。...
  • matlab函数拟合

    千次阅读 2017-02-19 22:31:00
    matlab中关于函数的拟合提供了很拟合函数,这里不再一一介绍。仅对常用的多项式拟合和已知函数类型的拟合中一部分matlab函数的使用进行介绍。 1.1多项式拟合 对于 形式的拟合函数,其中 为待定系数。我们可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,211
精华内容 2,084
关键字:

matlab拟合多个自变量

matlab 订阅