2012-09-19 13 views

Respuesta

14

En resumen: Su función debe ser en forma de y=ax+0, lo que hace inútil polyfit. Sin embargo, se puede utilizar el método de mínimos cuadrados:

a = x(:)\y(:); 

Explicación:

Tienes n ecuaciones y una variable a que se necesita para ser encontrado:

a*x1 = y1; 
a*x2 = y2; 
... 
a*xn = yn; 

El operador \ encuentra la solución de mínimos cuadrados.

Alternativamente, se puede encontrar la solución manualmente:

a = (x'*x) \ (x'*y); 

o en el código Pseudo:

 (x1*y1 + x2*y2 + ... xn*yn) 
a = ---------------------------- 
    (x1*x1 + x2*x2 + ... xn*xn) 

Esto es útil si no está utilizando Matlab - por ejemplo, en el código C.


Ejemplo y fragmento de código:

enter image description here

function FindLSSolution() 
    a = 2.5; 
    x = rand(100,1)*10; 
    y = a*x + randn(100,1); 
    figure;scatter(x,y); 

    A = x(:)\y(:); 
    hold on;plot(x, A*x,'g'); 
end 
+0

'a = pinv (x) * y' ¿Esto también funcionaría? –

+1

@dr_rk, sí, pero no se recomienda porque es más lento y menos estable numéricamente –

2

si usted tiene la "Caja de herramientas de ajuste de curvas" que pueden utilizarse

f = fit(x, y, 'a*x'); 
Cuestiones relacionadas