FindFit

FindFit[data,expr,pars,vars]

求出参数 pars 的数值,使 expr 作为关于 vars 的函数给出对 data 最佳拟合.

FindFit[data,{expr,cons},pars,vars]

在带参量的约束条件 cons 下,求最佳拟合.

更多信息和选项

  • data 可以采用形式 {{x1,y1,,f1},{x2,y2,,f2},},其中坐标 x, y, 的个数等于列表 vars 中变量的个数.
  • data 也可以采用形式 {f1,f2,},假定单坐标取值 12.
  • FindFit 返回一个替换 par1par2 的列表.
  • parsvars 都为数值时,则表达式 expr 必定产生一个数值.
  • 表达式 expr 可以线性或非线性地依赖于 pari.
  • 在线性情况下,FindFit 求出全局最优拟合.
  • 在非线性情况下,FindFit 通常求出局部最优拟合.
  • FindFit[data,expr,{{par1,p1},{par2,p2},},vars] 开始搜索一个具有 {par1->p1,par2->p2,} 的拟合.
  • 在默认的情况下,FindFit 求出一个最小平方拟合.
  • NormFunction->f 选项指定范式 f[residual] 应该被最小化.
  • 约束条件 cons 可以包含方程、不等式或它们的逻辑组合.
  • 可以给出以下选项:
  • AccuracyGoalAutomatic搜索的精确度
    EvaluationMonitor None当计算 expr 值时,运行的表达式
    FitRegularizationNone为模型 pars 的正则化
    Gradient Automaticexpr 的梯度分量列表
    MaxIterations Automatic使用的最大迭代次数
    Method Automatic所使用的方法
    NormFunction Norm最小化的范式
    PrecisionGoalAutomatic搜索的精度
    StepMonitor None计算表达式时的步长
    WorkingPrecision Automatic内部计算采用的精度
  • AccuracyGoalPrecisionGoal 的默认设置是 WorkingPrecision/2.
  • AccuracyGoalPrecisionGoal 的设置指定返回参数值的位数和 NormFunction 的值.
  • NormFunction->fFitRegularization->rfunFit 找到最小化 pars normf[{expr(pars,x1,y1,)-f1,}]+rfun[pars]pars 值.
  • NormFunction 的设置按以下形式给出:
  • f应用于残差的函数 f
    {"HuberPenalty",α}每个分量的 Huber 惩罚函数的和
    {"DeadzoneLinearPenalty",α}每个分量的死区线性惩罚函数之和
  • FitRegularization 的设置可以是以下格式:
  • None无正则化
    rfunrfun[a] 的正则化
    {"Tikhonov", λ} 的正则化
    {"LASSO",λ} 的正则化
    {"Variation",λ}lambda||TemplateBox[{Differences, paclet:ref/Differences}, RefLink, BaseStyle -> {2ColumnTableMod}][a]||^2 的正则化
    {"TotalVariation",λ}lambda||TemplateBox[{Differences, paclet:ref/Differences}, RefLink, BaseStyle -> {2ColumnTableMod}][a]||_1 的正则化
    {"Curvature",λ}lambda||TemplateBox[{Differences, paclet:ref/Differences}, RefLink, BaseStyle -> {2ColumnTableMod}][a,2]||^2 的正则化
    {r1,r2,}带有来自 r1, 和项的正则化
  • FindFit 将继续计算,直到 AccuracyGoalPrecisionGoal 指定的目标达到.
  • Method 的通常设置包括 "ConjugateGradient""PrincipalAxis""LevenbergMarquardt""Newton""QuasiNewton",默认设置是 Automatic.

范例

打开所有单元关闭所有单元

基本范例  (1)

求出素数列表的非线性拟合:

求出参数 的最佳拟合:

计算拟合函数值:

范围  (7)

简单指数拟合  (3)

对指数衰变模型进行数据拟合:

所得的模型函数:

利用模型显示数据:

从响应中分离时间:

根据余差判断模型是否较好拟合:

对于指数衰变模型的数据,采用基本对数的线性拟合:

指数模型的对数是一个数据指数的线性模型:

指数模型由对数的模型的取幂形成:

在微分方程中,指数拟合作为参数:

模型函数是微分方程的解:

使用缓存速度更快:

约束条件和起始值  (2)

求出在约束条件下的拟合:

拟合为正幅值和频率在 1 和 2 之间的模型:

比较拟合模型和数据:

余差显示出一个模式,表明频率约束太严格:

给参数一些初值,以获得更好的拟合:

搜索所有以 1 开始的参数:

搜索参数 c 更好的起始值:

比较两个拟合的效果:

多元数据  (2)

在二维空间中,对数据进行曲面拟合:

从一个近似的峰值位置开始,求出拟合:

显示数据的拟合曲面:

在四维空间中,对数据进行模型拟合:

余差与添加到数据上的随机性,在尺度上是相当的:

选项  (7)

EvaluationMonitor  (1)

统计带有数值参数的模型的计算次数:

Gradient  (1)

指定模型的梯度,避免奇点移动引起的问题:

Sinc 的导数作为一个普通公式给出时,符号导数 FindFit 运行错误:

,数据有一个点,则当 ,梯度有一个奇点:

指定一个有限的差值,避免奇点的移动:

显示拟合数据:

MaxIterations  (1)

当收敛较慢,增加 MaxIterations 可能收敛于最佳拟合:

默认情况下,收敛不能达到:

采用 1000 次迭代时,达到收敛:

Method  (1)

Method->NMinimize 彻底搜索全局极小值:

求出一个局部极小值:

搜索一个全局极小值:

比较两个拟合的效果(全局的最佳拟合用红色显示):

NormFunction  (1)

默认是求最佳的最小平方拟合:

范式替代:

StepMonitor  (1)

显示参数空间的步长来对实验数据进行 MichaelisMenten模型拟合:

一个生化酶反映速率的实验数据:

显示搜索过程中参数如何演化:

WorkingPrecision  (1)

采用较高的 WorkingPrecision 可以获得更高精度的参数估计:

应用  (7)

数学数据  (2)

对一列斐波那契数进行拟合:

底数近似黄金比例:

产生带有噪音的数据:

拟合数据:

实验数据  (3)

确定计算的近似复杂度:

对一个 FFT 的复杂度进行理论模型拟合:

显示时间数据,以及在一个对数-对数图线中的拟合:

拟合一个模型实验数据的润滑粘度:

润滑粘度的模型可以作为一个关于温度 和压力/ 的函数:

设置压力刻度,提高模型的条件:

求出刻度数据的最佳拟合参数

显示尺度缩放的实验数据的拟合图线:

n 正戊烷与异戊烷的异构率的实验数据进行模型模拟:

该比值的非线性模型函数,自变量为氢 n 正戊烷 及异戊烷

求出以适当大小开始的满足最佳拟合的参数

微分方程  (2)

求给出最佳拟合的一个微分方程模型的参数:

定义一个模型,使得在所有 值下参数 的解重复使用:

求出拟合,其公差与 ODE 解的精度相符:

显示拟合模型的数据和余差:

求出一个 KdV 方程的非孤子初始条件分解成两个孤子:

初始波分解成两个独立的波:

NDSolve 求解 PDE,获得空间网格:

最后的离散解:

具有不同速度的两个孤子的模型:

根据图形的离散解,求出拟合的初始条件估计:

绘制在中间时刻的两个孤子模型和余差:

属性和关系  (6)

FindFit 给出参数估计:

NonlinearModelFit 允许提取拟合的其他信息:

提取参数估计:

提取其他结果和诊断信息:

对于线性模型,Fit 等于 FindFit,并使用 LeastSquares

Fit,设置基为 {1,x,x2}

这等价于 FindFit,其模型函数的基是一个线性组合:

建立一个设计矩阵,用 LeastSquares 求出系数:

LinearModelFit 拟合线性模型,并提供额外的拟合结果:

FindFit 实际上使用 FindMinimum 最小化余差函数的范式:

余差是响应和模型预计之间的差异:

默认情况下,FindFit 给出符合正态分布的结果:

LogitModelFit 假定二项分布响应:

拟合是不相同的:

对于 ProbitModelFit 也是如此:

GeneralizedLinearModelFit 允许二项式和其他分布结构.

模拟伽玛分布的响应:

与正态分布响应的结果相比:

FindFitTimeSeries 的时间戳作为变量使用:

缩放时间戳,并且重新拟合:

求数值的拟合:

FindFit 对多路径 TemporalData 分别作用:

可能存在的问题  (1)

起始值  (1)

好的初始值对获得一个合适的拟合很必要:

求出初始值为 1 的拟合,其局部极小值与正确值差异很大:

通常情况下,较好的初始值对于获得较好的拟合是必要的:

Wolfram Research (2003),FindFit,Wolfram 语言函数,https://reference.wolfram.com/language/ref/FindFit.html (更新于 2019 年).

文本

Wolfram Research (2003),FindFit,Wolfram 语言函数,https://reference.wolfram.com/language/ref/FindFit.html (更新于 2019 年).

CMS

Wolfram 语言. 2003. "FindFit." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2019. https://reference.wolfram.com/language/ref/FindFit.html.

APA

Wolfram 语言. (2003). FindFit. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/FindFit.html 年

BibTeX

@misc{reference.wolfram_2024_findfit, author="Wolfram Research", title="{FindFit}", year="2019", howpublished="\url{https://reference.wolfram.com/language/ref/FindFit.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_findfit, organization={Wolfram Research}, title={FindFit}, year={2019}, url={https://reference.wolfram.com/language/ref/FindFit.html}, note=[Accessed: 22-November-2024 ]}