La Red de Conocimientos Pedagógicos - Currículum vitae - Método de mínimos cuadrados de regresión lineal de Matlab. Por favor, dame la respuesta.

Método de mínimos cuadrados de regresión lineal de Matlab. Por favor, dame la respuesta.

Es relativamente sencillo utilizar el método de mínimos cuadrados para ajustar:

x_r=[abscissa ones(size(abscissa))]\ordinates;

Los El problema se resuelve x y γ en . Si no está limitado al método, también puede utilizar el ajuste polinomial:

p = polyfit(abscissa, coordenadas, 1);

Los resultados obtenidos son consistentes (pero los dos son vectores de columnas y vectores de filas).

Usar el método de ajuste del valor mínimo absoluto es un poco más complicado:

e = ones(size(abscissa));

f = [0; e];

A1 = [-abscisa -e -ojo(longitud(abscisa))];

b1 = -ordenadas;

A2 = [abscisa e -eye(longitud(abscisa))];

b2 = coordenadas;

c = linprog(f,[A1;A2],[b1;b2]);

p>

El coeficiente calculado es el coeficiente requerido.

El código completo es el siguiente (incluido el dibujo):

Ajuste lineal con mínimos cuadrados y mínimo error absoluto

pendiente=3;

p>

abscisa = (-5:5)'; m = longitud(abscisa);

WhiteNoise = 5*randn(m, 1);

ordenadas = pendiente *abscisa interceptar WhiteNoise;

GrossError=80;

ordenadas(6)=ordenadas(6) GrossError;

ordenadas( 10)=ordenadas(10) -GrossError;

x_r=[unidades en abscisa(tamaño(abscisa))]\ordenadas;

y2=[unidades en abscisa(tamaño(abscisa)) ]*x_r;

e = unidades(tamaño(abscisa));

f = [0; e];

A1 = [-abscisa -e -eye(longitud( abscisa))];

b1 = -ordenadas;

A2 = [abscisa e -eye(longitud(abscisa))];

b2 = ordenadas;

c = linprog(f,[A1;A2],[b1;b2]);

y1=[abscisas unos(tamaño(abscisas) )]*c(1: 2);

plot(abscisa, coordenadas, 'ro', abscisa, y2, 'b-', abscisa, y1, 'g--')

legend('Datos originales', 'Error mínimo L^2', 'Error mínimo L^1')

Los resultados de una determinada ejecución son los siguientes (debido a que los datos se generan aleatoriamente, los resultados de cada ejecución son diferentes):

Para el ajuste mínimo L1, también puede usar la función fminunc de la caja de herramientas de optimización:

objfun = @(x)sum( abs( abscisa*x(1) x(2)-ordenadas ) );

c2=fminunc(objfun, [2 -2])

y3=[abscisa unos(tamaño(abscisa ))]*c2.';

plot(abscisa, coordenadas, 'ro', abscisa, y2, 'b-', abscisa, y1, 'g--', abscisa, y3, 'm :')

legend( 'Datos originales', 'Error mínimo L^2', 'Error mínimo L^1', 'fminunc')

Los resultados de ajuste pueden ser diferentes A partir de los resultados de programación lineal antes mencionados (pero las funciones objetivo son básicamente las mismas que pueden alcanzar el mínimo), esto también muestra que este problema es esencialmente multiextremos y tiene múltiples puntos óptimos locales.