文档

自定义模型

自定义模型与库模型

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

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

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

线性与非线性拟合

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

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

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

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

交互式选择自定义方程拟合

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

使用自定义方程拟合来定义您自己的方程。当您选择时,会出现一个自定义方程示例自定义公式从列表中,如图所示为曲线数据。

如果有曲面数据,则示例自定义方程同时使用这两种数据x而且y

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

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

  3. 点击合适的选项如果你想指定起点或边界。缺省情况下,起始值在间隔[0,1]上随机选择,并且不受约束。您可能需要搜索合适的起始点和边界。有关示例,请参见自定义非线性ENSO数据分析

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

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

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

有关示例,请参见:

在曲线拟合App中拟合文件定义的曲线

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

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

    函数y = piecewiseLine(x,a,b,c,d,k)分段线:由两段组成的线%不是连续的。Y = 0(大小(x));这个例子包含一个for循环和if语句%纯粹是为了举例。I = 1:长度如果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.96; 0.96; 0.16; 0.97; 0.96);Y = [0.17;0.12;0.16;0.0035;0.37;0.082;...0.15; -0.046; 0.17; -0.091; -0.071);cftool
  3. 在曲线拟合应用程序中,选择x而且yX数据而且Y数据列表。

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

    分段直线(x, a, b, c, d, k)

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

    提示:如果要在命令行中使用相同的函数进行拟合,请使用相同的表达式作为输入fittype,然后使用fittype作为一个输入适合

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

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

为了适合定制模型:

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

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

的输入,并使用定义威布尔模型的自定义方程适合功能:

时间= [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是字符串或匿名函数,则工具箱使用非线性拟合算法。

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

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

有关详细示例,请参见自定义非线性普查拟合

这个话题有用吗?