精华内容
下载资源
问答
  • 如何用一组函数拟合
    千次阅读
    2021-04-18 05:56:49

    以第一个为例:1、在命令行输入数据:x=6.69:0.02:7.53;y=4.2,3.7,3.3,2.95,2.63,2.33,2.11,1.87,1.65,1.47,1.32,1.17,1.04,0.925,0.82,0.735,0.653,0.582,0.52,0.462,0.412,0.366,0.325,0.289,0.258,0.23,0.205,0.182,0.162,0.145,0.129,0.115,0.102,0.091,0.081,0.072,0.064,0.057,0.051,0.0455,0.0403,0.036,0.032];2、启动曲线拟合工具箱>>cftool3、进入曲线拟合工具箱界面“CurveFittingtool”(1)点击“Data”按钮,弹出“Data”窗口;(2)利用Xdata和Ydata的下拉菜单读入数据x,y,可修改数据集名“Datasetname”,然后点击“Createdataset”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数据集的曲线图;(3)点击“Fitting”按钮,弹出“Fitting”窗口;(4)点击“Newfit”按钮,可修改拟合项目名称“Fitname”,通过“Dataset”下拉菜单选择数据集,然后通过下拉菜单“Typeoffit”选择拟合曲线的类型,工具箱提供的拟合类型有:CustomEquations:用户自定义的函数类型Power:幂逼近,有2种类型,a*x^b、a*x^b+c在本例中选Power,即可得到拟合曲线。

    阅读全文 >

    更多相关内容
  • python函数拟合

    千次阅读 2020-09-21 21:53:58
    python函数拟合
    • 背景

    图 1  xyz原数
    最近在抖音直播数学答疑的时候,恰好有一位朋友问到了这个问题,已知x,z,y三列数据如上图所示,请问y的最后一位数是多少?

    乍一看,还以为很简单,拎(抡)起粉笔就一顿操作(猛如虎)

    (1)分别将x,z,y三列数据记作3个数列 { x n } , { z n } \{x_n\}, \{z_n\} {xn},{zn} { y n } \{y_n\} {yn}, 其中n表示其所在数列的序号或位置。

    (2)很容易发现如下规律
    z n − x n = 6 (1) z_n-x_n=6 \tag{1} znxn=6(1)

    x n + y n = x n + 1 (2) x_n+y_n=x_{n+1} \tag{2} xn+yn=xn+1(2)
    以及

    z n + y n = z n + 1 (3) z_n+y_n=z_{n+1} \tag{3} zn+yn=zn+1(3)

    将(2)和(3)组合一下便得到(1),即

    z n − x n = z n + 1 − x n + 1 = 6 (4) z_n-x_n=z_{n+1}-x_{n+1} =6 \tag{4} znxn=zn+1xn+1=6(4)

    而问题相当于是要求 { y n } \{y_n\} {yn}的下一个 y n + 1 y_{n+1} yn+1,上面3个关系式中却没有任何项涉及到,故这些关系不能解决根本问题,现在摆在我们面前的有两条路

    • 找出数列 { x n } \{x_n\} {xn} , { z n } \{z_n\} {zn} 的下一项 m 和 m+6,然后利用(1)-(4)的关系进行求解 y n y_{n} yn 下一项 λ \lambda λ
    序号123456789
    x-550296410m
    z1116815121016m+6
    y10-527-3-26 λ \lambda λ
    • 直接找出 { y n } 和 { x n } , { z n } \{y_n\} 和\{x_n\}, \{z_n\} {yn}{xn},{zn} 之间的关系表达式, 即

    y n = f ( x n , z n ) (5) y_n = f(x_n, z_n) \tag{5} yn=f(xn,zn)(5)

    { x n } \{x_n\} {xn} { z n } \{z_n\} {zn}的关系,(5)又可以改写成

    y n = f ( x n ) (6) y_n = f(x_n) \tag{6} yn=f(xn)(6)

    第一条道路相当于绕了一圈,简称间接法,第二条道路更直接,简称直接法,我们先采用直接法来进行解答

    • 先画出 { y n } 和 { x n } \{y_n\} 和\{x_n\} {yn}{xn}散点图

    x, y散点图

    为了找出 { y n } 和 { x n } \{y_n\} 和\{x_n\} {yn}{xn}之间的函数关系,我们可以先建立一个最简单最纯粹的假设

    y = a x + b (7) y =ax+b \tag{7} y=ax+b(7)

    没错,就是最简单的线性关系,然后拟合出来系数 a 和 b分别是 -0.97580645和5.0702765 (保留8位小数),这样 { y n } 和 { x n } \{y_n\} 和\{x_n\} {yn}{xn}之间的函数关系便是

    y = − 0.9758 x + 5.07 (8) y = -0.9758 x + 5.07\tag{8} y=0.9758x+5.07(8)

    然后画出来拟合函数,观察其与原数列之间的差距

    一次拟合
    我们看到除了第1个点和第5个点靠得近,其余的点差距还是挺大的,既然一次拟合性能太差,那么我来个2次函数呗,即假设

    y = a x 2 + b x + c (9) y =ax^2+bx+c \tag{9} y=ax2+bx+c(9)

    2次拟合
    观察发现2次函数拟合和1次函数拟合没啥大的区别,再继续提高拟合函数次数

    4次时候
    4次函数拟合

    观察发现第1,3,4,5四个点都靠的比较近,差距在缩小,继续提高次数
    5次的时候
    5次函数拟合

    观察发现第2,6,7三个点拟合的还不够完美,继续提高次数

    6次的时候

    6次函数拟合

    此时,拟合曲线恰好经过数列 { y n } \{y_n\} {yn}的7点,可以认为拟合效果比较完美,此时的拟合函数为

    y = − 0.01265 x 6 + 0.2035 x 5 − 0.591 x 4 − 4.176 x 3 + 22.7 x 2 − 24.32 x + 2 (10) y = -0.01265 x^6 + 0.2035 x^5 - 0.591 x^4 - 4.176 x^3 + 22.7 x^2 - 24.32 x + 2 \tag{10} y=0.01265x6+0.2035x50.591x44.176x3+22.7x224.32x+2(10)

    将x = 10代入上(10)式,求得 y = -351.60606060605966
    从y值可以猜出这是一个无限循环小数,循环节为6060,故最后所求的y值为

    − 351. 6060 ˙ -351.\dot{6060} 351.6060˙

    • 完整代码
    # -*- coding: utf-8 -*-
    """
    Project name: 找规律
    Description:
    Created on Sun Sep 20 17:27:34 2020
    @author: 帅帅de三叔    
    """
    import numpy as np #导入数值分析模块
    import matplotlib.pyplot as plt #导入绘图模块
    
    x0 = [1, 2, 3, 4, 5, 6, 7]
    x = [-5, 5, 0, 2, 9, 6, 4]
    z = [1, 11, 6, 8, 15, 12, 10]
    y = [10, -5, 2, 7, -3, -2, 6]
    
    plt.figure(figsize = (6,4))
    plt.scatter(x0, x, color = 'r', label = "x")
    plt.scatter(x0, z, color = 'g', label = "z")
    plt.scatter(x0, y, color ="brown", label = "y")
    
    coef = np.polyfit(x, y, 6) #求出系数
    print('拟合函数的系数 :\n', coef ) #打印出系数
    funExpression = np.poly1d(coef) #求出表达式
    print('拟合表达式 :\n',funExpression)  #打印出表达式
    yFit =np.polyval(funExpression, x) #求出拟合函数的y值
    print("拟合出来的y值:\n", yFit)
    plt.plot(x0, yFit, color = 'blue', label ="fitting line")
    
    nextY = np.polyval(funExpression, 10) #求出拟合函数的y值
    print("所求的y的值为:", nextY )
    plt.legend(loc = "upper left")
    plt.show()
    

    参考文献
    1, https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.polyfit.html

    在这里插入图片描述

    展开全文
  • 复杂函数拟合+非线性方程解法

    千次阅读 2021-04-25 13:23:19
    model1:fx=(sqrt((b(1)*x.^4-b(3)*x.^2).^2+(b(2)*x.^3).^2)./sqrt((x.^4-b(5)*x.^2+b(7)).^2+(b(6)*x-b(4)*x.^3).^2));b=[-126.524685516079.96781-499531494.4-2448.40429213863776.59-76009742061.47...

    model1:

    fx=(sqrt((b(1)*x.^4-b(3)*x.^2).^2+(b(2)*x.^3).^2)./sqrt((x.^4-b(5)*x.^2+b(7)).^2+(b(6)*x-b(4)*x.^3).^2));

    b=[-126.5246855  16079.96781  -499531494.4  -2448.404292  13863776.59  -7600974206  1.478533714e+013];

    RSS = 430.135653049

    MSe = 9.1518

    R^2 = 0.98651

    model2:

    fx=(b(1)+b(2)*x+b(3)*x.^2+b(4)*x.^3+b(5)*x.^4+b(6)*x.^5-exp(b(7)+b(8)*x+b(9)*x.^2))./(1+b(10)*x+b(11)*x.^2+b(12)*x.^3+b(13)*exp(b(14)*x+b(15)*x.^2+b(16)*x.^3));

    b=[-120.0852142  0.4368249293  -0.0005760847247  3.618694559e-007  -1.10710635e-010  1.335110246e-014  -317.04638  0.2370034288  -4.392140671e-005  0.000299042693  -1.477839811e-006  4.201168402e-009  -0.1340067074  0.004285227225  -1.009140154e-006  1.066439937e-010];

    RSS = 26.2423776022

    MSe = 0.69059

    R^2 = 0.99918

    如图:

    小程序如下:

    clear,clc

    X=load('data.txt');

    x=X(:,1);y=X(:,2);

    fx1=@(b,x)(sqrt((b(1)*x.^4-b(3)*x.^2).^2+(b(2)*x.^3).^2)./sqrt((x.^4-b(5)*x.^2+b(7)).^2+(b(6)*x-b(4)*x.^3).^2));

    fx2=@(b,x)(b(1)+b(2)*x+b(3)*x.^2+b(4)*x.^3+b(5)*x.^4+b(6)*x.^5-exp(b(7)+b(8)*x+b(9)*x.^2))./(1+b(10)*x+b(11)*x.^2+b(12)*x.^3+b(13)*exp(b(14)*x+b(15)*x.^2+b(16)*x.^3));

    b1=[-126.5246855  16079.96781  -499531494.4  -2448.404292  13863776.59  -7600974206  1.478533714e+013];

    b2=[-120.085214153950,0.436824929281876,-0.000576084724723369,3.61869455868768e-07,-1.10710634993557e-10,1.33511024623194e-14,-317.046379983946,0.237003428785357,-4.39214067123512e-05,0.000299042692952060,-1.47783981141088e-06,4.20116840182288e-09,-0.134006707366403,0.00428522722499202,-1.00914015394799e-06,1.06643993715890e-10];

    figure(1),clf

    plot(x,y,'o','markersize',10,'markerfacecolor','k')

    hold on

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

    y1=fx1(b1,x1);

    plot(x1,y1,'b-','linewidth',2.5)

    y2=fx2(b2,x1);

    plot(x1,y2,'r-','linewidth',2.5)

    legend('data','model1','model2','location','best')

    axis tight

    nh351.jpg

    (45.51 KB, 下载次数: 8)

    2012-10-23 06:45 上传

    442a53943febe9465fc072b4fbe10813.gif

    b2a5a3e0dcc7d508e00275fe42fce1b5.gif

    00b410f3bc37d0f5ae07d042c2d3d944.png

    展开全文
  • python自定义函数拟合

    2020-12-06 06:25:16
    import numpy as npimport matplotlib.pyplot as pltfrom scipy.optimize import curve_fit#python拟合函数最主要模块就是cure_fit#准备数据x=[一组数据]y=[一组数据]#定义你自己想要拟合函数def func(x,E0,B0,...

    import numpy as np

    import matplotlib.pyplot as plt

    from scipy.optimize import curve_fit#用python拟合函数最主要模块就是cure_fit

    #准备数据

    x=[一组数据]

    y=[一组数据]

    #定义你自己想要拟合的函数

    def func(x,E0,B0,B1,V0):

    return E0+(9.0/16)*V0*B0*(((V0/x)**(2.0/3)-1)**(3.0)*B1)+(9.0/16)*V0*B0*((V0/x)**(2.0/3)-1)**(2.0)*(6-4*(V0/x)**(2.0/3))

    #定义好自己需要的函数之后就是拟合

    #popt是一个一维数组,表示得到的拟合方程的参数

    #pcov是一个二维数组,是在popt参数下得到的协方差

    popt,pcov=curve_fit(func,x,y,[-800,-1,-1,930]) #后面这个数组是进行设置初猜,即使初猜设置的不是特别好,也能拟合出来比较理想的效果。如果你不设置初猜的话,默认的都是1

    print(popt)

    E0=popt[0]

    B0=popt[1]

    B1=popt[2]

    V0=popt[3]

    print(pcov)

    yval=func(x,E0,B0,B1,V0)#拟合完参数之后 就用拟合之后的参数来计算函数的值,即得到拟合拟合曲线的数值

    plt.scatter(x,y)#原始数据画图

    plt.plot(x,yval,'g',label='E0=%5.3f,B0=%5.3f,B1=%5.3f,V0=%5.3f'%tuple(popt))#拟合之后的数据画图 tuple是把列表变成元组

    plt.legend()

    plt.show()

    展开全文
  • 二次函数拟合算法

    千次阅读 2021-05-22 10:52:07
    二次函数拟合算法原理:在给定一组数据序列(x i,y i),i=0,1,2…m,二次多项式拟合这组数据时,设p(x)=a0+a1x+a2x2,则根据拟合函数与数据序列的均方误差最小原则,可以得到二次多项式函数拟合的矩阵计算方程如下...
  • matlabsin函数拟合

    千次阅读 2021-04-18 17:28:22
    Matlab中插值拟合函数汇总和使用说明interp1,interp2,interp3,interpft,griddata,spline,interpn,meshgrid,ndgrid,table1 Matlab 中插值拟合函数汇总和使用说明命令 1......使用?MATLAB 曲线拟合工具箱做曲线拟合在...
  • 代价函数参数引入(监督学习)代价函数单个参数优化拟合过程(θ0 = 0的情况下)两个参数情况下的优化过程(θ1与θ0都参与优化) 参数引入(监督学习) Hypothesis是假设函数,假设该函数的两个参数:y = θ1x + θ0,θ1是...
  • 【转】指数、幂函数拟合

    千次阅读 2020-12-29 08:37:17
    1、次二次多项式拟合一次二次比较简单,直接使用numpy中的函数即可,polyfit(x, y, degree)。2、指数幂数拟合curve_fit使用scipy.optimize 中的curve_fit,幂数拟合例子如下:from scipy.optimize import curve_...
  • 2D NMR 光谱拟合器,1.0 版,2015 Ali Shaban (1), Sevastyan O. Rabdano (1,2) (1) 俄罗斯圣彼得堡国立大学物理系; (2) 俄罗斯圣彼得堡国立大学生物分子核磁共振实验室; 从格式化的文本文件中读取光谱,该文件...
  • 使用Matlab对散点进行函数拟合

    千次阅读 2020-02-17 22:56:42
    使用Matlab对散点进行函数拟合曲线拟合工具箱介绍1 单一变量的曲线逼近2 启动曲线拟合工具箱3 进入曲线拟合工具箱界面“Curve Fitting tool”4 注意5 参考 曲线拟合工具箱介绍 Matlab有个功能强大的曲线拟合工具箱...
  • 提出种基于传感器温度补偿的双指数函数拟合算法,方面采用双指数函数对非线性的温度系数曲线进行补偿,另方面在双指数函数拟合的算法中,提出种具有高精度初值的交替迭代法。该方法首先利用四数据点计算出...
  • 本帖最后由 如果微笑533 于 2016-8-30 16:05 编辑有一组数据x=[4.3000 4.2000 4.1000 4.0000 3.9000 3.8000 3.8000 3.7000 3.6000 3.6000 3.5000 3.5000 3.40003.4000 3.4000 3.4000 3.3000 3.3000 3.3000 3.4000 3....
  • 数值分析的三大基础工具 拟合:已知点列,从整体上靠近它们 插值:已知点列,并且完全经过点列 逼近:已知曲线,或者点列,通过逼近使得构造的函数无限靠近...用一函数拟合:1)求参数 coefficient=polyfit(x,y,1);
  • 拟合拟合问题的目标是寻求函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。必须有函数表达式、不一定通过所有数据点。二、模型适用范围或案例功能:...
  • 3元函数拟合及结果.docx

    千次阅读 2021-04-21 14:45:05
    3元函数拟合及结果代码x1=[13.51,14.08,13.82,13.40,13.77,13.41,13.56,14.08,13.23,13.35,13.09,13.86,13.07,13.19,13.30,13.58,13.95,13.59,13.45,13.76,13.58,13.48,13.39,13.35,13.37,13.46,13.20,13.18,13.21,...
  • 我们现在来做其中的第拟合的题。题目重述如下:表所给数据做2次和3次多项式拟合。试结合多项式拟合曲线对所得结果进行比较分析! z2 a$ G/ e; g8 I: Q' f% I( s L" n9 ]. C6 H, E拟合数据& L+ m$ C4 h; h; ...
  • 利用scipy.optimize.curve_fit()进行指数函数拟合。 curve_fit本质是提供个目标函数和初值,通过优化算法去搜索出最佳的拟合参数。可以提供个初值,使得拟合更快更准。 得到拟合出的系数,进行后续的数据处理。 ...
  • 使用matlab进行三角函数拟合

    万次阅读 多人点赞 2018-02-25 11:26:24
    近日同学求助帮忙做一下数据的拟合...在这里,我使用了matlab的曲线拟合工具箱curve fit tool (cftool),在matlab命令行中输入cftool就会自动打开该工具箱。 其中a,b, c, d是自定义的参数,你可以随意的删减,...
  • MATLAB中的维插值与函数拟合

    千次阅读 2021-08-08 16:10:10
    本文主要记录常用的维插值与函数拟合使用方法 文章目录前言维插值二、函数拟合2.1 多项式拟合2.1.1多项式拟合指令2.1.2 图形窗口的多项式拟合2.2 指定函数拟合参考资料 前言 最近在学习数学建模,这部分...
  • 多个自变量的函数拟合问题

    千次阅读 2021-04-18 16:27:30
    有七数据(1,50):x=[ 13.4171 5.652496 7.560203 7.005844 11.98577 7.746066 10.69772 8.115705 14.04746 10.89177 8.992618 13.90936 6.104227 11.04632 5.09778 14.52481 5.335827 13.0791 14.87349 14.3976 11...
  • 如果有一组数据,如何确定他们来自哪个统计分布? 从数据分析的角度,我们并不想要通过严格的统计方法去找到这个分布,Python中有一个可以自动拟合数据分析的库 —— distfit 。这是一个python包,用于通过残差平方...
  • 模型拟合之 幂&指数函数拟合

    千次阅读 2020-12-22 22:36:07
    给定了一组[x,y],让我们去拟合一个指数函数,要如何做? 不卖关子: 设待拟合函数为 y=k∗xay=k*x^{a}y=k∗xa 需要求出kkk和aaa. 思路是两边取对数,将指数函数拟合问题转换成线性函数 变换后: log(y)=log(k...
  • Origin使用自定义函数拟合曲线函数

    千次阅读 2020-12-30 10:02:38
    (2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2016年10月28日)最近应该是六叔的物化理论作业要交了吧,很多人问我六叔的作业里面有两道题要怎么进行图像函数拟合。综合起来的问题主要有两个:1...
  • 引入在实际项目中,往往有这样的需求:对采集到...方法获取实验数据x, y利用np.polyfit(x, y, 2)进行二次拟合得到拟合出的系数,进行后续的数据处理实例已知一组二次曲线型数据,要求拟合出该曲线,并且返回最大点/...
  • x=0:0.1:2;我个人认为你可以照着下面做:% by dynamic of matlab技术论坛% see alsoy=[-0.4 1....matlab拟合二元二次函数,可以这样处理: 1、提供试验数据,如x,y(一般要求十以上) 2、根据x,y 数据,plot()...
  • 二元函数曲线拟合的Matlab实现第27 卷 德 州 学 院 学 报 Vol.27148 2011 年7 月 Journal of Dezhou University July,2011二元函数曲线拟合的Matlab 实现魏清洁,王玉彬(武城二中,山东德州25...
  • 不论是 matlab 还是 R 语言,根据一组数据拟合分布函数时,只能拟合出特定分布的参数值,并不能给出最适合这组数据的分布函数。例如,matlab 有 normfit 函数来计算一组数据拟合成正态分布时的均值和方差,wblfit ...
  • Demo1: 对50个离散点进行简单线性函数拟合 from mindspore import context context.set_context(mode=context.GRAPH_MODE, device_target="CPU") #设置为CPU模式 import numpy as np import matplotlib.pyplot as ...
  • 其中一种常见的形式为:二次函数拟合。 方法 获取实验数据x, y 利用np.polyfit(x, y, 2)进行二次拟合 得到拟合出的系数,进行后续的数据处理 实例 已知一组二次曲线型数据,要求拟合出该曲线,并且返回最大点/对称...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 92,318
精华内容 36,927
关键字:

如何用一组函数拟合