Orbiter
2022
Combinatorial Objects
partial_derivative.cpp
Go to the documentation of this file.
1
/*
2
* partial_derivative.cpp
3
*
4
* Created on: Mar 12, 2019
5
* Author: betten
6
*/
7
8
9
10
11
12
#include "
foundations.h
"
13
14
15
using namespace
std;
16
17
18
namespace
orbiter
{
19
namespace
layer1_foundations {
20
namespace
ring_theory {
21
22
23
partial_derivative::partial_derivative
()
24
{
25
H
= NULL;
26
Hd
= NULL;
27
v
= NULL;
28
variable_idx
= 0;
29
mapping
= NULL;
30
null
();
31
}
32
33
partial_derivative::~partial_derivative
()
34
{
35
freeself
();
36
}
37
38
void
partial_derivative::freeself
()
39
{
40
if
(
mapping
) {
41
FREE_int
(
mapping
);
42
}
43
if
(
v
) {
44
FREE_int
(
v
);
45
}
46
null
();
47
}
48
49
void
partial_derivative::null
()
50
{
51
}
52
53
void
partial_derivative::init
(
homogeneous_polynomial_domain
*H,
54
homogeneous_polynomial_domain
*Hd,
55
int
variable_idx,
56
int
verbose_level)
57
{
58
int
f_v = (verbose_level >= 1);
59
int
i, j, c;
60
61
if
(f_v) {
62
cout <<
"partial_derivative::init"
<< endl;
63
}
64
partial_derivative::H
=
H
;
65
partial_derivative::Hd
=
Hd
;
66
partial_derivative::variable_idx
=
variable_idx
;
67
v
=
NEW_int
(
H
->
get_nb_monomials
());
68
mapping
=
NEW_int
(
H
->
get_nb_monomials
() *
Hd
->
get_nb_monomials
());
69
Int_vec_zero
(
mapping
,
H
->
get_nb_monomials
() *
Hd
->
get_nb_monomials
());
70
if
(
Hd
->
degree
!=
H
->
degree
- 1) {
71
cout <<
"partial_derivative::init Hd->degree != H->degree - 1"
<< endl;
72
exit(1);
73
}
74
if
(
Hd
->
nb_variables
!=
H
->
nb_variables
) {
75
cout <<
"partial_derivative::init Hd->nb_variables != H->nb_variables"
<< endl;
76
exit(1);
77
}
78
if
(
Hd
->
q
!=
H
->
q
) {
79
cout <<
"partial_derivative::init Hd->q != H->q"
<< endl;
80
exit(1);
81
}
82
if
(
variable_idx
>=
H
->
nb_variables
) {
83
cout <<
"partial_derivative::init variable_idx >= H->nb_variables"
<< endl;
84
exit(1);
85
}
86
for
(i = 0; i <
H
->
get_nb_monomials
(); i++) {
87
for
(j = 0; j <
H
->
nb_variables
; j++) {
88
v
[j] =
H
->
get_monomial
(i, j);
89
}
90
//int_vec_copy(H->Monomials + i * H->nb_variables, H->v, H->nb_variables);
91
if
(
v
[
variable_idx
] == 0) {
92
continue
;
93
}
94
c =
H
->
get_F
()->
Z_embedding
(
v
[
variable_idx
]);
95
v
[
variable_idx
]--;
96
j =
Hd
->
index_of_monomial
(
v
);
97
mapping
[i *
Hd
->
get_nb_monomials
() + j] = c;
98
}
99
100
if
(f_v) {
101
cout <<
"partial_derivative::init done"
<< endl;
102
}
103
104
}
105
106
void
partial_derivative::apply
(
int
*eqn_in,
107
int
*eqn_out,
108
int
verbose_level)
109
{
110
int
f_v = (verbose_level >= 1);
111
112
if
(f_v) {
113
cout <<
"partial_derivative::apply"
<< endl;
114
}
115
116
H
->
get_F
()->
Linear_algebra
->
mult_vector_from_the_left
(eqn_in,
mapping
,
117
eqn_out,
H
->
get_nb_monomials
(),
Hd
->
get_nb_monomials
());
118
119
if
(f_v) {
120
cout <<
"partial_derivative::apply done"
<< endl;
121
}
122
}
123
124
125
}}}
126
orbiter::layer1_foundations::field_theory::finite_field::Z_embedding
int Z_embedding(int k)
Definition:
finite_field.cpp:951
orbiter::layer1_foundations::field_theory::finite_field::Linear_algebra
linear_algebra::linear_algebra * Linear_algebra
Definition:
finite_fields.h:498
orbiter::layer1_foundations::linear_algebra::linear_algebra::mult_vector_from_the_left
void mult_vector_from_the_left(int *v, int *A, int *vA, int m, int n)
Definition:
linear_algebra.cpp:160
orbiter::layer1_foundations::ring_theory::homogeneous_polynomial_domain
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
Definition:
ring_theory.h:88
orbiter::layer1_foundations::ring_theory::homogeneous_polynomial_domain::get_monomial
int get_monomial(int i, int j)
Definition:
homogeneous_polynomial_domain.cpp:227
orbiter::layer1_foundations::ring_theory::homogeneous_polynomial_domain::nb_variables
int nb_variables
Definition:
ring_theory.h:130
orbiter::layer1_foundations::ring_theory::homogeneous_polynomial_domain::get_nb_monomials
int get_nb_monomials()
Definition:
homogeneous_polynomial_domain.cpp:212
orbiter::layer1_foundations::ring_theory::homogeneous_polynomial_domain::index_of_monomial
int index_of_monomial(int *v)
Definition:
homogeneous_polynomial_domain.cpp:596
orbiter::layer1_foundations::ring_theory::homogeneous_polynomial_domain::get_F
field_theory::finite_field * get_F()
Definition:
homogeneous_polynomial_domain.cpp:222
orbiter::layer1_foundations::ring_theory::homogeneous_polynomial_domain::degree
int degree
Definition:
ring_theory.h:131
orbiter::layer1_foundations::ring_theory::homogeneous_polynomial_domain::q
int q
Definition:
ring_theory.h:129
orbiter::layer1_foundations::ring_theory::partial_derivative::variable_idx
int variable_idx
Definition:
ring_theory.h:438
orbiter::layer1_foundations::ring_theory::partial_derivative::freeself
void freeself()
Definition:
partial_derivative.cpp:38
orbiter::layer1_foundations::ring_theory::partial_derivative::H
homogeneous_polynomial_domain * H
Definition:
ring_theory.h:435
orbiter::layer1_foundations::ring_theory::partial_derivative::~partial_derivative
~partial_derivative()
Definition:
partial_derivative.cpp:33
orbiter::layer1_foundations::ring_theory::partial_derivative::mapping
int * mapping
Definition:
ring_theory.h:439
orbiter::layer1_foundations::ring_theory::partial_derivative::null
void null()
Definition:
partial_derivative.cpp:49
orbiter::layer1_foundations::ring_theory::partial_derivative::apply
void apply(int *eqn_in, int *eqn_out, int verbose_level)
Definition:
partial_derivative.cpp:106
orbiter::layer1_foundations::ring_theory::partial_derivative::v
int * v
Definition:
ring_theory.h:437
orbiter::layer1_foundations::ring_theory::partial_derivative::Hd
homogeneous_polynomial_domain * Hd
Definition:
ring_theory.h:436
orbiter::layer1_foundations::ring_theory::partial_derivative::init
void init(homogeneous_polynomial_domain *H, homogeneous_polynomial_domain *Hd, int variable_idx, int verbose_level)
Definition:
partial_derivative.cpp:53
orbiter::layer1_foundations::ring_theory::partial_derivative::partial_derivative
partial_derivative()
Definition:
partial_derivative.cpp:23
foundations.h
FREE_int
#define FREE_int(p)
Definition:
foundations.h:640
Int_vec_zero
#define Int_vec_zero(A, B)
Definition:
foundations.h:713
NEW_int
#define NEW_int(n)
Definition:
foundations.h:625
orbiter
the orbiter library for the classification of combinatorial objects
Definition:
classification.h:18
src
lib
foundations
ring_theory
partial_derivative.cpp
Generated by
1.9.3