context("test-g01-quadratic")
test_that("test elementwise power", {
x <- Variable(3)
y <- Variable(3)
expect_false(is_constant(x))
expect_true(is_affine(x))
expect_true(is_quadratic(x))
expect_warning(s <- power(t(x) %*% y, 0))
expect_true(is_constant(s))
expect_true(is_affine(s))
expect_true(is_quadratic(s))
t <- power(x-y, 1)
expect_false(is_constant(t))
expect_true(is_affine(t))
expect_true(is_quadratic(t))
u <- power(x+2*y, 2)
expect_false(is_constant(u))
expect_false(is_affine(u))
expect_true(is_quadratic(u))
expect_true(is_dcp(u))
w <- (x+2*y)^2
expect_false(is_constant(w))
expect_false(is_affine(w))
expect_true(is_quadratic(w))
expect_true(is_dcp(w))
})
test_that("test matrix multiplication", {
x <- Variable(3, 5)
y <- Variable(3, 5)
expect_false(is_constant(x))
expect_true(is_affine(x))
expect_true(is_quadratic(x))
expect_warning(s <- t(x) %*% y)
expect_false(is_constant(s))
expect_false(is_affine(s))
expect_true(is_quadratic(s))
expect_false(is_dcp(s))
})
test_that("test quad_over_lin function", {
x <- Variable(3, 5)
y <- Variable(3, 5)
z <- Variable()
s <- quad_over_lin(x-y, z)
expect_false(is_constant(s))
expect_false(is_affine(s))
expect_false(is_quadratic(s))
expect_true(is_dcp(s))
t <- quad_over_lin(x+2*y, 5)
expect_false(is_constant(t))
expect_false(is_affine(t))
expect_true(is_quadratic(t))
expect_true(is_dcp(t))
})
test_that("test matrix_frac function", {
x <- Variable(5)
M <- diag(5)
P <- t(M) %*% M
s <- matrix_frac(x, P)
expect_false(is_constant(s))
expect_false(is_affine(s))
expect_true(is_quadratic(s))
expect_true(is_dcp(s))
})
test_that("test quadratic form", {
x <- Variable(5)
P <- diag(5) - 2*matrix(1, nrow = 5, ncol = 5)
q <- matrix(1, nrow = 5, ncol = 1)
expect_warning(s <- t(x) %*% P %*% x + t(q) %*% x)
expect_false(is_constant(s))
expect_false(is_affine(s))
expect_true(is_quadratic(s))
expect_false(is_dcp(s))
})
test_that("test sum_squares function", {
X <- Variable(5, 4)
P <- matrix(1, nrow = 3, ncol = 5)
Q <- matrix(1, nrow = 4, ncol = 7)
M <- matrix(1, nrow = 3, ncol = 7)
y <- P %*% X %*% Q + M
expect_false(is_constant(y))
expect_true(is_affine(y))
expect_true(is_quadratic(y))
expect_true(is_dcp(y))
s <- sum_squares(y)
expect_false(is_constant(s))
expect_false(is_affine(s))
expect_true(is_quadratic(s))
expect_true(is_dcp(s))
# Frobenius norm squared is indeed quadratic
# but can't show quadraticity using recursive rules
t <- norm(y, "F")^2
expect_false(is_constant(t))
expect_false(is_affine(t))
expect_false(is_quadratic(t))
expect_true(is_dcp(t))
})
test_that("test indefinite quadratic", {
x <- Variable()
y <- Variable()
z <- Variable()
s <- y*z
expect_true(is_quadratic(s))
expect_false(is_dcp(s))
t <- (x+y)^2 - s - z*z
expect_true(is_quadratic(t))
expect_false(is_dcp(t))
})
test_that("test non-quadratic", {
x <- Variable()
y <- Variable()
z <- Variable()
s <- max_entries(vstack(x, y, z))^2
expect_false(is_quadratic(s))
s <- max_entries(vstack(x^2, power(y, 2), z))
expect_false(is_quadratic(s))
})
test_that("test affine product", {
x <- Variable(3, 5)
y <- Variable(5, 4)
expect_warning(s <- x %*% y)
expect_false(is_constant(s))
expect_false(is_affine(s))
expect_true(is_quadratic(s))
expect_false(is_dcp(s))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.