精华内容
下载资源
问答
  • http://www.cnblogs.com/softlin/p/5965939.html 挖坑 转载于:https://www.cnblogs.com/Macaulish/p/6233890.html

    http://www.cnblogs.com/softlin/p/5965939.html

    挖坑

    转载于:https://www.cnblogs.com/Macaulish/p/6233890.html

    展开全文
  • 对于某些非线性函数,如指数函数y=e^(ax+b),也可以函数转化后,求得精确的拟合结果,如上述指数函数可转化为x=(ln y)/a -b/a,同样可以求得具有全局最优拟合误差的拟合函数。上述函数都可以用MATLAB的regress函数...
    1.  前言(不在意来龙去脉的可忽略不看)
    对于多项式函数,可以用最小二乘法求得精确的拟合结果,使得拟合函数具有全局最优的拟合误差;对于某些非线性函数,如指数函数y=e^(ax+b),也可以对函数转化后,求得精确的拟合结果,如上述指数函数可转化为x=(ln y)/a -b/a,同样可以求得具有全局最优拟合误差的拟合函数。上述函数都可以用MATLAB的regress函数或者polyfit函数求得最优的拟合结果,或者可以用广义逆矩阵的最小二乘解计算而得。
    但是,对于大多数非线性函数,难以求得拟合误差全局最优的拟合结果,形如y=c1*e^(px)+c2*e^(qx)。这一类函数,一般做法是首先预估拟合函数的参数,以此作为初始值,采用迭代优化的方法求出局部最优的拟合参数,MATLAB中用lsqcurvefit或者nonlinfit函数求出拟合函数,拟合结果的准确性由选取的初始点决定,初始点的选取极为困难。


    2. 非线性拟合转化为线性拟合
    对于大多数指数函数、三角函数、多项式函数通过四则运算或者复合得到的函数,通常可以用线性微分方程来表示,形如y''+ay'+by=0的常系数线性微分方程则可以表示以下形式的函数:①y=C1*e^(p*x)+C2*e^(q*x);②y=C1*(1+C2*x)*e^(w*x);③y=e^(p*x)*(C1*sin (w*x)+C2*cos (w*x))。
    对于上述非线性函数,则可以通过拟合线性微分方程的系数,再计算出对应的非线性函数的参数,并利用样本数据作为初始条件,拟合出函数中的其他常数项。
    微分方程需要转化为差分方程:①y'(n)=(y(n+1)-y(n-1))/(x(n+1)-x(n-1));②y''(n)=(y(n+1)-2*y(n)+y(n-1))/((x(n+1)-x(n-1))/2)^2。
    通过拟合方程y''+ay'+by=0则可得到a和b,再通过求解二次方程r^2+a*r+b=0,得到两个解r1和r2。
    当r1和r2不相等时,则可得到函数y=C1*e^(r1*x)+C2*e^(r2*x),再利用样本数据线性拟合则可得到C1和C2。
    当r1=r2时,可得到函数y=C1*e^(r1x)+C2*x*e^(r1x),再利用样本数据线性拟合则可得到C1和C2。
    当r1和r2为共轭复数时,可得函数y=e^(a*x)*(C1*sin (b*x)+C2*cos (b*x)),其中a和b分别为r1的实部和虚部,再利用样本数据线性拟合则可得到C1和C2。


    事例MATLAB代码如下:
    % 产生样本数据
    x = linspace(0,98,50)';
    y = 0.9*exp(-0.2*x)-0.3*exp(-0.06*x)+10.57;
    plot(x,y)
    % 计算差分
    dyx = (y(3:end) - y(1:end-2))./(x(3:end) - x(1:end-2));
    ddyx = (y(3:end) - 2*y(2:end-1) + y(1:end-2))./(x(3:end) - x(1:end-2)).^2*4;
    % 拟合微分方程系数
    A = [dyx,y(2:end-1),-1*ones(length(dyx),1)];
    b = -ddyx;
    a = (A.'*A)\A.'*b;
    a(3) = a(3)/a(2);
    % 求解二次方程
    syms r
    r0 = double(solve(r^2+a(1)*r+a(2)))
    % 线性拟合得到常数项C1,C2
    A = [exp(r0(1)*x),exp(r0(2)*x)];
    C = (A.'*A)\A.'*(y-a(3))
    % 作图
    hold on
    plot(x,C(1)*exp(r0(1)*x)+C(2)*exp(r0(2)*x)+a(3),'r.')
    最后,还可以用lsqcurvefit函数进一步优化拟合结果,采用上述方法得到的参数作为初始点,可以修正差分方程拟合导致的误差。
    f = @(b,x)b(1)*exp(b(2)*x)+b(3)*exp(b(4)*x)+b(5);
    b0 = [C(1);r0(1);C(2);r0(2);a(3)];
    b1 = lsqcurvefit(f,b0,x,y)
    hold on
    plot(x,f(b1,x),'k.')

    展开全文
  • Python实现数据线性拟合

    千次阅读 2019-04-08 23:50:12
    实验室老师让给数据画一张线性拟合图。不会matlab,就琢磨着用python。参照了网上的一些文章,查看了帮助文档,成功的写了出来 这里用到了三个库 import numpy as np import matplotlib.pyplot as plt from scipy ...

    实验室老师让给数据画一张线性拟合图。不会matlab,就琢磨着用python。参照了网上的一些文章,查看了帮助文档,成功的写了出来

    这里用到了三个库

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import optimize
    
    
    def f_1(x, A, B):
        return A * x + B
    
    plt.figure()
    # 拟合点
    x0 = [75, 70, 65, 60, 55,50,45,40,35,30]
    y0 = [22.44, 22.17, 21.74, 21.37, 20.92,20.67,20.32,20.05,19.84,19.59]
    
    # 绘制散点
    plt.scatter(x0[:], y0[:], 3, "red")
    
    # 直线拟合与绘制
    A1, B1 = optimize.curve_fit(f_1, x0, y0)[0]
    x1 = np.arange(30, 75, 0.01)#30和75要对应x0的两个端点,0.01为步长
    y1 = A1 * x1 + B1
    plt.plot(x1, y1, "blue")
    print(A1)
    print(B1)
    plt.title("  ")
    plt.xlabel('t')
    
    plt.ylabel('Mt/g')
    plt.show()
    

    用的到的api:
    numpy.arrange
    scipy.optimize.curve_fit
    实验效果如下,图像和数据都得到了,非常满意了
    在这里插入图片描述在这里插入图片描述

    展开全文
  • Matlab 线性拟合线性拟合

    千次阅读 2019-01-24 12:04:24
    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 + p2f =      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) + cf =      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)+cWarning: Start point not provided, choosing random startpoint. > 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+cWarning: Start point not provided, choosing random startpoint. > 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 cp3=fittype(@(a,b,c,x) a*x.^2+b*x+c)f3=fit(x,y,p3)%show resultsscatter(x,y);%scatter pointc1=plot(f1,'b:*');%bluehold onplot(f2,'g:+');%greenhold onplot(f3,'m:*');%purplehold off


               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 利用nlinfit函数实现数据线性拟合

    万次阅读 多人点赞 2018-08-13 09:40:48
    所谓“拟合”,指的是在已有一组实验数据的前提下,研究这组数据有怎样的函数关系——最终结果是从这一组看似漫无规律的数据点中“找出”能用数学表达式表示的规律。 用数学语言描述的拟合定义如下: 一个典型的...
  • 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]'...
  • 空间三维散点数据线性拟合

    万次阅读 2016-03-31 22:19:40
    % 三维数据进行直线拟合,将直线拟合成如下形式: % x-a(1) y-a(2) z-a(3) % ------ = ------ = ------ % a(4) a(5) a(6) % 原理:下面的 d 是各数据点到拟合直线的距离,利用 lsqnonlin d 进行最小二乘 %...
  • 文章目录[MATLAB 在科学计算中的应用] 使用MATLAB 进行线性拟合前言引述MATLAB 曲线拟合函数简述一二维数据线性拟合一维数据拟合例子二维数据拟合例子高维数据线性拟合lsqcurvefitnlinfit 函数数据拟合工具箱...
  • 线性拟合

    万次阅读 2018-05-13 17:56:34
    一、用最小二乘法进行线性拟合给定一组数据做拟合直线 p(x) = a + bx ,均方误差为,在微积分理论中,Q(a,b)的极小值要满足整理成矩阵的形式:这称为拟合曲线的法方程。用消元法或克莱姆方法解出方程:二、算例数据集...
  • MATLAB进行线性拟合

    千次阅读 2020-04-20 16:59:39
    matlab进行线性拟合常用最小二乘法,适用于:已经求解出函数,但含有未知数,不过已经收集到了一系列数据 1.lsqcurvefit 格式:[x, resnorm,r,flag]=lsqcurvefit(fun, c0,xdata,ydata) c0为初始解向量;xdata,...
  • python实现最小二乘法进行线性拟合

    千次阅读 2020-10-22 22:28:42
    基本原理 ...对于线性拟合,最小二乘法存在解析解,其矩阵形式的公式如下所示: XB=Y⇒B=(XTX)−1XTY \mathbf{X B}=\mathbf{Y} \Rightarrow \mathbf{B}=\left(\mathbf{X}^{T} \mathbf{X}\right)^{-1}
  • 1、上周画的二维图进行线性拟合,如下gif所示 2、修改拟合后的图像 3、参数进行解释 第一行 Equation y=a+bx: 拟合的方程的形式是一元一次方程 第二行 Plot Distance: 拟合的变量是Distance 第三行 ...
  • Java 线性拟合、非线性拟合实例 前奏 工具包 apache common-math-3.6 JDK 1.6 线性拟合 public void main
  • MATLAB 空间三维散点数据线性拟合

    万次阅读 2017-03-26 23:55:47
    三维数据进行直线拟合,将直线拟合成如下形式:  % x-a(1) y-a(2) z-a(3)  % ------ = ------ = ------  % a(4) a(5) a(6)  % 原理:下面的 d 是各数据点到拟合直线的距离,利用...
  • maple线性拟合

    千次阅读 2018-05-15 14:25:35
    本文介绍如何利用maple散点图进行线性拟合,提供图形界面和命令行两种方式,这里使用的是maple 181、图形界面a) 首先打开maple后,选择:工具->助手->曲线拟合 b) 填充散点数据,然后点击“拟合”c...
  • Matlab指定参数的曲线进行线性拟合

    万次阅读 多人点赞 2019-01-02 20:12:28
    Matlab拟合曲线的方式有很多种,有三次样条插值、线性插值、多项式拟合等等。多项式拟合由于函数由f(x)=anxn+an−1xn−1+...+a1x+a0f(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0f(x)=an​xn+an−1​xn−1+...+a1​x+a0...
  • 利用最小二乘法进行线性拟合

    万次阅读 2013-01-13 23:00:54
    一系列输入点(x,y)进行线性拟合出的直线方程为: y = Ax + B,根据最小二乘法求出A,B的公式为: 代码实现: // ****************************************************** // * Line fitting with least ...
  • 在打开的对话框中,接受默认设置并单击“OK”以执行线性拟合。4、在图中,右键拟合结果表,然后选择“Quantities in Table”。删除除Intercept、Slope和Pearson's r之外的所有条目(多个选择使用CTRL+select)。...
  • predict函数是在原模型的基础上,依据线性拟合模型的结果所有的Height,应用Weight得到一个预测的Height。 predict(fr) 嗯,让我们把预测的数和真实的数放到一起。 heights.weights = transform...
  • 在Origin中使用自定义函数进行线性拟合  http://blog.163.com/wuhen211@126/blog/static/7474635020105233269949/ matlab拟合工具箱cftool %拟合数据曲线;线性最小二乘法是解决曲线拟合的最常用...
  • 作图法求出直线的斜率a和截据b,可以确定这条直线所对应的经验公式,但用作图法拟合直线时,由于作图连线有较大的随意性,尤其在测量数据比较分散时,同一组测量数据,不同的人去处理,所得结果有差异,因此是一种...
  • 一元线性拟合 现有两组数据,求y=a*x+c的系数 X =[12.46, 0.25, 5.22, 11.3, 6.81, 4.59, 0.66, 14.53, 15.49, 14.43, 2.19, 1.35, 10.02, 12.93, 5.93, 2.92, 12.81, 4.88, 13.11, 5.8] Y =[29.01, 4.7, 22.33,...
  • 进行数据处理时,如果需要绘制的散点图进行线性拟合,应该怎么操作呢?针对更为复杂的情况,按照不同需要进行分段线性拟合时,怎么样才能够实现多段拟合呢? 一、单段线性拟合 1、首先,把数据导入...
  • 上次博文爬取了excel的数据但是回头一看却发现忘记把列表里的字符串转化为float,这里着重讲一下,为什么不转化为int:应为pow()这样的函数不能传入int所以干脆转化为float。 这是上次博问的链接:...
  • 利用Matlab采样数据进行曲线拟合

    千次阅读 2019-03-14 08:11:42
    我们在做数据处理或者采集的时候难免会遇到实际值和采样结果之间存在误差的情况,这就需要我们通过实验结果进行曲线拟合,从而得到较为准确的结果。 这几天在做变换器的时候就遇到了处理器采样结果和实际输入电压...
  • 利用matlab实现非线性拟合0 前言1 线性拟合1.1 多项式拟合1.2 线性拟合2 一维非线性拟合2.1 简单的非线性拟合2.2 matlab中Curve Fitting App2.3 matlab中非线性拟合的实现2.3.1 fit()函数2.3.2 nlinfit()函数2.3.3 ...
  • 前面三节,我们从最简单的一元线性回归到多元线性回归,讨论了,损失函数到底由那几部分组成(这点我觉很重要,因为它不仅仅存在线性回归中还存在其他机器学习中,因此有必要搞明白他,有兴趣的请看这篇文章),后面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,304
精华内容 41,721
关键字:

对数据进行线性拟合