主要内容

La traducción de esta página aún没有se ha actualizado a La versión más reciente。Haga clic aquí para ver la última versión en inglés。

调整数据没有直线

Este ejemplo muestra cómo ajustar una función no linear a los datos utizando varios algoritmos de Optimization Toolbox™。

Configuración de problemas

注意事项:

Data =...[0.0000 5.8955 0.1000 3.5639 0.2000 2.5173 0.3000 1.9790 0.4000 1.8990 0.5000 1.3938 0.6000 1.1359 0.7000 1.0096 0.8000 1.0343 0.9000 0.8435 1.0000 0.6856 1.1000 0.6100 1.2000 0.3946 1.4000 0.3903 1.5000 0.5474 1.6000 0.3459 1.7000 0.1370 1.8000 0.2211 1.9000 0.2636];

代表,estos puntos de datos。

t = Data(:,1);y = Data(:,2);%轴([0 2 -0.5 6])%坚持情节(t y“罗”)标题(的数据点

图中包含一个轴对象。具有标题数据点的axes对象包含一个line类型的对象。

%延迟

Nos gustaría ajustar la función

Y = c(1)*exp(-lam(1)*t) + c(2)*exp(-lam(2)*t)

A los datos。

Enfoque de solución utilzandolsqcurvefit

脂肪酸的lsqcurvefit重新解决问题fácilmente。

Para comenzar, defina los parámetros en términos de una变量x:

X (1) = c(1)

X (2) = lam(1)

X (3) = c(2)

X (4) = lam(2)

Después, defina la curva como una función de los parámetros x y los datos t:

F = @ (x, xdata) x (1) * exp (- x (2) * xdata) + x (3) * exp (- x (4) * xdata);

任意形式,初始状态和初始状态下的信号:c(1) = 1, lam(1) = 1, c(2) = 1, lam(2) = 0:

X0 = [1 1 10 0];

解算者是结果调整的代表。

[x,resnorm,~,exitflag,output] = lsqcurvefit(F,x0,t,y)
局部最小值。Lsqcurvefit停止了,因为相对于其初始值的平方和的最终变化小于函数公差的值。
x =1×43.0068 10.5869 2.8891 1.4003
Resnorm = 0.1477
Exitflag = 3
输出=带字段的结构:firstorderopt: 7.8774e-06迭代:6 funcCount: 35 cgiterations: 0算法:'信任区域反射'步长:0.0096消息:'本地最小可能....'
持有情节(t, F (x, t))

图中包含一个轴对象。具有标题数据点的axis对象包含2个类型为line的对象。

Enfoque de solución utilzandofminunc

Para resolver el problem utilzandofminunc,建立la función目标como la suma de cuadrados de los valores残留物。

Fsumsquares = @(x)sum((F(x,t) - y).^2);Opts = optimoptions(“fminunc”“算法”“拟牛顿”);[xunc, ressquared eflag outputu] =...fminunc (x0, Fsumsquares选择)
找到局部极小值。优化完成,因为梯度的大小小于最优性公差的值。
xunc =1×42.8890 1.4003 3.0069 10.5862
Ressquared = 0.1477
Eflag = 1
outputu =带字段的结构:迭代:30 funcCount: 185步长:0.0017 lssteplth: 1 firstorderopt: 2.9662e-05算法:'准牛顿'消息:'本地最小值发现....'

Tenga en cuenta quefminunc哈,我的错solución quelsqcurvefit, pero ha必须多más evaluaciones para hacerlo。Los parámetros parafminuncEstán en el orden inverso a los parámetros paralsqcurvefit;El lam市长es lam(2), no lam(1)。没有任何结果,没有任意变量的顺序。

流(['使用fminunc有%d次迭代,'...'和%d使用lsqcurvefit.\n'),...outputu.iterations output.iterations)
有30次迭代使用fminunc, 6次使用lsqcurvefit。
流(['使用fminunc计算了%d个函数,'...'和%d使用lsqcurvefit '),...outputu.funcCount output.funcCount)
185例功能评价使用fminunc, 35例使用lsqcurvefit。

划分问题,直线和没有直线

Tenga en cuenta que校正线性问题parámetros c(1) y c(2)。为了更好地解决问题(1)和问题(2),我们可以用我们的方法来解决问题propósito我们可以用我们的方法来解决问题mínimos cuadrados。

阿霍拉,重新解决问题,解决问题,空间问题,和,我的价值,和,lam(1)和,lam(2)。洛杉矶英勇de c (1) y c (2) se calculan在萨尔托使用el operador de barra invertida tal y科莫se ha descrito anteriormente。

类型fitvector
function yEst = fitvector(lam,xdata,ydata) % fitvector DATDEMO用于返回拟合函数的值。% yEst = FITVECTOR(lam,xdata)返回拟合函数y %(定义如下)在参数设置为lam的数据点xdata处的值。% yeest作为一个N × 1的列向量返回,其中N是%数据点的数量。FITVECTOR假设拟合函数y,其形式为% % y = c(1)*exp(-lam(1)*t) +…+ c(n)*exp(-lam(n)*t) % %含n个线性参数c, n个非线性参数lam。为了求解线性参数c,我们构建一个矩阵a,其中a的第j列是exp(-lam(j)*xdata) (xdata是一个向量)。然后我们求解A*c = ydata的线性最小二乘解c,其中ydata是y的观测值。A = 0 (length(xdata),length(lam));%构造一个矩阵为j = 1:length(lam) A(:,j) = exp(-lam(j)*xdata);end c = A\ydata;%求解A*c = y的线性参数c yEst = A*c; % return the estimated response based on c

结果是问题的效用lsqcurvefit, comenzando por UN punto inicial de DOS dimensions lam(1), lam(2):

X02 = [10];F2 = @(x,t) fitvector(x,t,y);[x2,resnorm2,~,exitflag2,output2] = lsqcurvefit(F2,x02,t,y)
局部最小值。Lsqcurvefit停止了,因为相对于其初始值的平方和的最终变化小于函数公差的值。
x2 =1×210.5861 - 1.4003
Resnorm2 = 0.1477
Exitflag2 = 3
output2 =带字段的结构:firstorderopt: 4.4032e-06迭代:10 funcCount: 33 cgiterations: 0算法:'信任区域反射'步长:0.0080消息:'本地最小值可能....'

La eficacia de La solución de dos dimensions es相似的La de La solución de cuatro dimensions:

流(['有%d个函数计算使用2-d '...'公式,%d使用4-d公式。'),...output2.funcCount output.funcCount)
有33个功能评估使用2-d公式,35个使用4-d公式。

El problem de división es más robusto a la conjetura initial

Escoger un mal punto de inicio para el problem original de cuatro parámetros hace que se obtenga solución本地que no es global。Escoger un punto de inicio con los mismos valores malos lam(1) y lam(2) para problem de división de dos parámetros hace que se obtenga la solución全球。Para most, volvemos a ejutar el problema original con un punto de inicio con se obtiene una solución局部相对的mala y comparative el ajusta result con la solución全球。

X0bad = [5 1 10 0];[xbad, resnormbad, ~, exitflagbad outputbad] =...lsqcurvefit (F, x0bad t y)
局部最小值。Lsqcurvefit停止了,因为相对于其初始值的平方和的最终变化小于函数公差的值。
xbad =1×4-22.9036 2.4793 28.0273 2.4791
Resnormbad = 2.2173
Exitflagbad = 3
outputbad =带字段的结构:firstorderopt: 0.0058迭代:32 funcCount: 165 cgiterations: 0算法:'信任区域反射'步长:0.0021消息:'本地最小可能....'
持有情节(t、F (xbad t),‘g’)传说(“数据”“全球健康”“不适应当地环境”“位置”“不”)举行

图中包含一个轴对象。具有标题数据点的axes对象包含3个类型为line的对象。这些对象表示数据、全局拟合、糟糕的局部拟合。

流(['在良好终点的剩余范数是%f '...'在坏终点的剩余范数是%f '),...resnorm resnormbad)
好的终点的剩余范数为0.147723,坏的终点的剩余范数为2.217300。

特马relacionados