//MomentTensor returns the moment tensor for a matrix A of coordinates and a column //vector mass with the respective massess. func MomentTensor(A *v3.Matrix, massslice []float64) (*v3.Matrix, error) { ar, ac := A.Dims() var err error var mass *mat64.Dense if massslice == nil { mass = gnOnes(ar, 1) } else { mass = mat64.NewDense(ar, 1, massslice) // if err != nil { // return nil, err // } } center, _, err := MassCenter(A, v3.Dense2Matrix(gnCopy(A)), mass) if err != nil { return nil, errDecorate(err, "MomentTensor") } sqrmass := gnZeros(ar, 1) // sqrmass.Pow(mass,0.5) pow(mass, sqrmass, 0.5) //the result is stored in sqrmass // fmt.Println(center,sqrmass) //////////////////////// center.ScaleByCol(center, sqrmass) // fmt.Println(center,"scaled center") centerT := gnZeros(ac, ar) centerT.Copy(center.T()) moment := gnMul(centerT, center) return v3.Dense2Matrix(moment), nil }
//OnesMass returns a column matrix with lenght rosw. //This matrix can be used as a dummy mass matrix //for geometric calculations. func OnesMass(lenght int) *v3.Matrix { return v3.Dense2Matrix(gnOnes(lenght, 1)) }