Macaulay2 Engine
Loading...
Searching...
No Matches

◆ norm()

gmp_RRorNull Matrix::norm ( gmp_RR p) const

Definition at line 2074 of file matrix.cpp.

2075{
2076 const Ring *R = get_ring();
2077 if (R->get_precision() == 0)
2078 {
2079 ERROR("expected ring over an RR or CC");
2080 return nullptr;
2081 }
2083 mpfr_init2(nm, mpfr_get_prec(p));
2084 mpfr_ui_div(nm, 1, p, MPFR_RNDN);
2085 if (!mpfr_zero_p(nm))
2086 {
2087 ERROR("Lp norm only implemented for p = infinity");
2088 mpfr_clear(nm);
2089 return nullptr;
2090 }
2091
2092 for (int i = 0; i < n_cols(); i++) R->vec_increase_maxnorm(nm, elem(i));
2093
2094 return moveTo_gmpRR(nm);
2095}
const Ring * get_ring() const
Definition matrix.hpp:134
ring_elem elem(int i, int j) const
Definition matrix.cpp:307
int n_cols() const
Definition matrix.hpp:147
virtual unsigned long get_precision() const
Definition ring.cpp:438
void vec_increase_maxnorm(gmp_RRmutable norm, const vec f) const
mpfr_srcptr moveTo_gmpRR(mpfr_ptr _z)
Definition gmp-util.h:153
int p
const int ERROR
Definition m2-mem.cpp:55
#define getmemstructtype(S)
Definition m2-mem.h:143
mpfr_ptr gmp_RRmutable
Definition m2-types.h:150

References elem(), ERROR, Ring::get_precision(), get_ring(), getmemstructtype, moveTo_gmpRR(), n_cols(), norm(), p, and Ring::vec_increase_maxnorm().

Referenced by norm(), and rawMatrixNorm().