# least_squares_fit( x, y, yerr ) # # returns vector, c( slope, y_intercept ), of best fit # # lengths of the three vectors must match # # Example: # > least_squares_linear( 1:10, 2.5*(1:10)+3.6, rep(0.1,10) ) # [1] 2.5 3.6 least_squares_linear <- function ( x, y, yerr ) { w <- 1 / (yerr^2) # weights w[i] alpha <- sum(w * x^2) beta <- sum(w * x) gamma <- sum(w * x * y) delta <- sum(w) epsilon <- sum(w*y) c( (beta*epsilon - delta*gamma), (beta*gamma- alpha*epsilon) ) / ( beta^2 - alpha * delta ) }