Esempio n. 1
0
// Return the value for vector c which best fits the linear model y = Xc.
// X is a matrix given by its row vectors: each row corresponds to a y value;
// columns within the row correspond to coefficients for parameters in c.
func Linear(y vec.Vector, X []vec.Vector) vec.Vector {
	n := C.size_t(len(y))    // number of observations
	p := C.size_t(len(X[0])) // number of parameters
	c, gslY := C.gsl_vector_alloc(p), C.gsl_vector_alloc(n)
	cov, gslX := C.gsl_matrix_alloc(p, p), C.gsl_matrix_alloc(n, p)
	vecToGSL(y, gslY)
	matrixToGSL(X, gslX)
	chisq := C.double(0)
	work := C.gsl_multifit_linear_alloc(n, p)
	C.gsl_multifit_linear(gslX, gslY, c, cov, &chisq, work)
	C.gsl_multifit_linear_free(work)
	result := vecFromGSL(c)
	C.gsl_matrix_free(gslX)
	C.gsl_matrix_free(cov)
	C.gsl_vector_free(gslY)
	C.gsl_vector_free(c)
	return result
}
Esempio n. 2
0
File: fit.go Progetto: postfix/gsl-1
func GslMultifitLinearAlloc(n int, p int) *GslMultifitLinearWorkspace {
	_ref := C.gsl_multifit_linear_alloc(C.size_t(n), C.size_t(p))
	_result := &GslMultifitLinearWorkspace{}
	gogsl.InitializeGslReference(_result, uintptr(unsafe.Pointer(_ref)))
	return _result
}