主要内容

自定义模型

自定义模型与库模型

如果工具箱库不包含所需的参数方程,则可以创建自己的自定义方程。然而,库模型提供了快速融合的最佳机会。这是因为:

  • 对于大多数库模型,工具箱计算最佳的默认系数起始点。对于自定义模型,工具箱在间隔[0,1]上选择随机的默认起始点。您需要为自定义模型找到合适的起点。

  • 库模型使用解析雅可比矩阵。定制模型使用有限差分。

线性与非线性拟合

您可以使用自定义方程适合类型创建自定义通用方程。一般模型是(也许是非线性的)项的非线性组合。它们是由参数可能是非线性的方程定义的。自定义方程拟合采用非线性最小二乘拟合方法。

可以使用custom equation拟合类型定义自定义线性方程,不过非线性拟合效率较低,而且通常比线性最小二乘拟合慢。

  • 如果你不知道你的方程是否可以表示成一组线性函数,那么选择自定义公式.您可能需要寻找合适的起点。

  • 如果您需要自定义方程的线性最小二乘拟合,请选择线性拟合模型类型。看到自定义线性拟合

交互式地选择一个自定义等式

在曲线拟合应用程序中选择自定义公式从模型类型列表中。

使用自定义方程来定义您自己的方程。当您选择时,将出现一个示例自定义等式自定义公式从列表中,可以看到这里所示的曲线数据。

如果您有表面数据,示例自定义方程将同时使用这两种数据xy

  1. 您可以编辑xy,z到任何有效的变量名。

  2. 在下面的框中,编辑示例来定义您自己的自定义等式。你可以输入任何有效的MATLAB®表达式的变量名。可以指定函数名或脚本名(参见曲线拟合应用中由文件定义的曲线).

  3. 点击合适的选项如果要指定起始点或边界。默认情况下,起始值是在间隔[0,1]上随机选择的,不受约束。您可能需要寻找合适的起点和边界。例如,请参见自定义非线性ENSO数据分析

    如果你设置了适合的选项,然后改变其他适合的设置,应用程序会记住你的下界、上界和起点的选择,如果可能的话。对于自定义方程曲线拟合应用程序总是记住用户值,但对于许多库模型,如果你改变适合设置,然后应用程序自动计算新的最佳值的起点或下界。

您可以将自定义方程保存为已保存的曲线拟合应用程序会话的一部分。

您的函数可以在拟合期间和拟合前的预处理期间执行多次。请注意,如果您使用的函数具有副作用(如向文件写入数据或向命令窗口显示诊断信息),那么这可能很耗时。

有关示例,请参见:

曲线拟合应用中由文件定义的曲线

这个例子展示了如何在曲线拟合应用程序中提供一个函数或脚本名作为拟合模型。在文件中定义一个函数并使用它拟合曲线。

  1. 在MATLAB文件中定义一个函数。

    函数y = piecewiseLine (x, a, b, c, d, k)由两部分组成的线不连续的。y = 0(大小(x));这个例子包含了一个for循环和if语句%纯粹是为了举例。i = 1:长度(x)如果X (i) < k, y(i) = a + b.* X (i);其他的Y (i) = c + d * x(i);结束结束结束

    将文件保存在MATLAB路径下。

  2. 定义一些数据,打开曲线拟合应用程序。

    x = [0.81; 0.91; 0.13; 0.91; 0.63; 0.098; 0.28; 0.55;...0.96; 0.96; 0.16; 0.97; 0.96);y = [0.17; 0.12; 0.16; 0.0035; 0.37; 0.082; 0.34; 0.56;...0.15; -0.046; 0.17; -0.091; -0.071);cftool
  3. 在曲线拟合应用程序中选择xyX数据Y数据列表。

  4. 用你的piecewiseLine在曲线拟合应用程序中选择自定义方程拟合类型,然后在自定义方程文本框中输入函数表达式。函数取x个数据和一些参数进行拟合。

    piecewiseLine(x, a, b, c, d, k)

    曲线拟合应用程序创建一个适合使用您的功能。

提示

如果希望在命令行中使用相同的函数进行拟合,请使用相同的表达式作为输入fittype,然后使用fittype作为输入适合

ft = fittype('piecewiseLine(x, a, b, c, d, k)');F = fit(x, y, ft)
有关更多示例,请参见适合函数。

在命令行中选择一个自定义方程

适合自定义模型:

  • 控件提供自定义模型适合功能fitType输入参数。您可以使用MATLAB表达式(包括任何.m文件)、线性模型项的单元格数组或匿名函数。

  • 创建一个fittype对象的fittype控件的输入参数适合函数。

此示例加载一些数据,并使用定义Weibull模型的自定义方程作为输入适合功能:

时间= [0.1;0.1;0.3;0.3;1.3;1.7;2.1;2.6;3.9;3.9; ... 5.1; 5.6; 6.2; 6.4; 7.7; 8.1; 8.2; 8.9; 9.0; 9.5; ... 9.6; 10.2; 10.3; 10.8; 11.2; 11.2; 11.2; 11.7; 12.1; 12.3; ... 12.3; 13.1; 13.2; 13.4; 13.7; 14.0; 14.3; 15.4; 16.1; 16.1; ... 16.4; 16.4; 16.7; 16.7; 17.5; 17.6; 18.1; 18.5; 19.3; 19.7;]; conc = [0.01; 0.08; 0.13; 0.16; 0.55; 0.90; 1.11; 1.62; 1.79; 1.59; ... 1.83; 1.68; 2.09; 2.17; 2.66; 2.08; 2.26; 1.65; 1.70; 2.39; ... 2.08; 2.02; 1.65; 1.96; 1.91; 1.30; 1.62; 1.57; 1.32; 1.56; ... 1.36; 1.05; 1.29; 1.32; 1.20; 1.10; 0.88; 0.63; 0.69; 0.69; ... 0.49; 0.53; 0.42; 0.48; 0.41; 0.27; 0.36; 0.33; 0.17; 0.20;]; f = fit( time, conc, 'c*a*b*x^(b-1)*exp(-a*x^b)', 'StartPoint', [0.01, 2, 5] ) plot( f, time, conc )

使用。来定义自定义模型fittype,使用以下形式:

f = fittype (expr
哪个构造了一个自定义模型fittype对象为MATLAB表达式中包含的字符串,单元格数组,或匿名函数expr

看到fittype详情参考页:

  • 指定因变量和自变量、问题参数和系数使用fittype

  • 指定要为自定义方程使用线性拟合算法的项的单元格数组。如果expr是字符串或匿名函数,则工具箱使用非线性拟合算法。

    有关线性拟合的更多信息,请参见在命令行中选择线性拟合

  • 线性和非线性定制模型的例子。

有关逐步示例,请参见定制非线性人口普查拟合