精华内容
下载资源
问答
  • matlab非线性拟合

    2009-11-26 21:49:27
    matlab非线性拟合matlab非线性拟合matlab非线性拟合matlab非线性拟合
  • 非线性拟合使用Matlab进行拟合是图像处理中线条变换的一个重点内容,本文将详解Matlab中的直线拟合和曲线拟合用法。关键函数:fittypeFit type for curve and surface fittingSyntaxffun = fittype(libname)ffun = ...

    Matlab 线性拟合 & 非线性拟合

    使用Matlab进行拟合是图像处理中线条变换的一个重点内容,本文将详解Matlab中的直线拟合和曲线拟合用法。

    关键函数:

    fittype

    Fit type for curve and surface fitting

    Syntax

    ffun = fittype(libname)

    ffun = fittype(expr)

    ffun = fittype({expr1,…,exprn})

    ffun = fittype(expr, Name, Value,…)

    ffun= fittype({expr1,…,exprn}, Name, Value,…)

    /***********************************线性拟合***********************************/

    线性拟合公式:

    coeff1 * term1 + coeff2 * term2 + coeff3 * term3 + ...

    其中,coefficient是系数,term都是x的一次项。

    线性拟合Example:

    Example1: y=kx+b;

    法1:

    x=[1,1.5,2,2.5,3];y=[0.9,1.7,2.2,2.6,3];

    p=polyfit(x,y,1);

    x1=linspace(min(x),max(x));

    y1=polyval(p,x1);

    plot(x,y,‘*’,x1,y1);

    结果:p =    1.0200    0.0400

    即y=1.0200 *x+ 0.0400

    法2:

    x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];

    p=fittype(‘poly1’)

    f=fit(x,y,p)

    plot(f,x,y);

    运行结果:

    x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];

    p=fittype(‘poly1’)

    f=fit(x,y,p)

    plot(f,x,y);

    p =

    Linear model Poly1:

    p(p1,p2,x) = p1*x + p2

    f =

    Linear model Poly1:

    f(x) = p1*x + p2

    Coefficients (with 95% confidence bounds):

    p1 =        1.02  (0.7192, 1.321)

    p2 =        0.04  (-0.5981, 0.6781)

    Example2:y=a*x + b*sin(x) + c

    法1:

    x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];

    EXPR = {‘x’,‘sin(x)’,‘1’};

    p=fittype(EXPR)

    f=fit(x,y,p)

    plot(f,x,y);

    运行结果:

    x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];

    EXPR = {‘x’,‘sin(x)’,‘1’};

    p=fittype(EXPR)

    f=fit(x,y,p)

    plot(f,x,y);

    p =

    Linear model:

    p(a,b,c,x) = a*x + b*sin(x) + c

    f =

    Linear model:

    f(x) = a*x + b*sin(x) + c

    Coefficients (with 95% confidence bounds):

    a =       1.249  (0.9856, 1.512)

    b =      0.6357  (0.03185, 1.24)

    c =     -0.8611  (-1.773, 0.05094)

    法2:

    x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];

    p=fittype(‘a*x+b*sin(x)+c’,‘independent’,‘x’)

    f=fit(x,y,p)

    plot(f,x,y);

    运行结果:

    x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];

    p=fittype(‘a*x+b*sin(x)+c’,‘independent’,‘x’)

    f=fit(x,y,p)

    plot(f,x,y);

    p =

    General model:

    p(a,b,c,x) = a*x+b*sin(x)+c

    Warning: Start point not provided, choosing random start

    point.

    > In fit>iCreateWarningFunction/nThrowWarning at 738

    In fit>iFit at 320

    In fit at 109

    f =

    General model:

    f(x) = a*x+b*sin(x)+c

    Coefficients (with 95% confidence bounds):

    a =       1.249  (0.9856, 1.512)

    b =      0.6357  (0.03185, 1.24)

    c =     -0.8611  (-1.773, 0.05094)

    /***********************************非线性拟合***********************************/

    Example:y=a*x^2+b*x+c

    法1:

    x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];

    p=fittype(‘a*x.^2+b*x+c’,‘independent’,‘x’)

    f=fit(x,y,p)

    plot(f,x,y);

    运行结果:

    p =

    General model:

    p(a,b,c,x) = a*x.^2+b*x+c

    Warning: Start point not provided, choosing random start

    point.

    > In fit>iCreateWarningFunction/nThrowWarning at 738

    In fit>iFit at 320

    In fit at 109

    f =

    General model:

    f(x) = a*x.^2+b*x+c

    Coefficients (with 95% confidence bounds):

    a =     -0.2571  (-0.5681, 0.05386)

    b =       2.049  (0.791, 3.306)

    c =       -0.86  (-2.016, 0.2964)

    法2:

    x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];

    %use c=0;

    c=0;

    p1=fittype(@(a,b,x) a*x.^2+b*x+c)

    f1=fit(x,y,p1)

    %use c=1;

    c=1;

    p2=fittype(@(a,b,x) a*x.^2+b*x+c)

    f2=fit(x,y,p2)

    %predict c

    p3=fittype(@(a,b,c,x) a*x.^2+b*x+c)

    f3=fit(x,y,p3)

    %show results

    scatter(x,y);%scatter point

    c1=plot(f1,‘b:*’);%blue

    hold on

    plot(f2,‘g:+’);%green

    hold on

    plot(f3,‘m:*’);%purple

    hold off

    喜欢 (0)or分享 (0)

    展开全文
  • matlab非线性拟合ppt

    2013-10-13 13:53:28
    matlab非线性拟合课件,教你怎样熟练运用matlab进行非线性拟合处理
  • matlab 非线性拟合

    2019-10-04 23:24:45
    #使用非线性最小二乘法拟合 import matplotlib.pyplot as plt from scipy.optimize import curve_fit import numpy as np #用指数形式来拟合 x = np.arange(1, 17, 1) y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, ...

    import matplotlib.pyplot as plt
    import numpy as np

    x = np.arange(1, 17, 1)
    y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, 9.70, 9.86, 10.00, 10.20, 10.32, 10.42, 10.50, 10.55, 10.58, 10.60])
    z1 = np.polyfit(x, y, 3)#用3次多项式拟合
    p1 = np.poly1d(z1)
    print(p1) #在屏幕上打印拟合多项式
    yvals=p1(x)#也可以使用yvals=np.polyval(z1,x)
    plot1=plt.plot(x, y, '*',label='original values')
    plot2=plt.plot(x, yvals, 'r',label='polyfit values')
    plt.xlabel('x axis')
    plt.ylabel('y axis')
    plt.legend(loc=4)#指定legend的位置,读者可以自己help它的用法
    plt.title('polyfitting')
    plt.show()
    plt.savefig('p1.png')

    2.指定函数拟合

    #使用非线性最小二乘法拟合
    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    import numpy as np
    #用指数形式来拟合
    x = np.arange(1, 17, 1)
    y = np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, 9.70, 9.86, 10.00, 10.20, 10.32, 10.42, 10.50, 10.55, 10.58, 10.60])
    def func(x,a,b):
        return a*np.exp(b/x)
    popt, pcov = curve_fit(func, x, y)
    a=popt[0]#popt里面是拟合系数,读者可以自己help其用法
    b=popt[1]
    yvals=func(x,a,b)
    plot1=plt.plot(x, y, '*',label='original values')
    plot2=plt.plot(x, yvals, 'r',label='curve_fit values')
    plt.xlabel('x axis')
    plt.ylabel('y axis')
    plt.legend(loc=4)#指定legend的位置,读者可以自己help它的用法
    plt.title('curve_fit')
    plt.show()
    plt.savefig('p2.png')

    转载于:https://www.cnblogs.com/colin2012/p/7779457.html

    展开全文
  • Matlab非线性拟合

    千次阅读 2011-11-06 11:40:59
    Matlab有一个功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是 y=A*x*x + B*x,
    摘自:http://blog.sina.com.cn/s/blog_4549f8330100efdt.html 
    

    一、    单一变量的曲线逼近
    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 ,工具箱的拟合效果并不好。

    展开全文
  • 可用fminsearch命令或非线性最小二乘命令lsqnonlin()函数。不过楼主的问题可以直接在EVIEWS中用非线性最小二乘估计,我算了一下,效果并不好。楼主的方程有点象Logistic回归,但也不是,我在EVIEWS中估计的结果如下...

    楼主如果要用MATALB,需要编2个M文件,一个用来定义函数,另一个用来估计参数。可用fminsearch命令或非线性最小二乘命令lsqnonlin()函数。

    不过楼主的问题可以直接在EVIEWS中用非线性最小二乘估计,我算了一下,效果并不好。楼主的方程有点象Logistic回归,但也不是,我在EVIEWS中估计的结果如下:(只算出K1=0.032275,其他算不出来)

    Dependent Variable: Y

    Method: Least Squares (Gauss-Newton / Marquardt steps)

    Date: 05/02/18   Time: 12:49

    Sample: 1988 2017

    Included observations: 30

    Failure to improve ssr (non-zero gradients) after 0 iterations

    Coefficient covariance computed using outer product of gradients

    WARNING: Singular covariance - coefficients are not unique

    Y=C(1)*(1+C(2)*EXP(C(3)-C(4)*T))^(-1/C(2))

    Coefficient        Std. Error        t-Statistic        Prob.

    C(1)        0.032275        NA        NA        NA

    C(2)        0.000000        NA        NA        NA

    C(3)        0.000000        NA        NA        NA

    C(4)        0.000000        NA        NA        NA

    R-squared        -0.538757            Mean dependent var                3897.182

    Adjusted R-squared        -0.716306            S.D. dependent var                5400.228

    S.E. of regression        7074.724            Akaike info criterion                20.69001

    Sum squared resid        1.30E+09            Schwarz criterion                20.87684

    Log likelihood        -306.3502            Hannan-Quinn criter.                20.74978

    Durbin-Watson stat        0.021762

    展开全文
  • 一、单一变量的曲线逼近Matlab有一个功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这个工具箱。假设我们要拟合的函数...
  • Matlab非线性拟合工具箱cftool

    千次阅读 2014-11-29 22:16:34
    ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是 y=A*x*x + B*x, 且A>0,B>0 。 1、在命令行输入数据: 》...
  • 本程序可以直接用于进行拟合
  • matlab非线性拟合所碰到的问题

    千次阅读 2016-05-10 09:19:10
    lsqcurvefit(f,a,x,y)解决非线性最小二乘回归问题 nlinfit(x,y,f,a)解决非线性最小二乘回归问题 在函数拟合的过程中遇到一些问题总结一下,希望能帮到需要的人 问题一:错误使用*内部矩阵维度必须一致 解
  • matlab拟合,求参数x1~x8y=den*(1-x1*ω)(x2*den+x3* a+x4* b+x5* c+x6* d+x7 *ω+x8* hf)den a b c d e hf w y1.673 3 6 6 6 ...
  • matlab 非线性拟合 y= 1 / (a + b * x)

    千次阅读 2019-07-11 20:32:23
    一、题目 已知: y= 1 / (a + b * x) x = 1.0 : 0.4 : 2.6; ...y = [0.931, 0.473, 0.297, 0.224, 0.168];...通过各种拟合方法求a, b的值,画出拟合曲线,并比较结果,分析误差 二、思路导图 三、流 程 图 ...
  • Matlab 线性拟合 非线性拟合

    千次阅读 2019-01-24 12:04:24
    Matlab 线性拟合 非线性拟合
  • matlab实现非线性曲线拟合用matlab实现非线性曲线拟合,步骤如下:(1)考虑以下的试验数据点:(第一列为x坐标,第二列为y坐标)Data=[0.0045 102.91280.0245 43.06810.0445 21.01260.0645 12.49180.0845 9.02460....
  • Matlab线性拟合和非线性拟合

    万次阅读 多人点赞 2019-01-23 09:25:36
    线性拟合 已知如下图像的x,y坐标,x = [1.0, 1.5, 2.0, 2.5, 3.0],y = [0.9, 1.7, 2.2, 2.6, 3.0],如何用一条直线去拟合下列散点? 代码: x = [1.0, 1.5, 2.0, 2.5, 3.0]'; y = [0.9, 1.7, 2.2, 2.6, 3.0]'...
  • Matlab 线性拟合 & 非线性拟合

    万次阅读 2018-07-07 11:45:53
    使用Matlab进行拟合是图像处理中线条变换的一个重点内容,本文将详解Matlab中的直线拟合和曲线拟合用法。 关键函数: fittype Fit type for cu
  • 使用Matlab进行拟合是图像处理中线条变换的一个重点内容,本文将详解Matlab中的直线拟合和曲线拟合用法。关键函数:fittypeFit type for curve and surface fittingSyntaxffun = fittype(libname)ffun = fittype...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 708
精华内容 283
关键字:

matlab非线性拟合

matlab 订阅