mirror of
https://github.com/gonum/gonum.git
synced 2025-10-06 07:37:03 +08:00
Add Laplacian and CrossLaplacian difference functions (#154)
* Add Laplacian and CrossLaplacian difference functions * use usesOrigin
This commit is contained in:
44
diff/fd/laplacian_test.go
Normal file
44
diff/fd/laplacian_test.go
Normal file
@@ -0,0 +1,44 @@
|
||||
// Copyright ©2017 The gonum Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package fd
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"gonum.org/v1/gonum/floats"
|
||||
"gonum.org/v1/gonum/mat"
|
||||
)
|
||||
|
||||
func TestLaplacian(t *testing.T) {
|
||||
for cas, test := range hessianTestCases {
|
||||
// Modify the test cases where the forumla is set.
|
||||
settings := test.settings
|
||||
if settings != nil && !settings.Formula.isZero() {
|
||||
settings.Formula = Forward2nd
|
||||
}
|
||||
|
||||
n := len(test.x)
|
||||
got := Laplacian(test.h.Func, test.x, test.settings)
|
||||
hess := mat.NewSymDense(n, nil)
|
||||
test.h.Hess(hess, test.x)
|
||||
var want float64
|
||||
for i := 0; i < n; i++ {
|
||||
want += hess.At(i, i)
|
||||
}
|
||||
if !floats.EqualWithinAbsOrRel(got, want, test.tol, test.tol) {
|
||||
t.Errorf("Cas %d: Laplacian mismatch. got %v, want %v", cas, got, want)
|
||||
}
|
||||
|
||||
// Test that concurrency works.
|
||||
if settings == nil {
|
||||
settings = &Settings{}
|
||||
}
|
||||
settings.Concurrent = true
|
||||
got2 := Laplacian(test.h.Func, test.x, settings)
|
||||
if !floats.EqualWithinAbsOrRel(got, got2, 1e-5, 1e-5) {
|
||||
t.Errorf("Cas %d: Laplacian mismatch. got %v, want %v", cas, got2, got)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user