fit
将曲线或曲面拟合成数据
全部折叠在页面中
句法
fitobject = fit(x,y,fitType)
fitobject = fit([x,y],z,fitType)
fitobject = fit(x,y,fitType,fitOptions)
fitobject = fit(x,y,fitType,Name,Value)
[fitobject,gof] = fit(x,y,fitType)
[fitobject,gof,output] = fit(x,y,fitType)
描述
创建适合于对数据fitobject
= fit(x
,y
,fitType
)x
和y
由指定的型号fitType
。
创建一个表面拟合到数据中的载体fitobject
= fit([x
,y
],z
,fitType
)x
,y
和z
。
使用由对象指定的算法选项来创建适合数据的数据fitobject
= fit(x
,y
,fitType
,fitOptions
)fitOptions
。
使用库模型使用一个或多个对参数指定的附加选项来创建数据拟合。使用以显示可用的属性名称和默认值特定库模型。fitobject
= fit(x
,y
,fitType
,Name,Value
)fitType
Name,Value
fitoptions
[
返回结构中的适合度统计fitobject
,gof
] = fit(x
,y
,fitType
)gof
。
[
返回结构中的拟合算法信息fitobject
,gof
,output
] = fit(x
,y
,fitType
)output
。
例子
拟合二次曲线
加载一些数据,适合于变量二次曲线cdate
和pop
,并绘制拟合和数据。
load census;
f = fit(cdate,pop,'poly2')
f =
线性模型 Poly2:
f(x)= p1 * x ^ 2 + p2 * x + p3
系数(95%置信区间):
p1 = 0.006541(0.006124,0.006958)
p2 = -23.51(-25.09,-21.93)
p3 = 2.113e + 04(1.964e + 04,2.226e + 04)
plot(F,cdate,pop)
有关库模型名称的列表,请参阅fitType
。
拟合多项式曲面
加载一些数据并拟合 2 x
度和3 度的多项式曲面y
。绘制适合度和数据。
load franke
sf = fit([x,y],z,'poly23')
线性模型Poly23:
sf(x,y)= p00 + p10 * x + p01 * y + p20 * x ^ 2 + p11 * x * y + p02 * y ^ 2 + p21 * x ^ 2 * y
+ p12 * x * y ^ 2 + p03 * y ^ 3
系数(95%置信区间):
p00 = 1.118(0.9149,1.321)
p10 = -0.0002941(-0.000502,-8.623e-05)
p01 = 1.533(0.7032,2.364)
p20 = -1.966e-08(-7.084e-08,3.1552e-08)
p11 = 0.0003427(-0.0001009,0.0007863)
p02 = -6.951(-8.421,-5.481)
p21 = 9.563e-08(6.276e-09,1.85e-07)
p12 = -0.0004401(-0.0007082,-0.0001721)
p03 = 4.999(4.082,5.917)
plot(sf,[X,Y,Z)
在MATLAB表中使用变量拟合曲面
加载franke
数据并将其转换为MATLAB®表格。
load franke
T = table(x,y,z);
将表中的变量指定为函数的输入,并绘制拟合。fit
f = fit([Tx,Ty],Tz,'linearinterp');
plot(f,[Tx,Ty],Tz)
在拟合之前创建适合选项和适合类型
加载和绘制数据,使用和函数创建拟合选项和拟合类型,然后创建并绘制拟合。fittype
fitoptions
加载并绘制数据census.mat
。
load census
plot(cdate,pop,'o')
为自定义非线性模型创建拟合选项对象和拟合类型,其中a和b是系数,n是与问题相关的参数。
fo = fitoptions('Method','NonlinearLeastSquares',...
'Lower',[0,0],...
'Upper',[Inf,max(cdate)],...
'StartPoint',[1 1]);
ft = fittype('a *(xb)^ n','problem','n','options',fo);
使用拟合选项和n = 2 的值来拟合数据。
[curve2,gof2] = fit(cdate,pop,ft,'问题',2)
curve2 =
一般模型:
curve2(x)= a *(xb)^ n
系数(95%置信区间):
a = 0.006092(0.005743,0.006441)
b = 1789(1784,1793)
问题参数:
n = 2
gof2 =
结构与字段:
sse:246.1543
rsquare:0.9980
dfe:19
adjrsquare:0.9979
rmse:3.5994
使用拟合选项和n = 3 的值来拟合数据。
[curve3,gof3] = fit(cdate,pop,ft,'problem',3)
curve3 =
一般模型:
curve3(x)= a *(xb)^ n
系数(95%置信区间):
a = 1.359e-05(1.245e-05,1.474e-05)
b = 1725(1718,1731)
问题参数:
n = 3
gof3 =
结构与字段:
sse:232.0058
rsquare:0.9981
dfe:19
adjrsquare:0.9980
rmse:3.4944
用数据绘制拟合结果。
hold on
plot(curve2,'M' )
plot(curve3,'c')
legend('Data','n = 2','n = 3')
hold off
拟合指定标准化和可靠选项的立方多项式
加载一些数据,并配合和策划了三次多项式具有中心和规模(Normalize
)和强大的安装选项。
load census ;
f = fit(cdate,pop,'poly3','Normalize','on','Robust','Bisquare')
f =
线性模型Poly3:
f(x)= p1 * x ^ 3 + p2 * x ^ 2 + p3 * x + p4
其中x由均值1890和标准差62.05归一化
系数(95%置信区间):
p1 = -0.4619(-1.895,0.9707)
p2 = 25.01(23.79,26.22)
p3 = 77.03(74.37,79.7)
p4 = 62.81(61.26,64.37)
plot(f,cdate,pop)
拟合由文件定义的曲线
在文件中定义一个函数并使用它来创建拟合类型并拟合曲线。
定义在MATLAB的功能®文件。
function y = piecewiseLine(x,a,b,c,d,k)
%PIECEWISELINE由两段不连续的线组成的线。
y =zeros(size(x));
%这个例子纯粹出于例子的目的而包含了for-loop和if语句。
for i = 1:length(x)
if x(i)<k,
y(i)= a + b。* x(i);
else
y(i)= c + d。* x(i);
end
end
end
保存文件。
定义了一些数据,创建一个适合类型指定功能piecewiseLine
,创建一个配合使用的配合型ft
,并绘制结果。
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];
ft = fittype('piecewiseLine(x,a,b,c,d,k)')
f = fit(x,y,ft,'StartPoint',[ 1,0,1,0,0.5 ])
plot(f,x,y)
从适合度中排除积分
加载一些数据并拟合指定要排除的点的自定义方程式。绘制结果。
加载数据并定义一个自定义方程和一些起点。
[x,y] =titanium;
gaussEqn = 'a * exp( - ((xb)/ c)^ 2)+ d'
gaussEqn =
'A * EXP( - ((XB)/ C)^ 2)+ d'
startPoints = [1.5 900 10 0.6]
startPoints = 1×4
1.5000 900.0000 10.0000 0.6000
使用自定义公式和起点创建两个拟合,并使用索引向量和表达式定义两组不同的排除点。用于Exclude
从您的合体中删除异常值。
f1 = fit(x',y',gaussEqn,'Start',startPoints,'Exclude',[1 10 25])
f1 =
一般型号:
f1(x)= a * exp( - ((xb)/ c)^ 2)+ d
系数(95%置信区间):
a = 1.493(1.432,1.554)
b = 897.4(896.5,898.3)
c = 27.9(26.55,29.25)
d = 0.6519(0.6367,0.6672)
f2 = fit(x',y',gaussEqn,'Start',startPoints,'Exclude',x <800)
f2 =
一般型号:
f2(x)= a * exp( - ((xb)/ c)^ 2)+ d
系数(95%置信区间):
a = 1.494(1.41,1.578)
b = 897.4(896.2,898.7)
c = 28.15(26.22,30.09)
d = 0.6466(0.6169,0.66764)
绘制两个适合。
plot(f1,X,Y)
title(' 符合排除的数据点1,10和25')
figure
plot(f2,X,Y)
title(“ 拟合的数据点中排除,使得x <800”)
排除点和绘制适合显示排除的数据
您可以将排除的点定义为变量,然后将它们作为输入提供给拟合函数。以下步骤重新创建前面示例中的拟合,并允许您绘制排除点以及数据和拟合。
加载数据并定义一个自定义方程和一些起点。
[x,y] =titanium;
gaussEqn = 'a * exp( - ((xb)/ c)^ 2)+ d'
gaussEqn =
'A * EXP( - ((XB)/ C)^ 2)+ d'
startPoints = [1.5 900 10 0.6]
startPoints = 1×4
1.5000 900.0000 10.0000 0.6000
使用索引向量和表达式定义两组要排除的点。
exclude1 = [1 10 25];
exclude2 = x <800;
使用自定义方程式,起点和两个不同的排除点创建两个拟合。
f1 = fit(x',y',gaussEqn,'Start',startPoints,'Exclude',exclude1);
f2 = fit(x',y',gaussEqn,'Start',startPoints,'Exclude',exclude2);
绘图都适合并突出显示排除的数据。
plot(f1,X,Y,exclude1)
title(' 符合排除的数据点1,10和25')
figure;
plot(f2,X,Y,exclude2)
title(“ 拟合的数据点中排除,使得x <800”)
对于排除点的曲面拟合示例,加载一些曲面数据并创建和绘制指定排除数据的拟合。
load franke
f1 = fit([xy],z,'poly23','Exclude',[1 10 25]);
f2 = fit([xy],z,'poly23','Exclude',z> 1);
figure
plot(f1,[xy],z,'Exclude',[1 10 25]);
title(' 符合排除的数据点1,10和25')
figure
plot(f2,[xy],z,'Exclude',z> 1);
title(“ 拟合的数据点中排除,使得Z> 1”)
拟合平滑样条曲线并返回适合度信息
加载一些数据,并适合通过变量平滑样条曲线month
和pressure
,并返回优度拟合信息和输出结构。绘制数据的拟合和残差。
load enso ;
[curve,goodness,output] = fit(month,pressure,'smoothingspline');
plot(curve,month,pressure);
xlabel('月');
ylabel('压力');
根据x-data(month
)绘制残差。
plot(curve,month,pressure,'residuals')
xlabel('月')
ylabel('残余')
使用output
结构中的数据将残差与y数据(pressure
)进行比较。
plot(pressure,output.residuals,'.')
xlabel('压力')
ylabel('残余')
拟合单项指数
以指数趋势生成数据,然后使用指数模型的曲线拟合库(单项指数)中的第一个公式拟合数据。绘制结果。
x =(0:0.2:5)';
y = 2 * exp(-0.2 * x)+ 0.5 * randn(size(x));
f = fit(x,y,'exp1');
plot(f,X,Y)
使用匿名函数拟合自定义模型
您可以使用匿名函数来更轻松地将其他数据传递到函数中。fit
在定义匿名函数之前加载数据并设置Emax
为1
:
data = importdata('OpioidHypnoticSynergy.txt');
Propofol = data.data(:,1);
Remifentanil = data.data(:,2);
Algometry = data.data(:,3);
Emax = 1;
将模型方程定义为匿名函数:
Effect= @(IC50A,IC50B,α,n,x,y)...
Emax *(x / IC50A + y / IC50B +α*(x / IC50A)...。
*(y / IC50B))。 ((x / IC50A + y / IC50B + ...
α*(x / IC50A)*(y / IC50B))。^ n + 1);
使用匿名函数Effect
作为函数的输入,并绘制结果:fit
AlgometryEffect = fit([Propofol,Remifentanil],Algometry,Effect,...
'StartPoint ',[2,10,1,0.8 ],...
'Lower',[-Inf,-Inf,-5,-Inf ],...
'Robust','LAR')
plot(AlgometryEffect,[Propofol,Remifentani],Algometry)
有关使用匿名函数和其他自定义模型进行拟合的更多示例,请参阅该fittype
函数。
查找系数顺序以设置起点和界限
对于属性Upper
,Lower
和StartPoint
,您需要查找系数条目的顺序。
创建一个合适的类型。
ft = fittype('b * x ^ 2 + c * x + a');
使用该coeffnames
函数获取系数名称和顺序。
coeffnames(ft)
ans = 3x1单元阵列
{'a'}
{'b'}
{'c'}
请注意,这ft
与用于创建的表达式中系数的顺序不同fittype
。
加载数据,创建一个拟合并设置起点。
load enso
fit(month,pressure,ft,'StartPoint',[1,3,5])
ans =
一般模型:
ans(x)= b * x ^ 2 + c * x + a
系数(95%置信区间):
a = 10.94(9.362,12.52)
b = 0.0001677(-7.985e-05,0.0004153)
c = -0.0224(-0.06559,0.02079)
这就赋予初始值的系数,如下所示:a = 1
,b = 3
,c = 5
。
或者,您可以得到拟合选项并设置起点和下限,然后使用新选项进行重新整理。
options = fitoptions(ft)
选项=
标准化:'关闭'
排除:[]
重量:[]
方法:'NonlinearLeastSquares'
鲁棒:'关闭'
StartPoint:[1x0双倍]
下:[1x0双]
上:[1x0双]
算法:'Trust-Region'
DiffMinChange:1.0000e-08
DiffMaxChange:0.1000
显示:'通知'
MaxFunEvals:600
最大:400
TolFun:1.0000e-06
TolX:1.0000e-06
options = Normalize: 'off' Exclude: [] Weights: [] Method: 'NonlinearLeastSquares' Robust: 'Off' StartPoint: [1x0 double] Lower: [1x0 double] Upper: [1x0 double] Algorithm: 'Trust-Region' DiffMinChange: 1.0000e-08 DiffMaxChange: 0.1000 Display: 'Notify' MaxFunEvals: 600 MaxIter: 400 TolFun: 1.0000e-06 TolX: 1.0000e-06
options.StartPoint = [10 1 3];
options.Lower = [0 -Inf 0];
fit(month,pressure,ft,options)
ans =
一般模型:
ans(x)= b * x ^ 2 + c * x + a
系数(95%置信区间):
a = 10.23(9.448,11.01)
b = 4.335e-05(-1.82e-05,0.0001049)
c = 5.523e-12(固定在约束)
输入参数
x
- 适合矩阵的数据
拟合的数据,用一个(曲线拟合)或两个(曲面拟合)列指定为矩阵。您可以使用在MATLAB表中指定变量tablename.varname
。不能包含Inf
或NaN
。只有复杂数据的实际部分才适合使用。
例: x
例: [x,y]
数据类型: double
y
- 适合矢量的数据
适合的数据,指定为具有相同行数的列向量x
。你可以使用一个MATLAB表格来指定一个变量tablename.varname
。不能包含Inf
或NaN
。只有复杂数据的实际部分才适合使用。
使用prepareCurveData
或prepareSurfaceData
如果您的数据不是列向量形式。
数据类型: double
z
- 适合矢量的数据
适合的数据,指定为具有相同行数的列向量x
。你可以使用一个MATLAB表格来指定一个变量tablename.varname
。不能包含Inf
或NaN
。只有复杂数据的实际部分才适合使用。
使用prepareSurfaceData
如果您的数据是不是在列向量形式。例如,如果您有3个矩阵,或者如果您的数据处于网格向量形式,其中length(X) = n, length(Y) = m
和size(Z) = [m,n]
。
数据类型: double
fitType
- 适合字符向量 |的模型类型 字符向量的单元阵列 | 匿名函数 |
fittype
适合的模型类型,指定为库模型名称字符向量,MATLAB表达式,线性模型项的单元阵列,匿名函数或使用fittype
函数构造的模型类型fittype
。您可以使用任何有效的第一个输入fittype
作为输入。fit
有关库模型名称的列表,请参阅模型名称和等式。该表显示了一些常见的例子。
库模型名称 | 描述 |
---|---|
| 线性多项式曲线 |
| 线性多项式曲面 |
| 二次多项式曲线 |
| 分段线性插值 |
| 分段三次插值 |
| 平滑样条曲线(曲线) |
| 局部线性回归(表面) |
到适合的自定义模型,使用MATLAB表达,线性模型项的单元阵列,一个匿名函数,或者创建一个fittype
与该fittype
功能并使用这个作为fitType
参数。有关示例,请参阅使用匿名函数拟合自定义模型。有关线性模型术语的示例,请参阅该函数。fitType
例如: 'poly2'
fitOptions
- 算法选项
fitoptions
使用该fitoptions
函数构造的算法选项。这是指定适合选项的名称/值对参数的替代方法。
名称 - 值对参数
指定可选的逗号分隔Name,Value
参数对。Name
是参数名称并且Value
是相应的值。 Name
必须出现在单引号(' '
)内。您可以按任意顺序指定多个名称和值对参数 Name1,Value1,...,NameN,ValueN
。
示例:'Lower',[0,0],'Upper',[Inf,max(x)],'StartPoint',[1 1]
指定拟合方法,边界和起点。
所有拟合方法的选项
'Normalize'
- 选择集中和缩放数据
'off'
(默认)|'on'
选项居中和缩放数据,指定为逗号分隔的一对组成的'Normalize'
和'on'
或'off'
。
数据类型: char
'Exclude'
- 从拟合表达式中排除的点| 索引向量 | 逻辑向量 | 空
从fit中排除的点,指定为逗号分隔对由以下'Exclude'
之一组成:
-
描述逻辑向量的表达式,例如
x > 10
。 -
一个整数向量,用于索引要排除的点,例如
[1 10 25]
。 -
所有数据点的逻辑向量,
true
表示异常值,由...创建excludedata
。
数据类型:logical
|double
'Weights'
- 重量适合
[](默认)| 向量
适合的权重,指定为由逗号分隔的对'Weights'
和与响应数据y
(曲线)或z
(曲面)大小相同的矢量。
数据类型: double
'problem'
- 要分配给问题相关常量的值
单元格数组 | | 双
要分配给问题相关常量的值,指定为由逗号分隔的对'problem'
和单元阵列,每个问题有一个元素相关常量。有关详情,请参阅fittype
。
数据类型:cell
|double
平滑选项
'SmoothingParam'
- 在范围(0,1)中平滑参数
标量值
平滑参数,指定为由'SmoothingParam'
0和1之间的逗号分隔对组成的标量值。默认值取决于数据集。只有适合的类型是可用的smoothingspline
。
数据类型: double
'Span'
- 在局部回归中使用的数据点的比例
0.25(默认)| 标量值在范围(0,1)
在局部回归中使用的数据点的比例,指定为由逗号分隔的一对'Span'
和由0到1之间的标量值指定的值。只有在拟合类型为lowess
或时才可用loess
。
数据类型: double
线性和非线性最小二乘选项
'Robust'
- 鲁棒线性最小二乘拟合方法
'off'
(默认)| LAR
|Bisquare
稳健的线性最小二乘拟合方法,指定为由'Robust'
以下值之一组成的逗号分隔对:
-
'LAR'
指定最小绝对剩余方法。 -
'Bisquare'
指定bisquare权重方法。
适合类型Method
为LinearLeastSquares
或 时可用NonlinearLeastSquares
。
数据类型: char
'Lower'
- 拟合系数的下限
[](默认)| 向量
拟合系数的下限,指定为逗号分隔对'Lower'
和矢量。默认值是一个空向量,表示 拟合不受下限限制。如果指定了边界,则矢量长度必须等于系数的数量。使用该coeffnames
函数查找矢量值中系数的条目顺序。有关示例,请参阅查找系数顺序以设置起点和界限。单独的无约束下界可以通过-Inf
。
当Method
是LinearLeastSquares
或时可用NonlinearLeastSquares
。
数据类型: double
'Upper'
- 拟合系数的上界
[](默认)| 向量
拟合系数的上限,指定为由逗号分隔的对'Upper'
和一个向量。默认值是一个空向量,表示 拟合不受上限约束。如果指定了边界,则矢量长度必须等于系数的数量。使用该coeffnames
函数查找矢量值中系数的条目顺序。有关示例,请参阅查找系数顺序以设置起点和界限。个别无约束的上限可以通过+Inf
。
当Method
是LinearLeastSquares
或时可用NonlinearLeastSquares
。
数据类型: logical
非线性最小二乘选项
'StartPoint'
- 系数的初始值
[](默认值)| 向量
系数的初始值,指定为由逗号分隔的对'StartPoint'
和向量。使用该coeffnames
函数查找矢量值中系数的条目顺序。有关示例,请参阅查找系数顺序以设置起点和界限。
如果没有开始点(空向量的默认值)传递给函数,则启发式地确定某些库模型的起点。对于有理和威布尔模型以及所有自定义非线性模型,工具箱从区间(0,1)中随机地均匀选择系数的默认初始值。因此,使用相同数据和模型的多重拟合可能导致不同的拟合系数。为了避免这种情况,请为该值指定对象或矢量值的系数的初始值。fit
fitoptions
StartPoint
可当Method
为NonlinearLeastSquares
。
数据类型: double
'Algorithm'
- 用于拟合程序
'Trust-Region'(默认)|的算法 “文伯格-马夸特”
用于拟合程序的算法,指定为由以及'Algorithm'
和'Levenberg-Marquardt'
或组成的逗号分隔对'Trust-Region'
。
可当Method
为NonlinearLeastSquares
。
数据类型: char
'DiffMaxChange'
- 有限差分梯度的最大系数变化
0.1(默认)
有限差分梯度系数的最大变化,指定为逗号分隔对'DiffMaxChange'
和标量。
可当Method
为NonlinearLeastSquares
。
数据类型: double
'DiffMinChange'
- 有限差分梯度系数的最小变化
10 -8(默认)
有限差分梯度系数的最小变化,指定为逗号分隔对'DiffMinChange'
和标量。
可当Method
为NonlinearLeastSquares
。
数据类型: double
'Display'
- 在命令窗口中显示选项
'notify'
(默认)| 'final'
| 'iter'
|'off'
在命令窗口中显示选项,指定为由'Display'
以下选项之一组成的逗号分隔对:
-
'notify'
仅在拟合不收敛时显示输出。 -
'final'
只显示最终输出。 -
'iter'
在每次迭代中显示输出。 -
'off'
不显示输出。
可当Method
为NonlinearLeastSquares
。
数据类型: char
'MaxFunEvals'
- 允许模型的最大评估数量
600
(默认)
允许模型的最大评估数,指定为逗号分隔对'MaxFunEvals'
和标量。
可当Method
为NonlinearLeastSquares
。
数据类型: double
'MaxIter'
- 适合允许的最大迭代次数
400
(默认)
允许拟合的最大迭代次数,指定为逗号分隔对'MaxIter'
和标量。
可当Method
为NonlinearLeastSquares
。
数据类型: double
'TolFun'
- 型号值10 -6的终端容差(默认)
模型值的终止容差,指定为由逗号分隔的对'TolFun'
和标量组成的逗号。
可当Method
为NonlinearLeastSquares
。
数据类型: double
'TolX'
- 系数值的终端容差
10 -6(默认)
系数值的终止容差,指定为由逗号分隔的对'TolX'
和标量组成的逗号。
可当Method
为NonlinearLeastSquares
。
数据类型: double
输出参数
fitobject
- 拟合结果
cfit
|sfit
拟合结果,返回为cfit
(对于曲线)或sfit
(对于曲面)对象。请参阅拟合后处理以查看绘图,评估,计算置信区间,整合,区分或修改拟合对象的功能。
gof
- 适合度的统计
gof
结构|
善-OF- 适合的统计,返回的gof
结构,包括在此表中的字段。
领域 | 值 |
---|---|
| 由于错误导致的平方和 |
| R平方(确定系数) |
| 错误的自由度 |
| 自由度调整的决定系数 |
| 均方根误差(标准误差) |
output
- 拟合算法信息
output
结构
拟合算法信息,作为output
包含与拟合算法相关的信息的结构返回。
字段取决于算法。例如,output
非线性最小二乘算法的结构包括此表中显示的字段。
领域 | 值 |
---|---|
| 观察次数(响应值) |
| 适合的未知参数(系数)的数量 |
| 残余矢量 |
| 雅可比矩阵 |
| 描述算法的退出条件。积极的标志表明在公差范围内收敛。零标志表示已超过功能评估或迭代的最大数量。负标志表示算法没有收敛到解决方案。 |
| 迭代次数 |
| 功能评估的数量 |
| 一阶最优性的测量(梯度分量的绝对最大值) |
| 使用拟合算法 |