36 #define arcs_assert(a) (assert(a))
40#define dispsize(a) (ArcsMatrix::dispsize_macro((a),#a))
41#define dispf(a,b) (ArcsMatrix::dispf_macro((a),b,#a))
42#define disp(a) (ArcsMatrix::disp_macro((a),#a))
68 static constexpr bool value = std::is_integral<TT>::value | std::is_floating_point<TT>::value;
73 template<
typename TT>
struct IsComplexV : std::false_type {};
74 template<>
struct IsComplexV<std::complex<double>> : std::true_type {};
75 template<>
struct IsComplexV<std::complex<float>> : std::true_type {};
76 template<>
struct IsComplexV<std::complex<long>> : std::true_type {};
77 template<>
struct IsComplexV<std::complex<int>> : std::true_type {};
88template <
size_t M,
size_t N,
typename T =
double>
93 : Nindex(0), Mindex(0), Status(ArcsMatrix::MatStatus::AMT_NA), Data({0})
95 static_assert(N != 0,
"ArcsMat: Size Zero Error");
96 static_assert(M != 0,
"ArcsMat: Size Zero Error");
97 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
107 : Nindex(0), Mindex(0), Status(ArcsMatrix::MatStatus::AMT_NA), Data({0})
109 static_assert(N != 0,
"ArcsMat: Size Zero Error");
110 static_assert(M != 0,
"ArcsMat: Size Zero Error");
111 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
112 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
114 FillAll(
static_cast<T
>(InitValue));
121 constexpr ArcsMat(
const std::initializer_list<R> InitList)
122 : Nindex(0), Mindex(0), Status(ArcsMatrix::MatStatus::AMT_NA), Data({0})
124 static_assert(N != 0,
"ArcsMat: Size Zero Error");
125 static_assert(M != 0,
"ArcsMat: Size Zero Error");
126 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
127 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
129 const R* ListVal = InitList.begin();
132 for(
size_t i = 0; i < InitList.size(); ++i){
136 Data[Ni][Mi] =
static_cast<T
>(ListVal[i]);
150 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
157 template<
size_t P,
size_t Q,
typename R =
double>
159 : Nindex(0), Mindex(0), Status(right.
GetStatus()), Data()
161 static_assert(M == P,
"ArcsMat: Size Error");
162 static_assert(N == Q,
"ArcsMat: Size Error");
163 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
166 if constexpr(ArcsMatrix::IsIntFloat<R> && ArcsMatrix::IsIntFloat<T>){
168 Data =
static_cast<T
>(right.
GetData());
169 }
else if constexpr(ArcsMatrix::IsIntFloat<R> && ArcsMatrix::IsComplex<T>){
171 const std::array<std::array<R, M>, N>& RightData = right.
ReadOnlyRef();
172 for(
size_t i = 0; i < N; ++i){
173 for(
size_t j = 0; j < M; ++j) Data[i][j].
real(RightData[i][j]);
175 }
else if constexpr(ArcsMatrix::IsComplex<R> && ArcsMatrix::IsComplex<T>){
177 Data =
static_cast<T
>(right.
GetData());
195 template<
size_t P,
size_t Q,
typename R =
double>
199 static_assert(M == P,
"ArcsMat: Size Error");
200 static_assert(N == Q,
"ArcsMat: Size Error");
201 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
210 static_assert(N == 1,
"ArcsMat: Vector Error");
211 return Data[0][m - 1];
219 static_assert(N == 1,
"ArcsMat: Vector Error");
220 return Data[0][m - 1];
227 constexpr T
operator()(
const size_t m,
const size_t n)
const{
228 return Data[n - 1][m - 1];
236 return Data[n - 1][m - 1];
244 constexpr T
operator()(
const size_t m,
const size_t n,
const bool chk)
const{
249 return Data[n - 1][m - 1];
257 constexpr T&
operator()(
const size_t m,
const size_t n,
const bool chk){
262 return Data[n - 1][m - 1];
269 for(
size_t i = 1; i <= N; ++i){
270 for(
size_t j = 1; j <= M; ++j) (*
this)(j,i) = right(j,i);
280 template<
size_t P,
size_t Q,
typename R =
double>
282 static_assert(M == P,
"ArcsMat: Size Error");
283 static_assert(N == Q,
"ArcsMat: Size Error");
284 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
293 for(
size_t i = 1; i <= N; ++i){
294 for(
size_t j = 1; j <= M; ++j) ret(j,i) = (*this)(j,i);
304 for(
size_t i = 1; i <= N; ++i){
305 for(
size_t j = 1; j <= M; ++j) ret(j,i) = -(*this)(j,i);
315 template<
size_t P,
size_t Q,
typename R =
double>
317 static_assert(M == P,
"ArcsMat: Size Error");
318 static_assert(N == Q,
"ArcsMat: Size Error");
319 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
321 for(
size_t i = 1; i <= N; ++i){
322 for(
size_t j = 1; j <= M; ++j) ret(j,i) = (*this)(j,i) + static_cast<T>( right(j,i) );
334 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
336 for(
size_t i = 1; i <= N; ++i){
337 for(
size_t j = 1; j <= M; ++j) ret(j,i) = (*this)(j,i) + static_cast<T>(right);
347 template<
size_t P,
size_t Q,
typename R =
double>
349 static_assert(M == P,
"ArcsMat: Size Error");
350 static_assert(N == Q,
"ArcsMat: Size Error");
351 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
353 for(
size_t i = 1; i <= N; ++i){
354 for(
size_t j = 1; j <= M; ++j) ret(j,i) = (*this)(j,i) -
static_cast<T
>( right(j,i) );
366 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
368 for(
size_t i = 1; i <= N; ++i){
369 for(
size_t j = 1; j <= M; ++j) ret(j,i) = (*this)(j,i) -
static_cast<T
>(right);
379 template<
size_t P,
size_t Q,
typename R =
double>
381 static_assert(N == P,
"ArcsMat: Size Error");
382 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
384 for(
size_t k = 1; k <= Q; ++k){
385 for(
size_t i = 1; i <= N; ++i){
386 for(
size_t j = 1; j <= M; ++j) ret(j,k) += (*this)(j,i)*static_cast<T>( right(i,k) );
399 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
401 for(
size_t i = 1; i <= N; ++i){
402 for(
size_t j = 1; j <= M; ++j) ret(j,i) = (*this)(j,i)*static_cast<T>(right);
412 template<
size_t P,
size_t Q,
typename R =
double>
423 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
425 for(
size_t i = 1; i <= N; ++i){
426 for(
size_t j = 1; j <= M; ++j) ret(j,i) = (*this)(j,i)/
static_cast<T
>(right);
438 (*this) = (*this) + right;
448 (*this) = (*this) - right;
458 (*this) = (*this)*right;
468 (*this) = (*this)/right;
476 static_assert(M == N,
"ArcsMat: Size Error");
480 for(
size_t k = 1; k <= static_cast<size_t>(right); ++k) ret *= (*
this);
481 }
else if(right == -1){
495 template<
size_t P,
size_t Q,
typename R =
double>
497 static_assert(M == P,
"ArcsMat: Size Error");
498 static_assert(N == Q,
"ArcsMat: Size Error");
499 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
501 for(
size_t i = 1; i <= N; ++i){
502 for(
size_t j = 1; j <= M; ++j) ret(j,i) = (*this)(j,i)*static_cast<T>( right(j,i) );
512 template<
size_t P,
size_t Q,
typename R =
double>
514 static_assert(M == P,
"ArcsMat: Size Error");
515 static_assert(N == Q,
"ArcsMat: Size Error");
516 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
518 for(
size_t i = 1; i <= N; ++i){
519 for(
size_t j = 1; j <= M; ++j) ret(j,i) = (*this)(j,i)/
static_cast<T
>( right(j,i) );
536 return -right + left;
555 if(__builtin_constant_p(Data) ==
true)
return;
557 printf(
"Mem addr of matrix:\n");
558 for(
size_t j = 0; j < M; ++j){
560 for(
size_t i = 0; i < N; ++i){
561 printf(
"%p ", &(Data[i][j]));
571 constexpr void Disp(
const std::string& format)
const{
572 if(__builtin_constant_p(Data) ==
true)
return;
574 for(
size_t j = 0; j < M; ++j){
576 for(
size_t i = 0; i < N; ++i){
578 if constexpr(ArcsMatrix::IsComplex<T>){
581 printf(format.c_str(), Data[i][j].real());
583 if(0.0 <= Data[i][j].
imag()){
588 printf( format.c_str(), std::abs(Data[i][j].imag()) );
589 printf(
"%c", CMPLX_UNIT);
592 printf(format.c_str(), Data[i][j]);
602 constexpr void Disp(
void)
const{
608 if(__builtin_constant_p(Data) ==
true)
return;
610 printf(
"[ Height: %zu x Width: %zu ]\n\n", M, N);
630 for(
size_t i = 1; i <= N; ++i){
631 for(
size_t j = 1; j <= M; ++j){
632 if( std::abs(eps) < std::abs( (*
this)(j,i) )) ++ret;
642 template<
typename T1,
typename... T2>
643 constexpr void Set(
const T1& u1,
const T2&... u2){
644 static_assert(ArcsMatrix::IsApplicable<T1>,
"ArcsMat: Type Error");
647 Data[Nindex][Mindex] =
static_cast<T
>(u1);
655 constexpr void Set(){
665 template<
typename T1,
typename... T2>
666 constexpr void Get(T1& u1, T2&... u2){
667 static_assert(ArcsMatrix::IsApplicable<T1>,
"ArcsMat: Type Error");
670 u1 =
static_cast<T1
>(Data[Nindex][Mindex]);
678 constexpr void Get(){
689 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
690 for(
size_t i = 0; i < N; ++i){
691 for(
size_t j = 0; j < M; ++j){
693 if constexpr(ArcsMatrix::IsIntFloat<R> && ArcsMatrix::IsIntFloat<T>){
695 Data[i][j] =
static_cast<T
>(u);
696 }
else if constexpr(ArcsMatrix::IsIntFloat<R> && ArcsMatrix::IsComplex<T>){
700 }
else if constexpr(ArcsMatrix::IsComplex<R> && ArcsMatrix::IsComplex<T>){
702 Data[i][j] =
static_cast<T
>(u);
719 template<
size_t P,
typename R =
double>
720 constexpr void LoadArray(
const std::array<R, P>& Array){
721 static_assert(N == 1,
"ArcsMat: Vector Error");
722 static_assert(M == P,
"ArcsMat: Size Error");
723 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
724 for(
size_t j = 0; j < M; ++j) Data[0][j] = Array[j];
730 template<
size_t P,
typename R =
double>
732 static_assert(N == 1,
"ArcsMat: Vector Error");
733 static_assert(M == P,
"ArcsMat: Size Error");
734 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
735 for(
size_t j = 0; j < M; ++j) Array[j] = Data[0][j];
741 template<
size_t P,
size_t Q,
typename R =
double>
742 constexpr void LoadArray(
const std::array<std::array<R, P>, Q>& Array){
743 static_assert(M == P,
"ArcsMat: Size Error");
744 static_assert(N == Q,
"ArcsMat: Size Error");
745 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
752 template<
size_t P,
size_t Q,
typename R =
double>
753 constexpr void StoreArray(std::array<std::array<R, P>, Q>& Array)
const{
754 static_assert(M == P,
"ArcsMat: Size Error");
755 static_assert(N == Q,
"ArcsMat: Size Error");
756 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
768 constexpr std::array<std::array<T, M>, N>
GetData(
void)
const{
774 constexpr const std::array<std::array<T, M>, N>&
ReadOnlyRef(
void)
const{
783 template<
size_t P,
size_t Q,
typename R =
double>
785 static_assert(Q == 1,
"ArcsMat: Vector Error");
786 static_assert(P <= M,
"ArcsMat: Vector Size Error");
787 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
790 for(
size_t j = 1; j <= P; ++j) v(j,1) = (*this)(m + j - 1, n);
810 template<
size_t P,
size_t Q,
typename R =
double>
812 static_assert(P == 1,
"ArcsMat: Vector Error");
813 static_assert(Q <= N,
"ArcsMat: Vector Size Error");
814 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
817 for(
size_t i = 1; i <= Q; ++i) w(1,i) = (*this)(m, n + i - 1);
837 template<
size_t P,
size_t Q,
typename R =
double>
839 static_assert(Q == 1,
"ArcsMat: Vector Error");
840 static_assert(P <= M,
"ArcsMat: Vector Size Error");
841 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
844 for(
size_t j = 1; j <= P; ++j) (*
this)(m + j - 1, n) = v(j,1);
852 template<
size_t P,
size_t Q,
typename R =
double>
854 static_assert(P == 1,
"ArcsMat: Vector Error");
855 static_assert(Q <= N,
"ArcsMat: Vector Size Error");
856 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
859 for(
size_t i = 1; i <= Q; ++i) (*
this)(m, n + i - 1) = w(1,i);
866 for(
size_t i = 1; i <= N; ++i){
867 for(
size_t j = 1; j <= M; ++j){
868 if(std::abs( (*
this)(j,i) ) < std::real(eps)) (*this)(j,i) = 0;
877 for(
size_t i = 1; i <= N; ++i){
878 for(
size_t j = i + 1; j <= M; ++j){
879 if constexpr(ArcsMatrix::IsComplex<T>){
882 if(std::abs( (*
this)(j,i) ) < std::real(eps)) (*
this)(j,i) = 0;
884 if(std::abs( (*
this)(j,i) ) < eps) (*
this)(j,i) = 0;
911 static_assert(M == N,
"ArcsMat: Size Error");
913 if constexpr(ArcsMatrix::IsComplex<T>){
915 for(
size_t i = 1; i <= N; ++i) ret(i,i) = std::complex(1.0, 0.0);
918 for(
size_t i = 1; i <= N; ++i) ret(i,i) = static_cast<T>(1);
926 static_assert(N == 1,
"ArcsMat: Vector Error");
928 for(
size_t j = 1; j <= M; ++j) ret[j] = j;
937 template<
size_t P,
size_t Q,
typename R =
double>
939 static_assert(M == P,
"ArcsMat: Size Error");
956 template<
size_t P,
size_t Q,
typename R =
double>
958 static_assert(M == P,
"ArcsMat: Size Error");
968 template<
size_t P,
size_t Q,
typename R =
double>
1005 template<
typename R =
double>
1007 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1012 for(
size_t j = m1; j <= m2; ++j) UY(j, n) = (T)a;
1023 template<
typename R =
double>
1035 template<
size_t P,
size_t Q,
typename R =
size_t>
1037 static_assert(P == 1,
"ArcsMat: Vector Error");
1038 static_assert(N == Q,
"ArcsMat: Size Error");
1039 static_assert(std::is_integral_v<R>,
"ArcsMat: Input u should be integer type.");
1041 for(
size_t i = 1; i <= N; ++i){
1051 template<
size_t P,
size_t Q,
typename R =
size_t>
1053 static_assert(P == 1,
"ArcsMat: Vector Error");
1054 static_assert(N == Q,
"ArcsMat: Size Error");
1055 static_assert(std::is_integral_v<R>,
"ArcsMat: Input u should be integer type.");
1056 for(
size_t i = 1; i <= N; ++i){
1066 template<
size_t P,
size_t Q,
typename R =
double>
1068 static_assert(P == 1,
"ArcsMat: Vector Error");
1069 static_assert(N == Q,
"ArcsMat: Size Error");
1070 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1072 for(
size_t i = 1; i <= N; ++i){
1073 for(
size_t j = 1; j <= M; ++j) y(1,i) += static_cast<R>( U(j,i) );
1091 template<
size_t P,
size_t Q,
typename R =
double>
1093 static_assert(N == Q,
"ArcsMat: Size Error");
1110 template<
size_t P,
size_t Q,
typename R =
double>
1112 static_assert(N == Q,
"ArcsMat: Size Error");
1122 template<
size_t P,
size_t Q,
typename R =
double>
1159 template<
typename R =
double>
1161 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1166 for(
size_t i = n1; i <= n2; ++i) UY(m, i) = static_cast<T>(a);
1177 template<
typename R =
double>
1189 template<
size_t P,
size_t Q,
typename R =
size_t>
1191 static_assert(Q == 1,
"ArcsMat: Vector Error");
1192 static_assert(M == P,
"ArcsMat: Size Error");
1193 static_assert(std::is_integral_v<R>,
"ArcsMat: Input u should be integer type.");
1195 for(
size_t j = 1; j <= M; ++j){
1196 setrow(Y,
getrow(U,
static_cast<size_t>( u(j,1) )), j);
1205 template<
size_t P,
size_t Q,
typename R =
size_t>
1207 static_assert(Q == 1,
"ArcsMat: Vector Error");
1208 static_assert(M == P,
"ArcsMat: Size Error");
1209 static_assert(std::is_integral_v<R>,
"ArcsMat: Input u should be integer type.");
1210 for(
size_t j = 1; j <= M; ++j){
1220 template<
size_t P,
size_t Q,
typename R =
double>
1222 static_assert(Q == 1,
"ArcsMat: Vector Error");
1223 static_assert(M == P,
"ArcsMat: Size Error");
1224 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1226 for(
size_t j = 1; j <= M; ++j){
1227 for(
size_t i = 1; i <= N; ++i) y(j,1) += static_cast<R>( U(j,i) );
1246 template<
size_t P,
size_t Q,
typename R =
double>
1257 template<
size_t P = M>
1268 template<
size_t P,
size_t Q,
typename R =
double>
1280 template<
size_t P,
size_t Q,
typename R =
double>
1293 template<
size_t P,
size_t Q,
typename R =
double>
1315 template<
size_t P,
size_t Q,
typename R =
double>
1327 template<
size_t P,
size_t Q,
typename R =
double>
1340 template<
size_t P,
size_t Q,
typename R =
double>
1342 static_assert(P <= M,
"ArcsMat: Size Error");
1343 static_assert(Q <= N,
"ArcsMat: Size Error");
1344 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1347 for(
size_t i = 1; i <= Q; ++i) ArcsMat<P,Q,R>::setcolumn(Y,
getvvector<P>(U, m, n + i - 1), i);
1356 template<
size_t P,
size_t Q>
1369 template<
size_t P,
size_t Q,
typename R =
double>
1371 static_assert(P <= M,
"ArcsMat: Size Error");
1372 static_assert(Q <= N,
"ArcsMat: Size Error");
1373 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1386 template<
size_t P,
size_t Q,
typename R =
double>
1404 template<
size_t P,
size_t Q,
typename R =
double>
1406 const ArcsMat<M,N,T>& U,
const size_t m1,
const size_t m2,
const size_t n1,
const size_t n2,
1409 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
1410 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1418 for(
size_t i = 0; i <= (n2 - n1); ++i){
1419 for(
size_t j = 0; j <= (m2 - m1); ++j){
1420 Y(my + j, ny + i) = U(m1 + j, n1 + i);
1430 template<
size_t P,
size_t Q,
typename R =
double>
1432 static_assert(M == P,
"ArcsMat: Size Error");
1433 static_assert(N == Q,
"ArcsMat: Size Error");
1434 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1437 for(
size_t j = 1; j <= P - m; ++j){
1442 for(
size_t i = 1; i <= Q; ++i){
1443 for(
size_t j = P - m + 1; j <= P; ++j){
1464 template<
size_t P,
size_t Q,
typename R =
double>
1466 static_assert(M == P,
"ArcsMat: Size Error");
1467 static_assert(N == Q,
"ArcsMat: Size Error");
1468 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1471 for(
size_t j = m + 1; j <= P; ++j){
1476 for(
size_t i = 1; i <= Q; ++i){
1477 for(
size_t j = 1; j <= m; ++j){
1498 template<
size_t P,
size_t Q,
typename R =
double>
1500 static_assert(M == P,
"ArcsMat: Size Error");
1501 static_assert(N == Q,
"ArcsMat: Size Error");
1502 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1505 for(
size_t i = 1; i <= Q - n; ++i){
1510 for(
size_t i = Q - n + 1; i <= Q; ++i){
1511 for(
size_t j = 1; j <= P; ++j){
1532 template<
size_t P,
size_t Q,
typename R =
double>
1534 static_assert(M == P,
"ArcsMat: Size Error");
1535 static_assert(N == Q,
"ArcsMat: Size Error");
1536 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1539 for(
size_t i = n + 1; i <= Q; ++i){
1544 for(
size_t i = 1; i <= n; ++i){
1545 for(
size_t j = 1; j <= P; ++j){
1566 template<
size_t P,
size_t Q,
typename R =
double,
size_t D,
size_t E,
typename F =
double>
1568 static_assert(N == Q,
"ArcsMat: Size Error");
1569 static_assert(M + P == D,
"ArcsMat: Output Size Error");
1570 static_assert(N == E,
"ArcsMat: Output Size Error");
1571 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1572 static_assert(ArcsMatrix::IsApplicable<F>,
"ArcsMat: Type Error");
1582 template<
size_t P,
size_t Q,
typename R =
double>
1594 template<
size_t P,
size_t Q,
typename R =
double,
size_t D,
size_t E,
typename F =
double>
1596 static_assert(M == P,
"ArcsMat: Size Error");
1597 static_assert(N + Q == E,
"ArcsMat: Output Size Error");
1598 static_assert(M == D,
"ArcsMat: Output Size Error");
1599 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1600 static_assert(ArcsMatrix::IsApplicable<F>,
"ArcsMat: Type Error");
1610 template<
size_t P,
size_t Q,
typename R =
double>
1624 template<
size_t P,
size_t Q,
typename R =
double,
size_t D,
size_t E,
typename F =
double,
size_t G,
size_t H,
typename L =
double,
size_t V,
size_t W,
typename X =
double>
1625 static constexpr void concat4(
const ArcsMat<M,N,T>& U11,
const ArcsMat<P,Q,R>& U12,
const ArcsMat<D,E,F>& U21,
const ArcsMat<G,H,L>& U22,
ArcsMat<V,W,X>& Y){
1626 static_assert(M + D == P + G,
"ArcsMat: Size Error");
1627 static_assert(N + Q == E + H,
"ArcsMat: Size Error");
1628 static_assert(M + D == V,
"ArcsMat: Output Size Error");
1629 static_assert(E + H == W,
"ArcsMat: Output Size Error");
1630 static_assert(P + G == V,
"ArcsMat: Output Size Error");
1631 static_assert(N + Q == W,
"ArcsMat: Output Size Error");
1632 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1633 static_assert(ArcsMatrix::IsApplicable<F>,
"ArcsMat: Type Error");
1634 static_assert(ArcsMatrix::IsApplicable<L>,
"ArcsMat: Type Error");
1635 static_assert(ArcsMatrix::IsApplicable<X>,
"ArcsMat: Type Error");
1636 if constexpr(N == E){
1638 static_assert(Q == H,
"ArcsMat: Size Error");
1644 static_assert(M == P,
"ArcsMat: Size Error");
1645 static_assert(D == G,
"ArcsMat: Size Error");
1659 template<
size_t P,
size_t Q,
typename R =
double,
size_t D,
size_t E,
typename F =
double,
size_t G,
size_t H,
typename L =
double>
1660 static constexpr ArcsMat<M+D,N+Q,T> concat4(
const ArcsMat<M,N,T>& U11,
const ArcsMat<P,Q,R>& U12,
const ArcsMat<D,E,F>& U21,
const ArcsMat<G,H,L>& U22){
1662 concat4(U11, U12, U21, U22, Y);
1671 template<
size_t P,
size_t Q,
typename R =
double>
1673 static_assert(N == 1,
"ArcsMat: Vector Error");
1674 static_assert(M == P,
"ArcsMat: Size Error");
1675 static_assert(P == Q,
"ArcsMat: Size Error");
1676 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1677 for(
size_t j = 1; j <= M; ++j) Y(j,j) = static_cast<R>( u(j,1) );
1694 template<
size_t P,
size_t Q,
typename R =
double,
size_t L = std::min(M,N)>
1696 static_assert(Q == 1,
"ArcsMat: Vector Error");
1697 static_assert(P == L,
"ArcsMat: Size Error");
1698 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
1701 size_t m = 1, j = 0, i = 0;
1705 i =
static_cast<size_t>( 1 + k );
1708 j =
static_cast<size_t>( 1 - k );
1715 while((j <= M) && (i <= N)){
1716 y(m,1) =
static_cast<R
>( U(j,i) );
1728 template<
size_t L = std::min(M,N)>
1747 template<
size_t L = std::min(M,N)>
1750 for(
size_t j = 1; j <= L; ++j) y *= U(j,j);
1758 size_t k = 1, l = 1;
1759 for(
size_t i = 1; i <= N; ++i){
1760 for(
size_t j = 1; j <= M; ++j){
1761 if constexpr(ArcsMatrix::IsComplex<T>){
1763 if( std::abs(U(k,l)) < std::abs(U(j,i)) ){
1769 if( U(k,l) < U(j,i) ){
1783 const auto ji =
maxidx(U);
1784 return U(std::get<0>(ji), std::get<1>(ji));
1791 size_t k = 1, l = 1;
1792 for(
size_t i = 1; i <= N; ++i){
1793 for(
size_t j = 1; j <= M; ++j){
1794 if constexpr(ArcsMatrix::IsComplex<T>){
1796 if( std::abs(U(k,l)) > std::abs(U(j,i)) ){
1802 if( U(k,l) > U(j,i) ){
1816 const auto ji =
minidx(U);
1817 return U(std::get<0>(ji), std::get<1>(ji));
1832 template<
size_t P,
size_t Q,
typename R =
double>
1834 static_assert(M == P,
"ArcsMat: Size Error");
1835 static_assert(N == Q,
"ArcsMat: Size Error");
1836 static_assert(std::is_floating_point_v<T>,
"ArcsMat: Type Error (Floating Point)");
1837 static_assert(std::is_floating_point_v<R>,
"ArcsMat: Type Error (Floating Point)");
1838 for(
size_t i = 1; i <= N; ++i){
1839 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::exp( U(j,i) ) );
1856 template<
size_t P,
size_t Q,
typename R =
double>
1858 static_assert(M == P,
"ArcsMat: Size Error");
1859 static_assert(N == Q,
"ArcsMat: Size Error");
1860 static_assert(std::is_floating_point_v<T>,
"ArcsMat: Type Error (Floating Point)");
1861 static_assert(std::is_floating_point_v<R>,
"ArcsMat: Type Error (Floating Point)");
1862 for(
size_t i = 1; i <= N; ++i){
1863 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::log( U(j,i) ) );
1880 template<
size_t P,
size_t Q,
typename R =
double>
1882 static_assert(M == P,
"ArcsMat: Size Error");
1883 static_assert(N == Q,
"ArcsMat: Size Error");
1884 static_assert(std::is_floating_point_v<T>,
"ArcsMat: Type Error (Floating Point)");
1885 static_assert(std::is_floating_point_v<R>,
"ArcsMat: Type Error (Floating Point)");
1886 for(
size_t i = 1; i <= N; ++i){
1887 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::log10( U(j,i) ) );
1904 template<
size_t P,
size_t Q,
typename R =
double>
1906 static_assert(M == P,
"ArcsMat: Size Error");
1907 static_assert(N == Q,
"ArcsMat: Size Error");
1908 static_assert(std::is_floating_point_v<T>,
"ArcsMat: Type Error (Floating Point)");
1909 static_assert(std::is_floating_point_v<R>,
"ArcsMat: Type Error (Floating Point)");
1910 for(
size_t i = 1; i <= N; ++i){
1911 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::sin( U(j,i) ) );
1928 template<
size_t P,
size_t Q,
typename R =
double>
1930 static_assert(M == P,
"ArcsMat: Size Error");
1931 static_assert(N == Q,
"ArcsMat: Size Error");
1932 static_assert(std::is_floating_point_v<T>,
"ArcsMat: Type Error (Floating Point)");
1933 static_assert(std::is_floating_point_v<R>,
"ArcsMat: Type Error (Floating Point)");
1934 for(
size_t i = 1; i <= N; ++i){
1935 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::cos( U(j,i) ) );
1952 template<
size_t P,
size_t Q,
typename R =
double>
1954 static_assert(M == P,
"ArcsMat: Size Error");
1955 static_assert(N == Q,
"ArcsMat: Size Error");
1956 static_assert(std::is_floating_point_v<T>,
"ArcsMat: Type Error (Floating Point)");
1957 static_assert(std::is_floating_point_v<R>,
"ArcsMat: Type Error (Floating Point)");
1958 for(
size_t i = 1; i <= N; ++i){
1959 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::tan( U(j,i) ) );
1976 template<
size_t P,
size_t Q,
typename R =
double>
1978 static_assert(M == P,
"ArcsMat: Size Error");
1979 static_assert(N == Q,
"ArcsMat: Size Error");
1980 static_assert(std::is_floating_point_v<T>,
"ArcsMat: Type Error (Floating Point)");
1981 static_assert(std::is_floating_point_v<R>,
"ArcsMat: Type Error (Floating Point)");
1982 for(
size_t i = 1; i <= N; ++i){
1983 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::tanh( U(j,i) ) );
2000 template<
size_t P,
size_t Q,
typename R =
double>
2002 static_assert(M == P,
"ArcsMat: Size Error");
2003 static_assert(N == Q,
"ArcsMat: Size Error");
2004 for(
size_t i = 1; i <= N; ++i){
2005 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::sqrt( U(j,i) ) );
2022 template<
size_t P,
size_t Q,
typename R =
double>
2024 static_assert(M == P,
"ArcsMat: Size Error");
2025 static_assert(N == Q,
"ArcsMat: Size Error");
2026 for(
size_t i = 1; i <= N; ++i){
2044 template<
size_t P,
size_t Q,
typename R =
double>
2046 static_assert(M == P,
"ArcsMat: Size Error");
2047 static_assert(N == Q,
"ArcsMat: Size Error");
2048 for(
size_t i = 1; i <= N; ++i){
2049 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::abs( U(j,i) ) );
2057 template<
typename R =
double>
2068 template<
size_t P,
size_t Q,
typename R =
double>
2070 static_assert(M == P,
"ArcsMat: Size Error");
2071 static_assert(N == Q,
"ArcsMat: Size Error");
2072 static_assert(ArcsMatrix::IsComplex<T>,
"ArcsMat: Type Error (Need Complex)");
2073 static_assert(ArcsMatrix::IsIntFloat<R>,
"ArcsMat: Type Error (Need Integer or Float)");
2074 for(
size_t i = 1; i <= N; ++i){
2075 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::arg( U(j,i) ) );
2083 template<
size_t P,
size_t Q,
typename R =
double>
2085 static_assert(M == P,
"ArcsMat: Size Error");
2086 static_assert(N == Q,
"ArcsMat: Size Error");
2087 static_assert(ArcsMatrix::IsComplex<T>,
"ArcsMat: Type Error (Need Complex)");
2088 static_assert(ArcsMatrix::IsIntFloat<R>,
"ArcsMat: Type Error (Need Integer or Float)");
2089 for(
size_t i = 1; i <= N; ++i){
2090 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::real( U(j,i) ) );
2098 template<
size_t P,
size_t Q,
typename R =
double>
2100 static_assert(M == P,
"ArcsMat: Size Error");
2101 static_assert(N == Q,
"ArcsMat: Size Error");
2102 static_assert(ArcsMatrix::IsComplex<T>,
"ArcsMat: Type Error (Need Complex)");
2103 static_assert(ArcsMatrix::IsIntFloat<R>,
"ArcsMat: Type Error (Need Integer or Float)");
2104 for(
size_t i = 1; i <= N; ++i){
2105 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::imag( U(j,i) ) );
2113 template<
size_t P,
size_t Q,
typename R = std::complex<
double>>
2115 static_assert(M == P,
"ArcsMat: Size Error");
2116 static_assert(N == Q,
"ArcsMat: Size Error");
2117 static_assert(ArcsMatrix::IsComplex<T>,
"ArcsMat: Type Error (Need Complex)");
2118 static_assert(ArcsMatrix::IsComplex<R>,
"ArcsMat: Type Error (Need Complex)");
2119 for(
size_t i = 1; i <= N; ++i){
2120 for(
size_t j = 1; j <= M; ++j) Y(j,i) = static_cast<R>( std::conj( U(j,i) ) );
2137 template<
size_t P,
size_t Q,
typename R =
double>
2139 static_assert(M == Q,
"ArcsMat: Transpose Size Error");
2140 static_assert(N == P,
"ArcsMat: Transpose Size Error");
2141 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
2142 for(
size_t i = 1; i <= N; ++i){
2143 for(
size_t j = 1; j <= M; ++j) Y(i,j) = static_cast<R>( U(j,i) );
2160 template<
size_t P,
size_t Q,
typename R = std::complex<
double>>
2162 static_assert(ArcsMatrix::IsComplex<T>,
"ArcsMat: Type Error (Need Complex)");
2163 static_assert(ArcsMatrix::IsComplex<R>,
"ArcsMat: Type Error (Need Complex)");
2180 if constexpr(ArcsMatrix::IsComplex<T>){
2194 template<ArcsMatrix::NormType NRM = ArcsMatrix::NormType::AMT_L2,
typename R =
double>
2197 if constexpr(NRM == ArcsMatrix::NormType::AMT_L2){
2199 if constexpr(M == 1 || N == 1){
2208 }
else if constexpr(NRM == ArcsMatrix::NormType::AMT_L1){
2210 if constexpr(M == 1 || N == 1){
2217 }
else if constexpr(NRM == ArcsMatrix::NormType::AMT_LINF){
2219 if constexpr(M == 1 || N == 1){
2237 template<
size_t P,
size_t Q,
typename R =
double>
2239 static_assert(M == P,
"ArcsMat: Size Error");
2240 static_assert(N == Q,
"ArcsMat: Size Error");
2241 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
2243 for(
size_t j = 1; j <= M; ++j){
2244 for(
size_t i = j + n - 1; i <= N; ++i){
2245 Y(j,i) =
static_cast<R
>( U(j,i) );
2265 template<
size_t P,
size_t Q,
typename R =
double>
2267 static_assert(M == P,
"ArcsMat: Size Error");
2268 static_assert(N == Q,
"ArcsMat: Size Error");
2269 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
2271 for(
size_t i = 1; i <= N; ++i){
2272 for(
size_t j = i + m - 1; j <= M; ++j){
2273 Y(j,i) =
static_cast<R
>( U(j,i) );
2294 template<
size_t ML,
size_t NL,
typename TL =
double,
size_t MU,
size_t NU,
typename TU =
double,
size_t MP,
size_t NP,
typename TP =
double>
2295 static constexpr void LUP(
const ArcsMat<M,N,T>& A,
ArcsMat<ML,NL,TL>& L,
ArcsMat<MU,NU,TU>& U,
ArcsMat<MP,NP,TP>& P){
2296 static_assert(M == N,
"ArcsMat: Size Error");
2297 static_assert(ML == NL,
"ArcsMat: Size Error");
2298 static_assert(MU == NU,
"ArcsMat: Size Error");
2299 static_assert(MP == NP,
"ArcsMat: Size Error");
2300 static_assert(M == ML,
"ArcsMat: Size Error");
2301 static_assert(N == NL,
"ArcsMat: Size Error");
2302 static_assert(M == MU,
"ArcsMat: Size Error");
2303 static_assert(N == NU,
"ArcsMat: Size Error");
2304 static_assert(M == MP,
"ArcsMat: Size Error");
2305 static_assert(N == NP,
"ArcsMat: Size Error");
2306 static_assert(ArcsMatrix::IsApplicable<TL>,
"ArcsMat: Type Error");
2307 static_assert(ArcsMatrix::IsApplicable<TU>,
"ArcsMat: Type Error");
2308 static_assert(ArcsMatrix::IsApplicable<TP>,
"ArcsMat: Type Error");
2312 size_t perm_count = 0;
2313 double max_buff = 0;
2318 for(
size_t i = 1; i <= N; ++i){
2321 max_buff =
static_cast<double>( std::abs(X(i,i)) );
2322 for(
size_t j = i + 1; j <= M; ++j){
2323 if(max_buff <
static_cast<double>( std::abs(X(j,i)) )){
2325 max_buff =
static_cast<double>( std::abs(X(j,i)) );
2337 if( std::abs( X(i,i) ) <
EPSILON ){
2340 for(
size_t j = i + 1; j <= M; ++j){
2342 for(
size_t l = i + 1; l <= N; ++l){
2343 X(j,l) -= X(j,i)*X(i,l);
2352 for(
size_t j = 1; j <= M; ++j) L(j,j) = 1;
2355 if(perm_count % 2 == 0){
2356 P.Status = ArcsMatrix::MatStatus::AMT_LU_EVEN;
2358 P.Status = ArcsMatrix::MatStatus::AMT_LU_ODD;
2365 static constexpr std::tuple<ArcsMat<M,N,T>,
ArcsMat<M,N,T>,
ArcsMat<M,N,T>>
LUP(
const ArcsMat<M,N,T>& A){
2376 template<
size_t ML,
size_t NL,
typename TL =
double,
size_t MU,
size_t NU,
typename TU =
double>
2396 static_assert(M == N,
"ArcsMat: Size Error");
2400 const auto [L, U, P] =
LUP(A);
2401 if(P.Status == ArcsMatrix::MatStatus::AMT_LU_ODD){
2403 }
else if(P.Status == ArcsMatrix::MatStatus::AMT_LU_EVEN){
2415 template<
size_t MH,
size_t NH,
typename TH =
double>
2417 static_assert(N == 1,
"ArcsMat: Vector Error");
2418 static_assert(M == MH,
"ArcsMat: Size Error");
2419 static_assert(MH == NH,
"ArcsMat: Size Error");
2420 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2421 static_assert(ArcsMatrix::IsApplicable<TH>,
"ArcsMat: Type Error");
2426 if( std::abs(vHv[1]) != 0 ){
2427 H = I - 2.0*v*~v/vHv[1];
2433 for(
size_t i = 1; i <= k; ++i) H(i,i) = 1;
2452 template<
size_t MQ,
size_t NQ,
typename TQ =
double,
size_t MR,
size_t NR,
typename TR =
double>
2454 static_assert(MQ == NQ,
"ArcsMat: Size Error");
2455 static_assert(M == MQ,
"ArcsMat: Size Error");
2456 static_assert(M == MR,
"ArcsMat: Size Error");
2457 static_assert(N == NR,
"ArcsMat: Size Error");
2458 static_assert(ArcsMatrix::IsApplicable<TQ>,
"ArcsMat: Type Error");
2459 static_assert(ArcsMatrix::IsApplicable<TR>,
"ArcsMat: Type Error");
2462 constexpr size_t K = std::min(M,N);
2470 for(
size_t k = 1; k <= K; ++k){
2475 if constexpr(ArcsMatrix::IsComplex<T>){
2477 v = a + std::exp( std::complex( 0.0, std::arg(a[1])) )*std::sqrt( (~a*a)[1] )*e;
2522 size_t LoopMax = 100*std::max(M,N),
2523 size_t MU,
size_t NU,
typename TU = double,
size_t MS,
size_t NS,
typename TS = double,
2524 size_t MV,
size_t NV,
typename TV =
double
2526 static constexpr void SVD(
const ArcsMat<M,N,T>& A,
ArcsMat<MU,NU,TU>& U,
ArcsMat<MS,NS,TS>& S,
ArcsMat<MV,NV,TV>& V){
2527 static_assert(MU == NU,
"ArcsMat: Size Error");
2528 static_assert(MV == NV,
"ArcsMat: Size Error");
2529 static_assert(M == MU,
"ArcsMat: Size Error");
2530 static_assert(M == MS,
"ArcsMat: Size Error");
2531 static_assert(N == NS,
"ArcsMat: Size Error");
2532 static_assert(N == NV,
"ArcsMat: Size Error");
2533 static_assert(ArcsMatrix::IsApplicable<TU>,
"ArcsMat: Type Error");
2534 static_assert(ArcsMatrix::IsApplicable<TS>,
"ArcsMat: Type Error");
2535 static_assert(ArcsMatrix::IsApplicable<TV>,
"ArcsMat: Type Error");
2547 for(
size_t i = 0; i < LoopMax; ++i){
2549 if constexpr( N <= M ){
2564 if(std::abs(E - F) <
EPSILON)
break;
2569 for(
size_t k = 1; k <= std::min(M,N); ++k){
2570 if( std::real(sgn( S(k,k) )) < 0){
2577 if constexpr((M == N) && ArcsMatrix::IsComplex<T>){
2580 for(
size_t i = 1; i <= NV; ++i){
2590 static constexpr std::tuple<ArcsMat<M,M,T>,
ArcsMat<M,N,T>,
ArcsMat<N,N,T>>
SVD(
const ArcsMat<M,N,T>& A){
2603 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2606 return s.GetNumOfNonZero(eps);
2614 template<
size_t ML,
size_t NL,
typename TL =
double,
size_t MD,
size_t ND,
typename TD =
double>
2616 static_assert(M == N,
"ArcsMat: Size Error");
2617 static_assert(ML == M,
"ArcsMat: Size Error");
2618 static_assert(NL == N,
"ArcsMat: Size Error");
2619 static_assert(MD == M,
"ArcsMat: Size Error");
2620 static_assert(ND == N,
"ArcsMat: Size Error");
2621 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2622 static_assert(ArcsMatrix::IsApplicable<TL>,
"ArcsMat: Type Error");
2623 static_assert(ArcsMatrix::IsApplicable<TD>,
"ArcsMat: Type Error");
2625 D(1,1) =
static_cast<T
>(1)/L(1,1);
2627 for(
size_t i = 2; i <= N; ++i){
2628 for(
size_t j = 1; j <= i; ++j){
2630 for(
size_t k = 1; k < j; ++k){
2631 lld -= L(i,k)*L(j,k)*D(k,k);
2635 D(i,i) =
static_cast<T
>(1)/L(i,i);
2658 template<
size_t ML,
size_t NL,
typename TL =
double>
2660 static_assert(M == N,
"ArcsMat: Size Error");
2661 static_assert(ML == M,
"ArcsMat: Size Error");
2662 static_assert(NL == N,
"ArcsMat: Size Error");
2663 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2664 static_assert(ArcsMatrix::IsApplicable<TL>,
"ArcsMat: Type Error");
2685 template<
size_t MB,
size_t NB,
typename TB =
double,
size_t MX,
size_t NX,
typename TX =
double>
2687 static_assert(M == N,
"ArcsMat: Size Error");
2688 static_assert(MB == M,
"ArcsMat: Size Error");
2689 static_assert(MX == N,
"ArcsMat: Size Error");
2690 static_assert(NB == 1,
"ArcsMat: Vector Error");
2691 static_assert(NX == 1,
"ArcsMat: Vector Error");
2692 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2693 static_assert(ArcsMatrix::IsApplicable<TB>,
"ArcsMat: Type Error");
2694 static_assert(ArcsMatrix::IsApplicable<TX>,
"ArcsMat: Type Error");
2708 for(
size_t i = 2; i <= M; ++i){
2709 for(
size_t j = 1; j < i; ++j) buff += L(i,j)*d[j];
2716 for(ssize_t i = M - 1; 0 < i; --i){
2717 for(
size_t j =
static_cast<size_t>(i) + 1; j <= N; ++j){
2718 buff += U(i,j)*x[j];
2720 x[i] = (d[i] - buff)/U(i,i);
2730 template<
size_t MB,
size_t NB,
typename TB =
double,
size_t MX,
size_t NX,
typename TX =
double>
2732 static_assert(M == N,
"ArcsMat: Size Error");
2733 static_assert(MB == M,
"ArcsMat: Size Error");
2734 static_assert(MX == N,
"ArcsMat: Size Error");
2735 static_assert(NX == NB,
"ArcsMat: Size Error");
2736 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2737 static_assert(ArcsMatrix::IsApplicable<TB>,
"ArcsMat: Type Error");
2738 static_assert(ArcsMatrix::IsApplicable<TX>,
"ArcsMat: Type Error");
2742 for(
size_t i = 1; i <= NB; ++i){
2753 template<
size_t MB,
size_t NB,
typename TB =
double,
size_t MX,
size_t NX,
typename TX =
double>
2755 static_assert(N < M,
"ArcsMat: Size Error");
2756 static_assert(MB == M,
"ArcsMat: Size Error");
2757 static_assert(MX == N,
"ArcsMat: Size Error");
2758 static_assert(NB == 1,
"ArcsMat: Vector Error");
2759 static_assert(NX == 1,
"ArcsMat: Vector Error");
2760 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2761 static_assert(ArcsMatrix::IsApplicable<TB>,
"ArcsMat: Type Error");
2762 static_assert(ArcsMatrix::IsApplicable<TX>,
"ArcsMat: Type Error");
2772 const auto d = ~Q*b;
2777 for(ssize_t i = N - 1; 0 < i; --i){
2778 for(
size_t j =
static_cast<size_t>(i) + 1; j <= N; ++j){
2779 buff += R(i,j)*x[j];
2781 x[i] = (d[i] - buff)/R(i,i);
2791 template<
size_t MB,
size_t NB,
typename TB =
double,
size_t MX,
size_t NX,
typename TX =
double>
2793 static_assert(N < M,
"ArcsMat: Size Error");
2794 static_assert(MB == M,
"ArcsMat: Size Error");
2795 static_assert(MX == N,
"ArcsMat: Size Error");
2796 static_assert(NX == NB,
"ArcsMat: Size Error");
2797 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2798 static_assert(ArcsMatrix::IsApplicable<TB>,
"ArcsMat: Type Error");
2799 static_assert(ArcsMatrix::IsApplicable<TX>,
"ArcsMat: Type Error");
2803 for(
size_t i = 1; i <= NB; ++i){
2815 template<
size_t MB,
size_t NB,
typename TB =
double,
size_t MX,
size_t NX,
typename TX =
double>
2817 static_assert(M < N,
"ArcsMat: Size Error");
2818 static_assert(MB == M,
"ArcsMat: Size Error");
2819 static_assert(MX == N,
"ArcsMat: Size Error");
2820 static_assert(NB == 1,
"ArcsMat: Vector Error");
2821 static_assert(NX == 1,
"ArcsMat: Vector Error");
2822 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2823 static_assert(ArcsMatrix::IsApplicable<TB>,
"ArcsMat: Type Error");
2824 static_assert(ArcsMatrix::IsApplicable<TX>,
"ArcsMat: Type Error");
2836 d(1,1) = b[1]/R(1,1);
2837 for(
size_t i = 2; i <= M; ++i){
2838 for(
size_t j = 1; j < i; ++j) buff += R(j,i)*d(1,j);
2839 d(1,i) = (b[i] - buff)/R(i,i);
2855 template<
size_t MB,
size_t NB,
typename TB =
double,
size_t MX,
size_t NX,
typename TX =
double>
2857 static_assert(M < N,
"ArcsMat: Size Error");
2858 static_assert(MB == M,
"ArcsMat: Size Error");
2859 static_assert(MX == N,
"ArcsMat: Size Error");
2860 static_assert(NX == NB,
"ArcsMat: Size Error");
2861 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2862 static_assert(ArcsMatrix::IsApplicable<TB>,
"ArcsMat: Type Error");
2863 static_assert(ArcsMatrix::IsApplicable<TX>,
"ArcsMat: Type Error");
2867 for(
size_t i = 1; i <= NB; ++i){
2878 template<
size_t MB,
size_t NB,
typename TB =
double,
size_t MX,
size_t NX,
typename TX =
double>
2881 if constexpr(M == 1 && N == 1){
2884 }
else if constexpr((M == N) && (NB == 1)){
2887 }
else if constexpr((M == N) && (NB != 1)){
2890 }
else if constexpr((N < M) && (NB == 1)){
2893 }
else if constexpr((N < M) && (NB != 1)){
2896 }
else if constexpr((M < N) && (NB == 1)){
2899 }
else if constexpr((M < N) && (NB != 1)){
2912 template<
size_t MB,
size_t NB,
typename TB =
double>
2923 template<
size_t P,
size_t Q,
typename R =
double>
2925 static_assert(M == N,
"ArcsMat: Size Error");
2926 static_assert(M == P,
"ArcsMat: Size Error");
2927 static_assert(N == Q,
"ArcsMat: Size Error");
2928 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2929 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
2947 template<
size_t P,
size_t Q,
typename R =
double>
2949 static_assert(M != N,
"ArcsMat: Size Error");
2950 static_assert(M == Q,
"ArcsMat: Size Error");
2951 static_assert(N == P,
"ArcsMat: Size Error");
2952 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2953 static_assert(ArcsMatrix::IsApplicable<R>,
"ArcsMat: Type Error");
2954 if constexpr(N < M){
2957 }
else if constexpr(M < N){
2978 template<
size_t MP,
size_t NP,
typename TP =
double,
size_t MH,
size_t NH,
typename TH =
double>
2980 static_assert(M == N,
"ArcsMat: Size Error");
2981 static_assert(MP == M,
"ArcsMat: Size Error");
2982 static_assert(NP == N,
"ArcsMat: Size Error");
2983 static_assert(MH == M,
"ArcsMat: Size Error");
2984 static_assert(NH == N,
"ArcsMat: Size Error");
2985 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
2986 static_assert(ArcsMatrix::IsApplicable<TP>,
"ArcsMat: Type Error");
2987 static_assert(ArcsMatrix::IsApplicable<TH>,
"ArcsMat: Type Error");
2993 for(
size_t k = 1; k <= M - 2; ++k){
2995 if constexpr(ArcsMatrix::IsComplex<T>){
2996 u[1] = -std::exp( std::complex( 0.0, std::arg(h[1])) )*std::sqrt( (~h*h)[1] );
2999 u[1] = -std::sqrt( (~h*h)[1] );
3027 template<
size_t MU,
size_t NU,
typename TU =
double,
size_t MS,
size_t NS,
typename TS =
double>
3029 static_assert(M == N,
"ArcsMat: Size Error");
3030 static_assert(MU == M,
"ArcsMat: Size Error");
3031 static_assert(NU == N,
"ArcsMat: Size Error");
3032 static_assert(MS == M,
"ArcsMat: Size Error");
3033 static_assert(NS == N,
"ArcsMat: Size Error");
3034 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
3035 static_assert(ArcsMatrix::IsApplicable<TU>,
"ArcsMat: Type Error");
3036 static_assert(ArcsMatrix::IsApplicable<TS>,
"ArcsMat: Type Error");
3049 a = ( S(k-1,k-1) + S(k,k) + std::sqrt( std::pow(S(k-1,k-1) + S(k,k), 2) - 4.0*(S(k-1,k-1)*S(k,k) - (S(k-1,k)*S(k,k-1))) ) )/2.0;
3076 template<
size_t MV,
size_t NV,
typename TV = std::complex<
double>>
3078 static_assert(M == N,
"ArcsMat: Size Error");
3079 static_assert(MV == M,
"ArcsMat: Size Error");
3080 static_assert(NV == 1,
"ArcsMat: Vector Error");
3081 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
3082 static_assert(ArcsMatrix::IsComplex<TV>,
"ArcsMat: Type Error (Not Complex)");
3093 template<
typename TV = std::complex<
double>>
3105 template<
size_t MV,
size_t NV,
typename TV = std::complex<
double>,
size_t MD,
size_t ND,
typename TD = std::complex<
double>>
3107 static_assert(M == N,
"ArcsMat: Size Error");
3108 static_assert(MV == NV,
"ArcsMat: Size Error");
3109 static_assert(MD == ND,
"ArcsMat: Size Error");
3110 static_assert(MV == M,
"ArcsMat: Size Error");
3111 static_assert(MD == M,
"ArcsMat: Vector Error");
3112 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
3113 static_assert(ArcsMatrix::IsComplex<TV>,
"ArcsMat: Type Error (Not Complex)");
3114 static_assert(ArcsMatrix::IsComplex<TD>,
"ArcsMat: Type Error (Not Complex)");
3122 for(
size_t k = 1; k <= M; ++k){
3134 template<
typename TV = std::complex<
double>>
3146 template<
size_t MR,
size_t NR,
typename TR =
double,
size_t MY,
size_t NY,
typename TY =
double>
3148 static_assert(MY == M*MR,
"ArcsMat: Size Error");
3149 static_assert(NY == N*NR,
"ArcsMat: Size Error");
3150 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
3151 static_assert(ArcsMatrix::IsApplicable<TR>,
"ArcsMat: Type Error");
3152 static_assert(ArcsMatrix::IsApplicable<TY>,
"ArcsMat: Type Error");
3156 for(
size_t i = 1; i <= N; ++i){
3158 for(
size_t j = 1; j <= M; ++j){
3170 template<
size_t MR,
size_t NR,
typename TR =
double>
3182 template<
size_t MR,
size_t NR,
typename TR =
double,
size_t MY,
size_t NY,
typename TY =
double>
3184 static_assert(M == 3,
"ArcsMat: Size Error");
3185 static_assert(MR == 3,
"ArcsMat: Size Error");
3186 static_assert(MY == 3,
"ArcsMat: Size Error");
3187 static_assert(N == 1,
"ArcsMat: Vector Error");
3188 static_assert(NR == 1,
"ArcsMat: Vector Error");
3189 static_assert(NY == 1,
"ArcsMat: Vector Error");
3190 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
3191 static_assert(ArcsMatrix::IsApplicable<TR>,
"ArcsMat: Type Error");
3192 static_assert(ArcsMatrix::IsApplicable<TY>,
"ArcsMat: Type Error");
3194 y[1] = l[2]*r[3] - l[3]*r[2];
3195 y[2] = l[3]*r[1] - l[1]*r[3];
3196 y[3] = l[1]*r[2] - l[2]*r[1];
3204 template<
size_t MR,
size_t NR,
typename TR =
double,
size_t MY,
size_t NY,
typename TY =
double>
3206 static_assert(M == 3,
"ArcsMat: Size Error");
3207 static_assert(MR == 3,
"ArcsMat: Size Error");
3208 static_assert(MY == 3,
"ArcsMat: Size Error");
3209 static_assert(NR == N,
"ArcsMat: Vector Error");
3210 static_assert(NY == N,
"ArcsMat: Vector Error");
3211 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
3212 static_assert(ArcsMatrix::IsApplicable<TR>,
"ArcsMat: Type Error");
3213 static_assert(ArcsMatrix::IsApplicable<TY>,
"ArcsMat: Type Error");
3217 for(
size_t i = 1; i <= N; ++i){
3218 ArcsMat<M,1,T>::cross_vec(
ArcsMat<M,N,T>::getcolumn(L, i),
ArcsMat<MR,NR,TR>::getcolumn(R, i), y);
3228 template<
size_t MR,
size_t NR,
typename TR =
double,
size_t MY,
size_t NY,
typename TY =
double>
3231 if constexpr(N == 1){
3245 template<
size_t MR,
size_t NR,
typename TR =
double>
3256 template<
size_t MY,
size_t NY,
typename TY =
double>
3258 static_assert(MY == M*N,
"ArcsMat: Size Error");
3259 static_assert(NY == 1,
"ArcsMat: Vector Error");
3260 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
3261 static_assert(ArcsMatrix::IsApplicable<TY>,
"ArcsMat: Type Error");
3265 for(
size_t i = 1; i <= N; ++i){
3267 for(
size_t j = 1; j <= M; ++j){
3287 template<
size_t MY,
size_t NY,
typename TY =
double>
3289 static_assert(M == MY*NY,
"ArcsMat: Size Error");
3290 static_assert(N == 1,
"ArcsMat: Vector Error");
3291 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
3292 static_assert(ArcsMatrix::IsApplicable<TY>,
"ArcsMat: Type Error");
3296 for(
size_t i = 1; i <= NY; ++i){
3298 for(
size_t j = 1; j <= MY; ++j){
3309 template<
size_t MY,
size_t NY>
3321 template<
size_t MY,
size_t NY,
typename TY =
double>
3323 static_assert(M == N,
"ArcsMat: Size Error");
3324 static_assert(MY == M,
"ArcsMat: Size Error");
3325 static_assert(NY == N,
"ArcsMat: Size Error");
3326 static_assert(ArcsMatrix::IsApplicable<T>,
"ArcsMat: Type Error");
3327 static_assert(ArcsMatrix::IsApplicable<TY>,
"ArcsMat: Type Error");
3334 A = std::pow(0.5, e + 1)*U;
3344 bool signflag =
false;
3346 for(
size_t i = 1; i <= k; ++i){
3347 c = c*
static_cast<T
>(k - i + 1) /
static_cast<T
>(i*(2*k - i + 1));
3351 coefsign = 2*
static_cast<int>(signflag) - 1;
3352 L +=
static_cast<T
>(coefsign)*cX;
3353 signflag = !signflag;
3358 for(
size_t i = 0; i < static_cast<size_t>(e) + 1; ++i) Y *= Y;
3374 static constexpr std::complex<double>
EPSLCOMP = std::complex(1e-14, 1e-14);
3378 static constexpr size_t ITERATION_MAX = 10000;
3379 static constexpr char CMPLX_UNIT =
'i';
3388 std::array<std::array<T, M>, N> Data;
3393 static constexpr T sgn(T u){
3395 if constexpr(ArcsMatrix::IsComplex<T>){
3398 ret = std::complex(0.0, 0.0);
3400 ret = u/std::abs(u);
3404 ret = std::copysign(1, u);
3411namespace ArcsMatrix {
3418 template <
size_t M,
size_t N,
typename T =
double>
3419 static void dispsize_macro(
const ArcsMat<M,N,T>& U,
const std::string& varname){
3420 printf(
"%s = [ Height: %zu x Width: %zu ]\n\n", varname.c_str(), M, N);
3428 template <
size_t M,
size_t N,
typename T =
double>
3429 static void dispf_macro(
const ArcsMat<M,N,T>& U,
const std::string& format,
const std::string& varname){
3430 printf(
"%s = \n", varname.c_str());
3438 template <
size_t M,
size_t N,
typename T =
double>
3439 static void disp_macro(
const ArcsMat<M,N,T>& U,
const std::string& varname){
3442 if constexpr(std::is_floating_point_v<T>){
3443 dispf_macro(U,
"% 4g", varname);
3448 if constexpr(std::is_same_v<T, int>){
3449 dispf_macro(U,
"% d", varname);
3454 if constexpr(std::is_same_v<T, long>){
3455 dispf_macro(U,
"% ld", varname);
3460 if constexpr(std::is_same_v<T, size_t>){
3461 dispf_macro(U,
"% zu", varname);
3466 if constexpr(std::is_same_v<T, std::complex<double>> || std::is_same_v<T, std::complex<float>>){
3467 dispf_macro(U,
"% 4g", varname);
3475 template <
size_t M,
size_t N,
typename T =
double>
3483 template <
size_t M,
size_t N,
typename T =
double>
3491 template <
size_t M,
size_t N,
typename T =
double>
3499 template <
size_t M,
size_t N,
typename T =
double>
3509 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3519 template <
size_t M,
size_t N,
typename T =
double>
3529 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3540 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3550 template <
size_t M,
size_t N,
typename T =
double>
3561 template <
size_t M,
size_t N,
typename T =
double>
3573 template<
size_t M,
size_t N,
typename T =
double,
typename R =
double>
3586 template<
size_t M,
size_t N,
typename T =
double,
typename R =
double>
3596 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
size_t>
3605 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
size_t>
3614 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3623 template<
size_t M,
size_t N,
typename T =
double>
3633 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3643 template <
size_t M,
size_t N,
typename T =
double>
3653 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3664 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3674 template <
size_t M,
size_t N,
typename T =
double>
3685 template <
size_t M,
size_t N,
typename T =
double>
3697 template<
size_t M,
size_t N,
typename T =
double,
typename R =
double>
3710 template<
size_t M,
size_t N,
typename T =
double,
typename R =
double>
3720 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
size_t>
3729 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
size_t>
3738 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3747 template<
size_t M,
size_t N,
typename T =
double>
3758 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3769 template<
size_t P,
size_t M,
size_t N,
typename T =
double>
3780 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3792 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3803 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3814 template<
size_t Q,
size_t M,
size_t N,
typename T =
double>
3825 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3837 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3848 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3859 template<
size_t P,
size_t Q,
size_t M,
size_t N,
typename T =
double>
3870 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3882 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3898 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3900 const ArcsMat<M,N,T>& U,
const size_t m1,
const size_t m2,
const size_t n1,
const size_t n2,
3911 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3921 template<
size_t M,
size_t N,
typename T =
double>
3931 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3941 template<
size_t M,
size_t N,
typename T =
double>
3951 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3961 template<
size_t M,
size_t N,
typename T =
double>
3971 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
3980 template<
size_t M,
size_t N,
typename T =
double>
3990 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double,
size_t D,
size_t E,
typename F =
double>
4000 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4010 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double,
size_t D,
size_t E,
typename F =
double>
4020 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4032 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double,
size_t D,
size_t E,
typename F =
double,
size_t G,
size_t H,
typename L =
double,
size_t V,
size_t W,
typename X =
double>
4033 constexpr void concat4(
const ArcsMat<M,N,T>& U11,
const ArcsMat<P,Q,R>& U12,
const ArcsMat<D,E,F>& U21,
const ArcsMat<G,H,L>& U22,
ArcsMat<V,W,X>& Y){
4044 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double,
size_t D,
size_t E,
typename F =
double,
size_t G,
size_t H,
typename L =
double>
4045 constexpr ArcsMat<M+D,N+Q,T> concat4(
const ArcsMat<M,N,T>& U11,
const ArcsMat<P,Q,R>& U12,
const ArcsMat<D,E,F>& U21,
const ArcsMat<G,H,L>& U22){
4054 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4063 template<
size_t M,
size_t N,
typename T =
double>
4073 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double,
size_t L = std::min(M,N)>
4083 template<
size_t M,
size_t N,
typename T =
double,
size_t L = std::min(M,N)>
4092 template<
size_t M,
size_t N,
typename T =
double>
4101 template<
size_t M,
size_t N,
typename T =
double>
4110 template<
size_t M,
size_t N,
typename T =
double>
4119 template<
size_t M,
size_t N,
typename T =
double>
4128 template<
size_t M,
size_t N,
typename T =
double>
4137 template<
size_t M,
size_t N,
typename T =
double>
4146 template<
size_t M,
size_t N,
typename T =
double>
4155 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4164 template<
size_t M,
size_t N,
typename T =
double>
4173 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4182 template<
size_t M,
size_t N,
typename T =
double>
4191 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4200 template<
size_t M,
size_t N,
typename T =
double>
4209 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4218 template<
size_t M,
size_t N,
typename T =
double>
4227 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4236 template<
size_t M,
size_t N,
typename T =
double>
4245 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4254 template<
size_t M,
size_t N,
typename T =
double>
4263 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4272 template<
size_t M,
size_t N,
typename T =
double>
4281 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4290 template<
size_t M,
size_t N,
typename T =
double>
4299 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4308 template<
size_t M,
size_t N,
typename T =
double>
4317 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4326 template<
size_t M,
size_t N,
typename T =
double>
4335 template<
size_t M,
size_t N,
typename T =
double>
4346 template<
size_t M,
size_t N,
typename T = std::complex<
double>,
size_t P,
size_t Q,
typename R =
double>
4355 template<
size_t M,
size_t N,
typename T =
double>
4366 template<
size_t M,
size_t N,
typename T = std::complex<
double>,
size_t P,
size_t Q,
typename R =
double>
4375 template<
size_t M,
size_t N,
typename T =
double>
4386 template<
size_t M,
size_t N,
typename T = std::complex<
double>,
size_t P,
size_t Q,
typename R =
double>
4395 template<
size_t M,
size_t N,
typename T =
double>
4406 template<
size_t M,
size_t N,
typename T = std::complex<
double>,
size_t P,
size_t Q,
typename R = std::complex<
double>>
4415 template<
size_t M,
size_t N,
typename T = std::complex<
double>>
4424 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4433 template <
size_t M,
size_t N,
typename T =
double>
4442 template<
size_t M,
size_t N,
typename T = std::complex<
double>,
size_t P,
size_t Q,
typename R = std::complex<
double>>
4451 template<
size_t M,
size_t N,
typename T = std::complex<
double>>
4460 template<NormType NRM = ArcsMatrix::NormType::AMT_L2,
typename T =
double,
size_t M,
size_t N>
4469 template<NormType NRM = ArcsMatrix::NormType::AMT_L2,
typename R =
double,
typename T =
double,
size_t M,
size_t N>
4479 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4489 template<
size_t M,
size_t N,
typename T =
double>
4499 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4509 template<
size_t M,
size_t N,
typename T =
double>
4521 size_t M,
size_t N,
typename T = double,
size_t ML,
size_t NL,
typename TL = double,
4522 size_t MU,
size_t NU,
typename TU = double,
size_t MP,
size_t NP,
typename TP =
double
4524 constexpr void LUP(
const ArcsMat<M,N,T>& A,
ArcsMat<ML,NL,TL>& L,
ArcsMat<MU,NU,TU>& U,
ArcsMat<MP,NP,TP>& P){
4532 template<
size_t M,
size_t N,
typename T =
double>
4533 constexpr std::tuple<ArcsMat<M,N,T>,
ArcsMat<M,N,T>,
ArcsMat<M,N,T>>
LUP(
const ArcsMat<M,N,T>& A){
4543 size_t M,
size_t N,
typename T = double,
4544 size_t ML,
size_t NL,
typename TL = double,
size_t MU,
size_t NU,
typename TU =
double
4554 template<
size_t M,
size_t N,
typename T =
double>
4563 template<
size_t M,
size_t N,
typename T =
double>
4573 template<
size_t M,
size_t N,
typename T =
double,
size_t MH,
size_t NH,
typename TH =
double>
4583 template<
size_t M,
size_t N,
typename T =
double>
4594 size_t M,
size_t N,
typename T = double,
4595 size_t MQ,
size_t NQ,
typename TQ = double,
size_t MR,
size_t NR,
typename TR =
double
4605 template<
size_t M,
size_t N,
typename T =
double>
4617 size_t M,
size_t N,
typename T = double,
size_t MU,
size_t NU,
typename TU = double,
4618 size_t MS,
size_t NS,
typename TS = double,
size_t MV,
size_t NV,
typename TV =
double
4620 constexpr void SVD(
const ArcsMat<M,N,T>& A,
ArcsMat<MU,NU,TU>& U,
ArcsMat<MS,NS,TS>& S,
ArcsMat<MV,NV,TV>& V){
4628 template<
size_t M,
size_t N,
typename T =
double>
4629 constexpr std::tuple<ArcsMat<M,M,T>,
ArcsMat<M,N,T>,
ArcsMat<N,N,T>>
SVD(
const ArcsMat<M,N,T>& A){
4637 template<
size_t M,
size_t N,
typename T =
double>
4647 template<
size_t M,
size_t N,
typename T =
double,
size_t ML,
size_t NL,
typename TL =
double,
size_t MD,
size_t ND,
typename TD =
double>
4656 template<
size_t M,
size_t N,
typename T =
double>
4665 template<
size_t M,
size_t N,
typename T =
double,
size_t ML,
size_t NL,
typename TL =
double>
4674 template<
size_t M,
size_t N,
typename T =
double>
4684 template<
size_t M,
size_t N,
typename T =
double,
size_t MB,
size_t NB,
typename TB =
double,
size_t MX,
size_t NX,
typename TX =
double>
4694 template<
size_t M,
size_t N,
typename T =
double,
size_t MB,
size_t NB,
typename TB =
double>
4703 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4712 template<
size_t M,
size_t N,
typename T =
double>
4721 template<
size_t M,
size_t N,
typename T =
double,
size_t P,
size_t Q,
typename R =
double>
4730 template<
size_t M,
size_t N,
typename T =
double>
4741 template<
size_t M,
size_t N,
typename T =
double,
size_t MP,
size_t NP,
typename TP =
double,
size_t MH,
size_t NH,
typename TH =
double>
4751 template<
size_t M,
size_t N,
typename T =
double>
4762 template<
size_t M,
size_t N,
typename T =
double,
size_t MU,
size_t NU,
typename TU =
double,
size_t MS,
size_t NS,
typename TS =
double>
4772 template<
size_t M,
size_t N,
typename T =
double>
4781 template<
size_t M,
size_t N,
typename T =
double,
size_t MV,
size_t NV,
typename TV = std::complex<
double>>
4790 template<
size_t M,
size_t N,
typename T =
double,
typename TV = std::complex<
double>>
4800 template<
size_t M,
size_t N,
typename T =
double,
size_t MV,
size_t NV,
typename TV = std::complex<
double>,
size_t MD,
size_t ND,
typename TD = std::complex<
double>>
4809 template<
size_t M,
size_t N,
typename T =
double,
typename TV = std::complex<
double>>
4819 template<
size_t M,
size_t N,
typename T =
double,
size_t MR,
size_t NR,
typename TR =
double,
size_t MY,
size_t NY,
typename TY =
double>
4829 template<
size_t M,
size_t N,
typename T =
double,
size_t MR,
size_t NR,
typename TR =
double>
4839 template<
size_t M,
size_t N,
typename T =
double,
size_t MR,
size_t NR,
typename TR =
double,
size_t MY,
size_t NY,
typename TY =
double>
4849 template<
size_t M,
size_t N,
typename T =
double,
size_t MR,
size_t NR,
typename TR =
double>
4858 template<
size_t M,
size_t N,
typename T =
double,
size_t MY,
size_t NY,
typename TY =
double>
4867 template<
size_t M,
size_t N,
typename T =
double>
4876 template<
size_t M,
size_t N,
typename T =
double,
size_t MY,
size_t NY,
typename TY =
double>
4886 template<
size_t MY,
size_t NY,
size_t M,
size_t N,
typename T =
double>
4896 template<
size_t M,
size_t N,
typename T =
double,
size_t MY,
size_t NY,
typename TY =
double>
4906 template<
size_t M,
size_t N,
typename T =
double>
#define arcs_assert(a)
ARCS用assertマクロ a : assert条件
Definition ARCSassert.hh:17
constexpr void expm(const ArcsMat< M, N, T > &U, ArcsMat< MY, NY, TY > &Y, const size_t k=13)
行列指数関数 (引数渡し版)
Definition ArcsMatrix.hh:4897
constexpr T sum(const ArcsMat< M, N, T > &U)
行列要素の総和を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:4147
constexpr void Kron(const ArcsMat< M, N, T > &L, const ArcsMat< MR, NR, TR > &R, ArcsMat< MY, NY, TY > &Y)
クロネッカー積(引数渡し版)
Definition ArcsMatrix.hh:4820
constexpr void shiftright(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t n=1)
行列の各要素を右にn列分シフトする関数(左段の列はゼロになる)(引数渡し版)
Definition ArcsMatrix.hh:3972
constexpr void abs(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の絶対値を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4318
constexpr void LUP(const ArcsMat< M, N, T > &A, ArcsMat< ML, NL, TL > &L, ArcsMat< MU, NU, TU > &U, ArcsMat< MP, NP, TP > &P)
LU分解の結果と置換行列を返す関数(引数渡し版)
Definition ArcsMatrix.hh:4524
constexpr void cos(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の余弦関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4228
constexpr void setrow(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &u, const size_t m)
指定した行を横ベクトルで上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:3654
constexpr void log(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の対数関数(底e版)を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4174
constexpr T norm(const ArcsMat< M, N, T > &U)
行列のノルムを返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:4461
constexpr void gettrilo(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t m=1)
m行目を上端として左下の下三角部分のみを返す関数(上三角部分はゼロ)(引数渡し版)
Definition ArcsMatrix.hh:4500
constexpr void sumcolumn(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y)
各列の総和を計算して横ベクトルを出力する関数 (引数渡し版)
Definition ArcsMatrix.hh:3615
constexpr void gettriup(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t n=1)
n列目を左端として右上の上三角部分のみを返す関数(下三角部分はゼロ)(引数渡し版)
Definition ArcsMatrix.hh:4480
constexpr void vecinv(const ArcsMat< M, N, T > &u, ArcsMat< MY, NY, TY > &Y)
vec作用素の逆(縦ベクトル→行列) (引数渡し版)
Definition ArcsMatrix.hh:4877
constexpr void fillcolumn(ArcsMat< M, N, T > &UY, const R a, const size_t n, const size_t m1, const size_t m2)
n列目のm1行目からm2行目までを数値aで埋める関数 (m1 <= m2 であること) (引数渡し版)
Definition ArcsMatrix.hh:3574
constexpr void linsolve(const ArcsMat< M, N, T > &A, const ArcsMat< MB, NB, TB > &B, ArcsMat< MX, NX, TX > &X)
AX = Bの形の線形方程式をXについて解く関数(引数渡し版)
Definition ArcsMatrix.hh:4685
constexpr ArcsMat< M, N, T > ordercolumn(const ArcsMat< M, N, T > &U, const ArcsMat< P, Q, R > &u)
並び替え指定横ベクトルuが昇順になるように,行列Uの列を並び替える関数 (戻り値渡し版のみ)
Definition ArcsMatrix.hh:3597
constexpr T max(const ArcsMat< M, N, T > &U)
行列要素の最大値を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:4120
constexpr void ordercolumn_and_vec(ArcsMat< M, N, T > &UY, ArcsMat< P, Q, R > &uy)
並び替え指定横ベクトルuが昇順になるように,行列Uの列と指定横ベクトルの両方を並び替える関数 (引数渡し版のみ)
Definition ArcsMatrix.hh:3606
constexpr std::tuple< size_t, size_t > maxidx(const ArcsMat< M, N, T > &U)
行列要素の最大値の要素番号を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:4111
constexpr void sethvector(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &u, const size_t m, const size_t n)
指定位置に横ベクトルで上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:3826
constexpr void cross(const ArcsMat< M, N, T > &L, const ArcsMat< MR, NR, TR > &R, ArcsMat< MY, NY, TY > &Y)
クロス積 (引数渡し版)
Definition ArcsMatrix.hh:4840
constexpr void gethvector(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const size_t m, const size_t n)
指定位置から横ベクトルを抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:3804
constexpr void sumrow(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y)
各行の総和を計算して縦ベクトルを出力する関数 (引数渡し版)
Definition ArcsMatrix.hh:3739
constexpr void Schur(const ArcsMat< M, N, T > &A, ArcsMat< MU, NU, TU > &U, ArcsMat< MS, NS, TS > &S)
複素Schur分解(引数渡し版) この関数はMATLABとは異なる解を出力する、ただしもちろん、A = USU' は成立
Definition ArcsMatrix.hh:4763
constexpr void tan(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の正接関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4246
constexpr void Householder(const ArcsMat< M, N, T > &v, ArcsMat< MH, NH, TH > &H, const size_t k=1)
Householder行列を生成する関数(引数渡し版)
Definition ArcsMatrix.hh:4574
constexpr void concath(const ArcsMat< M, N, T > &U1, const ArcsMat< P, Q, R > &U2, ArcsMat< D, E, F > &Y)
行列を横に連結する関数(引数渡し版)
Definition ArcsMatrix.hh:4011
constexpr void shiftleft(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t n=1)
行列の各要素を左にn列分シフトする関数(右段の列はゼロになる)(引数渡し版)
Definition ArcsMatrix.hh:3952
constexpr ArcsMat< M, N, T > ones(void)
m行n列の要素がすべて1の行列を返す関数
Definition ArcsMatrix.hh:3492
constexpr void sin(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の正弦関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4210
constexpr T trace(const ArcsMat< M, N, T > &U)
行列のトレースを返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:4093
constexpr std::tuple< size_t, size_t > minidx(const ArcsMat< M, N, T > &U)
行列要素の最小値の要素番号を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:4129
constexpr void concatv(const ArcsMat< M, N, T > &U1, const ArcsMat< P, Q, R > &U2, ArcsMat< D, E, F > &Y)
行列を縦に連結する関数(引数渡し版)
Definition ArcsMatrix.hh:3991
constexpr void pinv(const ArcsMat< M, N, T > &A, ArcsMat< P, Q, R > &Y)
Moore-Penroseの擬似逆行列を返す関数(引数渡し版)
Definition ArcsMatrix.hh:4722
constexpr void setcolumn(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &u, const size_t n)
指定した列を縦ベクトルで上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:3530
constexpr void Hessenberg(const ArcsMat< M, N, T > &A, ArcsMat< MP, NP, TP > &P, ArcsMat< MH, NH, TH > &H)
Hessenberg分解(引数渡し版) 複素数の場合、この関数はMATLABとは異なる解を出力する。
Definition ArcsMatrix.hh:4742
constexpr void getvvector(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const size_t m, const size_t n)
指定位置から縦ベクトルを抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:3759
constexpr void LDL(const ArcsMat< M, N, T > &A, ArcsMat< ML, NL, TL > &L, ArcsMat< MD, ND, TD > &D)
修正コレスキー分解(LDL分解) (引数渡し版)
Definition ArcsMatrix.hh:4648
constexpr void shiftup(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t m=1)
行列の各要素を上に1行分シフトする関数(下段の行はゼロになる)(引数渡し版)
Definition ArcsMatrix.hh:3912
constexpr void tp(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
転置行列を返す関数 (引数渡し版)
Definition ArcsMatrix.hh:4425
constexpr void eigvec(const ArcsMat< M, N, T > &A, ArcsMat< MV, NV, TV > &V, ArcsMat< MD, ND, TD > &D)
固有値を持つ対角行列Dと、各々の固有値に対応する固有ベクトルを持つ行列Vを返す関数(引数渡し版)
Definition ArcsMatrix.hh:4801
constexpr void Cholesky(const ArcsMat< M, N, T > &A, ArcsMat< ML, NL, TL > &R)
修正コレスキー分解(引数渡し版)
Definition ArcsMatrix.hh:4666
constexpr void log10(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の対数関数(底10版)を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4192
constexpr void setsubmatrix(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &U, const size_t m, const size_t n)
小行列を行列の指定位置に上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:3871
constexpr ArcsMat< M, N, T > eye(void)
M行N列の単位行列を返す関数
Definition ArcsMatrix.hh:3476
constexpr void getdiag(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const ssize_t k=0)
行列の対角要素を縦ベクトルとして取得する関数(引数渡し版)
Definition ArcsMatrix.hh:4074
constexpr void shiftdown(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t m=1)
行列の各要素を下にm行分シフトする関数(上段の行はゼロになる)(引数渡し版)
Definition ArcsMatrix.hh:3932
NormType
ノルム計算方法の定義
Definition ArcsMatrix.hh:50
constexpr void swaprow(ArcsMat< M, N, T > &UY, const size_t m1, const size_t m2)
指定した行と行を入れ替える関数 (引数渡し版)
Definition ArcsMatrix.hh:3675
constexpr void getcolumn(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const size_t n)
指定した列から縦ベクトルとして抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:3510
constexpr void exp(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の指数関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4156
constexpr void real(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
複素数行列要素の実数部を取得する関数(引数渡し版)
Definition ArcsMatrix.hh:4367
constexpr void arg(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
複素数行列要素の偏角を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4347
constexpr void eig(const ArcsMat< M, N, T > &A, ArcsMat< MV, NV, TV > &v)
固有値を返す関数
Definition ArcsMatrix.hh:4782
constexpr void orderrow_and_vec(ArcsMat< M, N, T > &UY, ArcsMat< P, Q, R > &uy)
並び替え指定縦ベクトルuが昇順になるように,行列Uの行と指定縦ベクトルの両方を並び替える関数 (引数渡し版のみ)
Definition ArcsMatrix.hh:3730
constexpr T det(const ArcsMat< M, N, T > &A)
行列式の値を返す関数(戻り値返し版のみ)
Definition ArcsMatrix.hh:4564
constexpr T multdiag(const ArcsMat< M, N, T > &U)
行列の対角要素の総積を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:4102
MatStatus
行列の状態の定義
Definition ArcsMatrix.hh:57
@ AMT_LU_EVEN
LU分解したときに並べ替えが偶数回発生
@ AMT_LU_ODD
LU分解したときに並べ替えが奇数回発生
constexpr void sqrt(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の平方根を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4282
constexpr void copymatrix(const ArcsMat< M, N, T > &U, const size_t m1, const size_t m2, const size_t n1, const size_t n2, ArcsMat< P, Q, R > &Y, const size_t my, const size_t ny)
行列Uから別の行列Yへ位置とサイズを指定してコピーする関数(引数渡し版のみ) 等価なMATLABコード: Y(my:my+(m2-m1), ny:ny+(n2-n1)) = U(m1:m2,...
Definition ArcsMatrix.hh:3899
constexpr void vec(const ArcsMat< M, N, T > &U, ArcsMat< MY, NY, TY > &y)
vec作用素(行列→縦ベクトル) (引数渡し版)
Definition ArcsMatrix.hh:4859
constexpr void QR(const ArcsMat< M, N, T > &A, ArcsMat< MQ, NQ, TQ > &Q, ArcsMat< MR, NR, TR > &R)
QR分解(引数渡し版)
Definition ArcsMatrix.hh:4597
constexpr ArcsMat< M, N, T > zeros(void)
m行n列の零行列を返す関数
Definition ArcsMatrix.hh:3484
constexpr void getsubmatrix(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t m, const size_t n)
行列から指定位置の小行列を抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:3849
constexpr void setvvector(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &u, const size_t m, const size_t n)
指定位置に縦ベクトルで上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:3781
constexpr void diag(const ArcsMat< M, N, T > &u, ArcsMat< P, Q, R > &Y)
縦ベクトルの各要素を対角要素に持つ正方行列を生成する関数(引数渡し版)
Definition ArcsMatrix.hh:4055
constexpr T min(const ArcsMat< M, N, T > &U)
行列要素の最小値を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:4138
constexpr void sign(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の符号関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4300
constexpr void getrow(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const size_t m)
指定した行から横ベクトルとして抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:3634
constexpr void LU(const ArcsMat< M, N, T > &A, ArcsMat< ML, NL, TL > &L, ArcsMat< MU, NU, TU > &U)
LU分解の結果のみ返す関数(引数渡し版)
Definition ArcsMatrix.hh:4546
constexpr ArcsMat< M, N, T > orderrow(const ArcsMat< M, N, T > &U, const ArcsMat< P, Q, R > &u)
並び替え指定縦ベクトルuが昇順になるように,行列Uの行を並び替える関数 (戻り値渡し版のみ)
Definition ArcsMatrix.hh:3721
constexpr void tanh(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の双曲線正接関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:4264
constexpr void SVD(const ArcsMat< M, N, T > &A, ArcsMat< MU, NU, TU > &U, ArcsMat< MS, NS, TS > &S, ArcsMat< MV, NV, TV > &V)
SVD特異値分解(引数渡し版)
Definition ArcsMatrix.hh:4620
constexpr void imag(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
複素数行列要素の虚数部を取得する関数(引数渡し版)
Definition ArcsMatrix.hh:4387
constexpr size_t rank(const ArcsMat< M, N, T > &A, const T eps=ArcsMat< M, N, T >::EPSILON)
行列の階数を返す関数(戻り値返し版のみ)
Definition ArcsMatrix.hh:4638
constexpr ArcsMat< M, N, T > ramp(void)
単調増加の縦ベクトルを返す関数
Definition ArcsMatrix.hh:3500
constexpr void concat4(const ArcsMat< M, N, T > &U11, const ArcsMat< P, Q, R > &U12, const ArcsMat< D, E, F > &U21, const ArcsMat< G, H, L > &U22, ArcsMat< V, W, X > &Y)
4つの行列を1つに連結する関数(戻り値渡し版)
Definition ArcsMatrix.hh:4033
constexpr void Htp(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
エルミート転置行列を返す関数 (引数渡し版)
Definition ArcsMatrix.hh:4443
constexpr void fillrow(ArcsMat< M, N, T > &UY, const R a, const size_t m, const size_t n1, const size_t n2)
m行目のn1列目からn2列目までを数値aで埋める関数 (n1 <= n2 であること) (引数渡し版)
Definition ArcsMatrix.hh:3698
constexpr void swapcolumn(ArcsMat< M, N, T > &UY, const size_t n1, const size_t n2)
指定した列と列を入れ替える関数 (引数渡し版)
Definition ArcsMatrix.hh:3551
constexpr void conj(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
複素数行列要素の複素共役を取得する関数(引数渡し版)
Definition ArcsMatrix.hh:4407
constexpr void inv(const ArcsMat< M, N, T > &A, ArcsMat< P, Q, R > &Y)
逆行列を返す関数(引数渡し版)
Definition ArcsMatrix.hh:4704
Definition ArcsMatrix.hh:67
Definition ArcsMatrix.hh:73
ARCS-Matrix 行列演算クラス
Definition ArcsMatrix.hh:89
constexpr void Set(const T1 &u1, const T2 &... u2)
行列要素に値を設定する関数
Definition ArcsMatrix.hh:643
static constexpr void real(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
複素数行列要素の実数部を取得する関数(引数渡し版)
Definition ArcsMatrix.hh:2084
constexpr ArcsMat< 1, Q, T > GetHorizontalVec(const size_t m, const size_t n) const
指定した先頭位置から横ベクトルを抜き出して返す関数 (戻り値渡し版)
Definition ArcsMatrix.hh:826
static constexpr void LU(const ArcsMat< M, N, T > &A, ArcsMat< ML, NL, TL > &L, ArcsMat< MU, NU, TU > &U)
LU分解の結果のみ返す関数(引数渡し版)
Definition ArcsMatrix.hh:2377
static constexpr ArcsMat< 1, N, T > sumcolumn(const ArcsMat< M, N, T > &U)
各列の総和を計算して横ベクトルを出力する関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1080
static constexpr ArcsMat< M, N, T > exp(const ArcsMat< M, N, T > &U)
行列要素の指数関数を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1846
static constexpr void getvvector(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const size_t m, const size_t n)
指定位置から縦ベクトルを抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:1247
static constexpr ArcsMat< M, N, T > fillcolumn(const R a, const size_t n, const size_t m1, const size_t m2, const ArcsMat< M, N, T > &U)
n列目のm1行目からm2行目までを数値aで埋める関数 (n1 <= n2 であること) (戻り値渡し版)
Definition ArcsMatrix.hh:1024
constexpr void LoadArray(const std::array< R, P > &Array)
1次元std::array配列を縦ベクトルとして読み込む関数
Definition ArcsMatrix.hh:720
static constexpr ArcsMat< M, N, T > fillrow(const R a, const size_t m, const size_t n1, const size_t n2, const ArcsMat< M, N, T > &U)
m行目のn1列目からn2列目までを数値aで埋める関数 (n1 <= n2 であること) (戻り値渡し版)
Definition ArcsMatrix.hh:1178
constexpr T & operator[](const size_t m)
縦ベクトル添字演算子(縦ベクトルのm番目の要素に値を設定する。A(m,1) = xと同じ意味) 備考:ArcsMatは縦ベクトル優先なので、横ベクトル添字演算子は無い。
Definition ArcsMatrix.hh:218
constexpr void SetHorizontalVec(const ArcsMat< P, Q, R > &w, size_t m, size_t n)
指定した先頭位置に横ベクトルを埋め込む関数
Definition ArcsMatrix.hh:853
static constexpr T max(const ArcsMat< M, N, T > &U)
行列要素の最大値を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:1782
static constexpr void sumrow(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y)
各行の総和を計算して縦ベクトルを出力する関数 (引数渡し版)
Definition ArcsMatrix.hh:1221
constexpr friend ArcsMat< M, N, T > operator*(const T &left, const ArcsMat< M, N, T > &right)
行列乗算演算子 (スカラー*行列の場合)
Definition ArcsMatrix.hh:542
static constexpr std::tuple< ArcsMat< M, M, T >, ArcsMat< M, N, T > > QR(const ArcsMat< M, N, T > &A)
QR分解(タプル返し版)
Definition ArcsMatrix.hh:2506
constexpr void GetVerticalVec(ArcsMat< P, Q, R > &v, const size_t m, const size_t n) const
指定した先頭位置から縦ベクトルを抜き出して返す関数 (引数渡し版)
Definition ArcsMatrix.hh:784
static constexpr ArcsMat< M+P, N, T > concatv(const ArcsMat< M, N, T > &U1, const ArcsMat< P, Q, R > &U2)
行列を縦に連結する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1583
static constexpr void sin(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の正弦関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:1905
static constexpr void concat4(const ArcsMat< M, N, T > &U11, const ArcsMat< P, Q, R > &U12, const ArcsMat< D, E, F > &U21, const ArcsMat< G, H, L > &U22, ArcsMat< V, W, X > &Y)
4つの行列を1つに連結する関数(引数渡し版)
Definition ArcsMatrix.hh:1625
static constexpr double EPSILON
零とみなす閾値(実数版)
Definition ArcsMatrix.hh:3373
static constexpr ArcsMat< M, 1, T > sumrow(const ArcsMat< M, N, T > &U)
各行の総和を計算して縦ベクトルを出力する関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1234
constexpr T & operator()(const size_t m, const size_t n, const bool chk)
行列括弧演算子(行列の(m,n)要素に値を設定する。サイズチェック可能版)
Definition ArcsMatrix.hh:257
static constexpr ArcsMat< M, N, T > setsubmatrix(const ArcsMat< P, Q, R > &Us, const size_t m, const size_t n, const ArcsMat< M, N, T > &U)
小行列を行列の指定位置に上書きする関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1387
static constexpr std::tuple< ArcsMat< M, N, T >, ArcsMat< M, N, T >, ArcsMat< M, N, T > > LUP(const ArcsMat< M, N, T > &A)
LU分解の結果と置換行列を返す関数(タプル返し版)
Definition ArcsMatrix.hh:2365
constexpr ArcsMat(const std::initializer_list< R > InitList)
コンストラクタ(初期化リスト版)
Definition ArcsMatrix.hh:121
constexpr friend void operator/(const T &left, const ArcsMat< M, N, T > &right)
行列除算演算子 (スカラー/行列の場合)
Definition ArcsMatrix.hh:549
static constexpr void LUP(const ArcsMat< M, N, T > &A, ArcsMat< ML, NL, TL > &L, ArcsMat< MU, NU, TU > &U, ArcsMat< MP, NP, TP > &P)
LU分解の結果と置換行列を返す関数(引数渡し版)
Definition ArcsMatrix.hh:2295
static constexpr void exp(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の指数関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:1833
constexpr void DispSize(void) const
行列のサイズを表示
Definition ArcsMatrix.hh:607
static constexpr void setvvector(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &u, const size_t m, const size_t n)
指定位置に縦ベクトルで上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:1269
static constexpr void pinv(const ArcsMat< M, N, T > &A, ArcsMat< P, Q, R > &Y)
Moore-Penroseの擬似逆行列を返す関数(引数渡し版)
Definition ArcsMatrix.hh:2948
static constexpr ArcsMat< M+D, N+Q, T > concat4(const ArcsMat< M, N, T > &U11, const ArcsMat< P, Q, R > &U12, const ArcsMat< D, E, F > &U21, const ArcsMat< G, H, L > &U22)
4つの行列を1つに連結する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1660
static constexpr std::tuple< ArcsMat< M, N, TV >, ArcsMat< M, N, TV > > eigvec(const ArcsMat< M, N, T > &A)
固有値を持つ対角行列Dと、各々の固有値に対応する固有ベクトルを持つ行列Vを返す関数(タプル返し版)
Definition ArcsMatrix.hh:3135
static constexpr ArcsMat< M, N, T > ones(void)
m行n列の要素がすべて1の行列を返す関数
Definition ArcsMatrix.hh:902
static constexpr ArcsMat< M, N, T > shiftdown(const ArcsMat< M, N, T > &U, const size_t m=1)
行列の各要素を下にm行分シフトする関数(上段の行はゼロになる)(戻り値渡し版)
Definition ArcsMatrix.hh:1487
static constexpr void linsolve_mat_nsqh(const ArcsMat< M, N, T > &A, const ArcsMat< MB, NB, TB > &B, ArcsMat< MX, NX, TX > &X)
AX = Bの形の線形方程式をXについて解く関数(非正方横行列A・行列X,B版) (内部用引数渡し版のみ) この関数はMATLABとは異なる解を出力する、ただしもちろん、AX = B は成立
Definition ArcsMatrix.hh:2856
static constexpr void linsolve_vec(const ArcsMat< M, N, T > &A, const ArcsMat< MB, NB, TB > &b, ArcsMat< MX, NX, TX > &x)
Ax = bの形の線形方程式をxについて解く関数(正方行列A・ベクトルx,b版) (内部用引数渡し版のみ)
Definition ArcsMatrix.hh:2686
static constexpr void fillcolumn(ArcsMat< M, N, T > &UY, const R a, const size_t n, const size_t m1, const size_t m2)
n列目のm1行目からm2行目までを数値aで埋める関数 (m1 <= m2 であること) (引数渡し版)
Definition ArcsMatrix.hh:1006
static constexpr void orderrow_and_vec(ArcsMat< M, N, T > &UY, ArcsMat< P, Q, R > &uy)
並び替え指定縦ベクトルuが昇順になるように,行列Uの行と指定縦ベクトルの両方を並び替える関数 (引数渡し版のみ)
Definition ArcsMatrix.hh:1206
static constexpr void linsolve_vec_nsqh(const ArcsMat< M, N, T > &A, const ArcsMat< MB, NB, TB > &b, ArcsMat< MX, NX, TX > &x)
Ax = bの形の線形方程式をxについて解く関数(非正方横長行列A・ベクトルx,b版) (内部用引数渡し版のみ) この関数はMATLABとは異なる解を出力する、ただしもちろん、Ax = b は成立
Definition ArcsMatrix.hh:2816
static constexpr ArcsMat< M, N, T > cross(const ArcsMat< M, N, T > &L, const ArcsMat< MR, NR, TR > &R)
クロス積 (戻り値返し版)
Definition ArcsMatrix.hh:3246
static constexpr void conj(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
複素数行列要素の複素共役を取得する関数(引数渡し版)
Definition ArcsMatrix.hh:2114
constexpr T operator()(const size_t m, const size_t n, const bool chk) const
行列括弧演算子(行列の(m,n)要素の値を返す。サイズチェック可能版)
Definition ArcsMatrix.hh:244
static constexpr ArcsMat< M, N, T > sethvector(const ArcsMat< P, Q, R > &u, const size_t m, const size_t n, const ArcsMat< M, N, T > &U)
指定位置に横ベクトルで上書きする関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1328
static constexpr void log(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の対数関数(底e版)を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:1857
constexpr ArcsMat(const ArcsMat< P, Q, R > &right)
コピーコンストラクタ(サイズもしくは型が違う行列の場合の定義)
Definition ArcsMatrix.hh:158
constexpr void StoreArray(std::array< R, P > &Array) const
縦ベクトルを1次元std::array配列に書き込む関数
Definition ArcsMatrix.hh:731
static constexpr ArcsMat< M, N, T > ordercolumn(const ArcsMat< M, N, T > &U, const ArcsMat< P, Q, R > &u)
並び替え指定横ベクトルuが昇順になるように,行列Uの列を並び替える関数 (戻り値渡し版のみ)
Definition ArcsMatrix.hh:1036
constexpr ArcsMat< M, Q, T > operator*(const ArcsMat< P, Q, R > &right) const
行列乗算演算子(行列=行列*行列の場合)
Definition ArcsMatrix.hh:380
constexpr void FillAllZero(void)
すべての要素を指定したゼロで埋める関数
Definition ArcsMatrix.hh:712
constexpr friend ArcsMat< M, N, T > operator+(const T &left, const ArcsMat< M, N, T > &right)
行列加算演算子 (スカラー+行列の場合)
Definition ArcsMatrix.hh:528
static constexpr ArcsMat< M, N, T > log(const ArcsMat< M, N, T > &U)
行列要素の対数関数(底e版)を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1870
static constexpr void sqrt(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の平方根を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:2001
constexpr friend ArcsMat< M, N, T > operator-(const T &left, const ArcsMat< M, N, T > &right)
行列減算演算子 (スカラー-行列の場合)
Definition ArcsMatrix.hh:535
static constexpr T multdiag(const ArcsMat< M, N, T > &U)
行列の対角要素の総積を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:1748
static constexpr void arg(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
複素数行列要素の偏角を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:2069
constexpr ArcsMat(const R InitValue)
コンストラクタ(任意初期値版)
Definition ArcsMatrix.hh:106
static constexpr void diag(const ArcsMat< M, N, T > &u, ArcsMat< P, Q, R > &Y)
縦ベクトルの各要素を対角要素に持つ正方行列を生成する関数(引数渡し版)
Definition ArcsMatrix.hh:1672
constexpr void Disp(void) const
行列の要素を表示(表示形式自動版)
Definition ArcsMatrix.hh:602
static constexpr ArcsMat< N, NB, T > linsolve(const ArcsMat< M, N, T > &A, const ArcsMat< MB, NB, TB > &B)
AX = Bの形の線形方程式をXについて解く関数(戻り値返し版)
Definition ArcsMatrix.hh:2913
static constexpr std::complex< double > EPSLCOMP
零とみなす閾値(複素数版)
Definition ArcsMatrix.hh:3374
constexpr void Zeroing(const T eps=ArcsMat< M, N, T >::EPSILON)
ゼロに近い要素を完全にゼロにする関数
Definition ArcsMatrix.hh:865
static constexpr void sethvector(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &u, const size_t m, const size_t n)
指定位置に横ベクトルで上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:1316
constexpr void DispAddress(void) const
行列要素の各メモリアドレスを表示する関数
Definition ArcsMatrix.hh:554
static constexpr void vecinv(const ArcsMat< M, N, T > &u, ArcsMat< MY, NY, TY > &Y)
vec作用素の逆(縦ベクトル→行列) (引数渡し版)
Definition ArcsMatrix.hh:3288
static constexpr ArcsMat< M, N, T > expm(const ArcsMat< M, N, T > &U, const size_t k=13)
行列指数関数 (戻り値返し版)
Definition ArcsMatrix.hh:3365
static constexpr T sum(const ArcsMat< M, N, T > &U)
行列要素の総和を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:1823
static constexpr ArcsMat< 1, N, T > getrow(const ArcsMat< M, N, T > &U, const size_t m)
指定した行から横ベクトルとして抽出する関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1101
constexpr ArcsMat< M, N, T > operator-(const ArcsMat< P, Q, R > &right) const
行列減算演算子(行列=行列-行列の場合)
Definition ArcsMatrix.hh:348
static constexpr T trace(const ArcsMat< M, N, T > &U)
行列のトレースを返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:1738
static constexpr ArcsMat< M, N, T > conj(const ArcsMat< M, N, T > &U)
複素数行列要素の複素共役を取得する関数(戻り値渡し版)
Definition ArcsMatrix.hh:2127
static constexpr void shiftdown(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t m=1)
行列の各要素を下にm行分シフトする関数(上段の行はゼロになる)(引数渡し版)
Definition ArcsMatrix.hh:1465
static constexpr void expm(const ArcsMat< M, N, T > &U, ArcsMat< MY, NY, TY > &Y, const size_t k=13)
行列指数関数 (引数渡し版)
Definition ArcsMatrix.hh:3322
static constexpr std::tuple< ArcsMat< M, N, T >, ArcsMat< M, N, T > > LDL(const ArcsMat< M, N, T > &A)
修正コレスキー分解(LDL分解) (タプル返し版)
Definition ArcsMatrix.hh:2648
constexpr ArcsMat(const ArcsMat< M, N, T > &right)
コピーコンストラクタ
Definition ArcsMatrix.hh:147
static constexpr void sign(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の符号関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:2023
static constexpr void swapcolumn(ArcsMat< M, N, T > &UY, const size_t n1, const size_t n2)
指定した列と列を入れ替える関数 (引数渡し版)
Definition ArcsMatrix.hh:979
constexpr size_t GetNumOfNonZero(const T eps=ArcsMat< M, N, T >::EPSILON) const
非ゼロ要素の数を返す関数
Definition ArcsMatrix.hh:628
static constexpr void fillrow(ArcsMat< M, N, T > &UY, const R a, const size_t m, const size_t n1, const size_t n2)
m行目のn1列目からn2列目までを数値aで埋める関数 (n1 <= n2 であること) (引数渡し版)
Definition ArcsMatrix.hh:1160
static constexpr ArcsMat< M, N+Q, T > concath(const ArcsMat< M, N, T > &U1, const ArcsMat< P, Q, R > &U2)
行列を横に連結する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1611
static constexpr ArcsMat< N, M, T > tp(const ArcsMat< M, N, T > &U)
転置行列を返す関数 (戻り値渡し版)
Definition ArcsMatrix.hh:2150
constexpr void LoadArray(const std::array< std::array< R, P >, Q > &Array)
2次元std::array配列を行列として読み込む関数
Definition ArcsMatrix.hh:742
static constexpr ArcsMat< M, M, T > diag(const ArcsMat< M, N, T > &u)
縦ベクトルの各要素を対角要素に持つ正方行列を生成する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1683
static constexpr ArcsMat< M, N, T > setrow(const ArcsMat< P, Q, R > &u, const size_t m, const ArcsMat< M, N, T > &U)
指定した行を横ベクトルで上書きする関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1123
static constexpr ArcsMat< M, N, T > setcolumn(const ArcsMat< P, Q, R > &u, const size_t n, const ArcsMat< M, N, T > &U)
指定した列を縦ベクトルで上書きする関数 (戻り値渡し版)
Definition ArcsMatrix.hh:969
constexpr ArcsMat< N, M, T > operator~(void) const
転置演算子
Definition ArcsMatrix.hh:2178
static constexpr std::tuple< ArcsMat< M, N, T >, ArcsMat< M, N, T > > Hessenberg(const ArcsMat< M, N, T > &A)
Hessenberg分解(タプル返し版) 複素数の場合、この関数はMATLABとは異なる解を出力する。
Definition ArcsMatrix.hh:3015
static constexpr ArcsMat< 1, Q, T > gethvector(const ArcsMat< M, N, T > &U, const size_t m, const size_t n)
指定位置から横ベクトルを抽出する関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1305
static constexpr ArcsMat< M, N, T > zeros(void)
m行n列の零行列を返す関数
Definition ArcsMatrix.hh:895
constexpr void GetHorizontalVec(ArcsMat< P, Q, R > &w, const size_t m, const size_t n) const
指定した先頭位置から横ベクトルを抜き出して返す関数 (引数渡し版)
Definition ArcsMatrix.hh:811
constexpr ArcsMat(void)
コンストラクタ
Definition ArcsMatrix.hh:92
static constexpr std::tuple< size_t, size_t > maxidx(const ArcsMat< M, N, T > &U)
行列要素の最大値の要素番号を返す関数(タプル返し版のみ)
Definition ArcsMatrix.hh:1757
static constexpr T det(const ArcsMat< M, N, T > &A)
行列式の値を返す関数(戻り値返し版のみ)
Definition ArcsMatrix.hh:2395
static constexpr ArcsMat< M *N, 1, T > vec(const ArcsMat< M, N, T > &U)
vec作用素(行列→縦ベクトル) (戻り値返し版)
Definition ArcsMatrix.hh:3277
static constexpr void cross_vec(const ArcsMat< M, N, T > &l, const ArcsMat< MR, NR, TR > &r, ArcsMat< MY, NY, TY > &y)
クロス積 ベクトル版 (内部用引数渡し版のみ)
Definition ArcsMatrix.hh:3183
constexpr ArcsMat< M, N, T > & operator+=(const R &right)
行列加算代入演算子(行列=行列+行列、行列=行列+スカラーの場合)
Definition ArcsMatrix.hh:437
static constexpr void tan(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の正接関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:1953
constexpr ArcsMat< M, N, T > operator/(const R &right) const
行列除算演算子(行列=行列/スカラーの場合)
Definition ArcsMatrix.hh:422
static constexpr ArcsMat< M, N, T > swapcolumn(const size_t n1, const size_t n2, const ArcsMat< M, N, T > &U)
指定した列と列を入れ替える関数 (戻り値渡し版)
Definition ArcsMatrix.hh:992
constexpr ArcsMat< M, N, T > operator%(const ArcsMat< P, Q, R > &right) const
行列アダマール除算演算子 (行列の要素ごとの除算)
Definition ArcsMatrix.hh:513
constexpr T operator()(const size_t m, const size_t n) const
行列括弧演算子(行列の(m,n)要素の値を返す。サイズチェック無し版)
Definition ArcsMatrix.hh:227
constexpr T operator[](const size_t m) const
縦ベクトル添字演算子(縦ベクトルのm番目の要素の値を返す。x = A(m,1)と同じ意味) 備考:ArcsMatは縦ベクトル優先なので、横ベクトル添字演算子は無い。
Definition ArcsMatrix.hh:209
static constexpr void setsubmatrix(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &U, const size_t m, const size_t n)
小行列を行列の指定位置に上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:1370
static constexpr void gethvector(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const size_t m, const size_t n)
指定位置から横ベクトルを抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:1294
static constexpr ArcsMat< M, N, T > swaprow(const size_t m1, const size_t m2, const ArcsMat< M, N, T > &U)
指定した行と行を入れ替える関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1146
static constexpr void swaprow(ArcsMat< M, N, T > &UY, const size_t m1, const size_t m2)
指定した行と行を入れ替える関数 (引数渡し版)
Definition ArcsMatrix.hh:1133
static constexpr ArcsMat< M *MR, N *NR, T > Kron(const ArcsMat< M, N, T > &L, const ArcsMat< MR, NR, TR > &R)
クロネッカー積(戻り値返し版)
Definition ArcsMatrix.hh:3171
constexpr void SetVerticalVec(const ArcsMat< P, Q, R > &v, const size_t m, const size_t n)
指定した先頭位置に縦ベクトルを埋め込む関数
Definition ArcsMatrix.hh:838
static constexpr void Schur(const ArcsMat< M, N, T > &A, ArcsMat< MU, NU, TU > &U, ArcsMat< MS, NS, TS > &S)
複素Schur分解(引数渡し版) この関数はMATLABとは異なる解を出力する、ただしもちろん、A = USU' は成立
Definition ArcsMatrix.hh:3028
constexpr ArcsMat< M, N, T > operator+(void) const
単項プラス演算子
Definition ArcsMatrix.hh:291
static constexpr ArcsMat< MY, NY, T > vecinv(const ArcsMat< M, N, T > &u)
vec作用素の逆(縦ベクトル→行列) (戻り値返し版)
Definition ArcsMatrix.hh:3310
constexpr ArcsMat< M, N, T > & operator-=(const R &right)
行列減算代入演算子(行列=行列-行列、行列=行列-スカラーの場合)
Definition ArcsMatrix.hh:447
static constexpr void shiftup(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t m=1)
行列の各要素を上にm行分シフトする関数(下段の行はゼロになる)(引数渡し版)
Definition ArcsMatrix.hh:1431
constexpr ArcsMat(ArcsMat< M, N, T > &&right)
ムーブコンストラクタ(サイズと型が違う行列の場合, エラー検出用の定義)
Definition ArcsMatrix.hh:196
static constexpr ArcsMat< M, N, T > orderrow(const ArcsMat< M, N, T > &U, const ArcsMat< P, Q, R > &u)
並び替え指定縦ベクトルuが昇順になるように,行列Uの行を並び替える関数 (戻り値渡し版のみ)
Definition ArcsMatrix.hh:1190
static constexpr void Cholesky(const ArcsMat< M, N, T > &A, ArcsMat< ML, NL, TL > &R)
修正コレスキー分解(引数渡し版)
Definition ArcsMatrix.hh:2659
static constexpr ArcsMat< M, M, T > Householder(const ArcsMat< M, N, T > &v, const size_t k=1)
Householder行列を生成する関数(戻り値返し版)
Definition ArcsMatrix.hh:2440
static constexpr void concatv(const ArcsMat< M, N, T > &U1, const ArcsMat< P, Q, R > &U2, ArcsMat< D, E, F > &Y)
行列を縦に連結する関数(引数渡し版)
Definition ArcsMatrix.hh:1567
static constexpr void LDL(const ArcsMat< M, N, T > &A, ArcsMat< ML, NL, TL > &L, ArcsMat< MD, ND, TD > &D)
修正コレスキー分解(LDL分解) (引数渡し版)
Definition ArcsMatrix.hh:2615
static constexpr ArcsMat< M, N, T > setvvector(const ArcsMat< P, Q, R > &u, const size_t m, const size_t n, const ArcsMat< M, N, T > &U)
指定位置に縦ベクトルで上書きする関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1281
constexpr ArcsMat< M, N, T > operator^(const int &right) const
行列べき乗演算子(正方行列のべき乗)
Definition ArcsMatrix.hh:475
static constexpr void tp(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
転置行列を返す関数 (引数渡し版)
Definition ArcsMatrix.hh:2138
static constexpr std::tuple< ArcsMat< M, M, T >, ArcsMat< M, N, T >, ArcsMat< N, N, T > > SVD(const ArcsMat< M, N, T > &A)
SVD特異値分解(タプル返し版)
Definition ArcsMatrix.hh:2590
static constexpr void linsolve_mat(const ArcsMat< M, N, T > &A, const ArcsMat< MB, NB, TB > &B, ArcsMat< MX, NX, TX > &X)
AX = Bの形の線形方程式をxについて解く関数(正方行列A・行列X,B版) (内部用引数渡し版のみ)
Definition ArcsMatrix.hh:2731
constexpr ArcsMat< M, N, T > & operator*=(const R &right)
行列乗算代入演算子(行列=行列*行列、行列=行列*スカラーの場合)
Definition ArcsMatrix.hh:457
static constexpr void eig(const ArcsMat< M, N, T > &A, ArcsMat< MV, NV, TV > &v)
固有値を返す関数(引数渡し版)
Definition ArcsMatrix.hh:3077
static constexpr T min(const ArcsMat< M, N, T > &U)
行列要素の最小値を返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:1815
static constexpr std::tuple< size_t, size_t > minidx(const ArcsMat< M, N, T > &U)
行列要素の最小値の要素番号を返す関数(タプル返し版のみ)
Definition ArcsMatrix.hh:1790
static constexpr void inv(const ArcsMat< M, N, T > &A, ArcsMat< P, Q, R > &Y)
逆行列を返す関数(引数渡し版)
Definition ArcsMatrix.hh:2924
constexpr ArcsMat< M, N, T > & operator=(const ArcsMat< P, Q, R > &right)
行列代入演算子(サイズと型が違う行列の場合, エラー検出用の定義)
Definition ArcsMatrix.hh:281
constexpr ArcsMat< M, N, T > & operator/=(const R &right)
行列除算代入演算子(行列=行列/スカラーの場合)
Definition ArcsMatrix.hh:467
constexpr void FillAll(const R &u)
すべての要素を指定した値で埋める関数
Definition ArcsMatrix.hh:688
static constexpr ArcsMat< M, N, T > gettrilo(const ArcsMat< M, N, T > &U, const size_t m=1)
m行目を上端として左下の下三角部分のみを返す関数(上三角部分はゼロ)(戻り値渡し版)
Definition ArcsMatrix.hh:2282
constexpr void operator/(const ArcsMat< P, Q, R > &right) const
行列除算演算子(行列=行列/行列の場合)
Definition ArcsMatrix.hh:413
static constexpr ArcsMat< N, M, T > Htp(const ArcsMat< M, N, T > &U)
エルミート転置行列を返す関数 (戻り値渡し版)
Definition ArcsMatrix.hh:2170
static constexpr size_t rank(const ArcsMat< M, N, T > &A, const T eps=ArcsMat< M, N, T >::EPSILON)
行列の階数を返す関数(戻り値返し版のみ)
Definition ArcsMatrix.hh:2602
static constexpr void Hessenberg(const ArcsMat< M, N, T > &A, ArcsMat< MP, NP, TP > &P, ArcsMat< MH, NH, TH > &H)
Hessenberg分解(引数渡し版) 複素数の場合、この関数はMATLABとは異なる解を出力する。
Definition ArcsMatrix.hh:2979
constexpr ArcsMat< M, N, T > operator-(void) const
単項マイナス演算子
Definition ArcsMatrix.hh:302
constexpr ArcsMat< M, N, T > operator&(const ArcsMat< P, Q, R > &right) const
行列アダマール積演算子(行列の要素ごとの乗算)
Definition ArcsMatrix.hh:496
static constexpr ArcsMat< P, 1, T > getvvector(const ArcsMat< M, N, T > &U, const size_t m, const size_t n)
指定位置から縦ベクトルを抽出する関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1258
static constexpr void abs(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の絶対値を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:2045
constexpr const std::array< std::array< T, M >, N > & ReadOnlyRef(void) const
std:arrayの2次元配列データの読み込み専用の参照を返す関数
Definition ArcsMatrix.hh:774
static constexpr void linsolve_mat_nsqv(const ArcsMat< M, N, T > &A, const ArcsMat< MB, NB, TB > &B, ArcsMat< MX, NX, TX > &X)
AX = Bの形の線形方程式をxについて解く関数(非正方縦長行列A・行列X,B版) (内部用引数渡し版のみ)
Definition ArcsMatrix.hh:2792
static constexpr void getcolumn(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const size_t n)
指定した列から縦ベクトルとして抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:938
static constexpr void shiftleft(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t n=1)
行列の各要素を左にn列分シフトする関数(右段の列はゼロになる)(引数渡し版)
Definition ArcsMatrix.hh:1499
static constexpr void cross_mat(const ArcsMat< M, N, T > &L, const ArcsMat< MR, NR, TR > &R, ArcsMat< MY, NY, TY > &Y)
クロス積 行列版 (内部用引数渡し版のみ)
Definition ArcsMatrix.hh:3205
static constexpr ArcsMat< M, 1, TV > eig(const ArcsMat< M, N, T > &A)
固有値を返す関数(戻り値返し版)
Definition ArcsMatrix.hh:3094
constexpr void Get(T1 &u1, T2 &... u2)
行列要素から値を読み込む関数
Definition ArcsMatrix.hh:666
static constexpr void gettrilo(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t m=1)
m行目を上端として左下の下三角部分のみを返す関数(上三角部分はゼロ)(引数渡し版)
Definition ArcsMatrix.hh:2266
constexpr ArcsMat< M, N, T > operator-(const R &right) const
行列減算演算子(行列=行列-スカラーの場合)
Definition ArcsMatrix.hh:365
static constexpr ArcsMat< M, N, T > Cholesky(const ArcsMat< M, N, T > &A)
修正コレスキー分解(戻り値返し版)
Definition ArcsMatrix.hh:2674
static constexpr void Householder(const ArcsMat< M, N, T > &v, ArcsMat< MH, NH, TH > &H, const size_t k=1)
Householder行列を生成する関数(引数渡し版)
Definition ArcsMatrix.hh:2416
static constexpr void Htp(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
エルミート転置行列を返す関数 (引数渡し版)
Definition ArcsMatrix.hh:2161
static constexpr ArcsMat< M, N, T > tan(const ArcsMat< M, N, T > &U)
行列要素の正接関数を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1966
static constexpr ArcsMat< M, N, T > shiftleft(const ArcsMat< M, N, T > &U, const size_t n=1)
行列の各要素を左にn列分シフトする関数(右段の列はゼロになる)(戻り値渡し版)
Definition ArcsMatrix.hh:1521
static constexpr void Kron(const ArcsMat< M, N, T > &L, const ArcsMat< MR, NR, TR > &R, ArcsMat< MY, NY, TY > &Y)
クロネッカー積(引数渡し版)
Definition ArcsMatrix.hh:3147
static constexpr void concath(const ArcsMat< M, N, T > &U1, const ArcsMat< P, Q, R > &U2, ArcsMat< D, E, F > &Y)
行列を横に連結する関数(引数渡し版)
Definition ArcsMatrix.hh:1595
constexpr ArcsMat< M, N, T > operator+(const R &right) const
行列加算演算子(行列=行列+スカラーの場合)
Definition ArcsMatrix.hh:333
static constexpr void gettriup(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t n=1)
n列目を左端として右上の上三角部分のみを返す関数(下三角部分はゼロ)(引数渡し版)
Definition ArcsMatrix.hh:2238
static constexpr void setrow(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &u, const size_t m)
指定した行を横ベクトルで上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:1111
static constexpr ArcsMat< M, N, T > gettriup(const ArcsMat< M, N, T > &U, const size_t n=1)
n列目を左端として右上の上三角部分のみを返す関数(下三角部分はゼロ)(戻り値渡し版)
Definition ArcsMatrix.hh:2254
static constexpr ArcsMat< M, N, T > sign(const ArcsMat< M, N, T > &U)
行列要素の符号関数を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:2034
static constexpr ArcsMat< M, N, T > sqrt(const ArcsMat< M, N, T > &U)
行列要素の平方根を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:2012
constexpr ArcsMat< M, N, T > & operator=(const ArcsMat< M, N, T > &right)
行列代入演算子(サイズと型が同じ同士の行列の場合)
Definition ArcsMatrix.hh:268
static constexpr std::tuple< ArcsMat< M, N, T >, ArcsMat< M, N, T > > Schur(const ArcsMat< M, N, T > &A)
複素Schur分解(タプル返し版) この関数はMATLABとは異なる解を出力する、ただしもちろん、A = USU' は成立
Definition ArcsMatrix.hh:3066
static constexpr void QR(const ArcsMat< M, N, T > &A, ArcsMat< MQ, NQ, TQ > &Q, ArcsMat< MR, NR, TR > &R)
QR分解(引数渡し版) 注意:複素数で縦長行列の場合ではMATLABとは異なる解を出力する
Definition ArcsMatrix.hh:2453
static constexpr void getdiag(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const ssize_t k=0)
行列の対角要素を縦ベクトルとして取得する関数(引数渡し版)
Definition ArcsMatrix.hh:1695
static constexpr void imag(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
複素数行列要素の虚数部を取得する関数(引数渡し版)
Definition ArcsMatrix.hh:2099
static constexpr ArcsMat< P, Q, T > getsubmatrix(const ArcsMat< M, N, T > &U, const size_t m, const size_t n)
行列から指定位置の小行列を抽出する関数 (戻り値渡し版)
Definition ArcsMatrix.hh:1357
static constexpr void linsolve_vec_nsqv(const ArcsMat< M, N, T > &A, const ArcsMat< MB, NB, TB > &b, ArcsMat< MX, NX, TX > &x)
Ax = bの形の線形方程式をxについて解く関数(非正方縦長行列A・ベクトルx,b版) (内部用引数渡し版のみ)
Definition ArcsMatrix.hh:2754
static constexpr R norm(const ArcsMat< M, N, T > &U)
行列のノルムを返す関数(戻り値渡し版のみ)
Definition ArcsMatrix.hh:2195
static constexpr ArcsMat< M, N, T > eye(void)
n行n列の単位行列を返す関数
Definition ArcsMatrix.hh:910
static constexpr void SVD(const ArcsMat< M, N, T > &A, ArcsMat< MU, NU, TU > &U, ArcsMat< MS, NS, TS > &S, ArcsMat< MV, NV, TV > &V)
SVD特異値分解(引数渡し版) 注意:複素数で非正方行列の場合ではMATLABとは異なる解を出力する
Definition ArcsMatrix.hh:2526
constexpr ArcsMat< P, 1, T > GetVerticalVec(const size_t m, const size_t n) const
指定した先頭位置から縦ベクトルを抜き出して返す関数 (戻り値渡し版)
Definition ArcsMatrix.hh:799
constexpr ArcsMat< M, N, T > operator*(const R &right) const
行列乗算演算子(行列=行列*スカラーの場合)
Definition ArcsMatrix.hh:398
static constexpr ArcsMat< M, N, T > shiftup(const ArcsMat< M, N, T > &U, const size_t m=1)
行列の各要素を上にm行分シフトする関数(下段の行はゼロになる)(戻り値渡し版)
Definition ArcsMatrix.hh:1453
static constexpr ArcsMat< L, 1, T > getdiag(const ArcsMat< M, N, T > &U, const ssize_t k=0)
行列の対角要素を縦ベクトルとして取得する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1729
static constexpr void getrow(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y, const size_t m)
指定した行から横ベクトルとして抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:1092
constexpr ArcsMatrix::MatStatus GetStatus(void) const
行列の状態をそのまま返す関数
Definition ArcsMatrix.hh:762
static constexpr void vec(const ArcsMat< M, N, T > &U, ArcsMat< MY, NY, TY > &y)
vec作用素(行列→縦ベクトル) (引数渡し版)
Definition ArcsMatrix.hh:3257
static constexpr ArcsMat< M, N, T > cos(const ArcsMat< M, N, T > &U)
行列要素の余弦を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1942
static constexpr void cross(const ArcsMat< M, N, T > &L, const ArcsMat< MR, NR, TR > &R, ArcsMat< MY, NY, TY > &Y)
クロス積 (引数渡し版)
Definition ArcsMatrix.hh:3229
static constexpr ArcsMat< M, N, T > log10(const ArcsMat< M, N, T > &U)
行列要素の対数関数(底10版)を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1894
static constexpr void copymatrix(const ArcsMat< M, N, T > &U, const size_t m1, const size_t m2, const size_t n1, const size_t n2, ArcsMat< P, Q, R > &Y, const size_t my, const size_t ny)
行列Uから別の行列Yへ位置とサイズを指定してコピーする関数(引数渡し版のみ) 等価なMATLABコード: Y(my:my+(m2-m1), ny:ny+(n2-n1)) = U(m1:m2,...
Definition ArcsMatrix.hh:1405
static constexpr std::tuple< ArcsMat< M, N, T >, ArcsMat< M, N, T > > LU(const ArcsMat< M, N, T > &A)
LU分解の結果のみ返す関数(タプル返し版)
Definition ArcsMatrix.hh:2386
constexpr std::array< std::array< T, M >, N > GetData(void) const
std:arrayの2次元配列データをそのまま返す関数
Definition ArcsMatrix.hh:768
constexpr size_t GetWidth(void) const
行列の幅(列数)を返す関数
Definition ArcsMatrix.hh:621
constexpr size_t GetHeight(void) const
行列の高さ(行数)を返す関数
Definition ArcsMatrix.hh:615
static constexpr void eigvec(const ArcsMat< M, N, T > &A, ArcsMat< MV, NV, TV > &V, ArcsMat< MD, ND, TD > &D)
固有値を持つ対角行列Dと、各々の固有値に対応する固有ベクトルを持つ行列Vを返す関数(引数渡し版)
Definition ArcsMatrix.hh:3106
static constexpr ArcsMat< M, N, T > ramp(void)
単調増加の縦ベクトルを返す関数
Definition ArcsMatrix.hh:925
static constexpr ArcsMat< M, N, R > abs(const ArcsMat< M, N, T > &U)
行列要素の絶対値を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:2058
static constexpr ArcsMat< M, N, T > inv(const ArcsMat< M, N, T > &A)
逆行列を返す関数(戻り値返し版)
Definition ArcsMatrix.hh:2937
static constexpr ArcsMat< M, 1, T > getcolumn(const ArcsMat< M, N, T > &U, const size_t n)
指定した列から縦ベクトルとして抽出する関数 (戻り値渡し版)
Definition ArcsMatrix.hh:947
static constexpr void shiftright(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t n=1)
行列の各要素を右にn列分シフトする関数(左段の列はゼロになる)(引数渡し版)
Definition ArcsMatrix.hh:1533
static constexpr ArcsMat< M, N, T > sin(const ArcsMat< M, N, T > &U)
行列要素の正弦関数を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1918
constexpr T & operator()(const size_t m, const size_t n)
行列括弧演算子(行列の(m,n)要素に値を設定する。サイズチェック無し版)
Definition ArcsMatrix.hh:235
constexpr void ZeroingTriLo(const T eps=ArcsMat< M, N, T >::EPSILON)
下三角(主対角除く)に限定して、ゼロに近い要素を完全にゼロにする関数
Definition ArcsMatrix.hh:876
constexpr ArcsMat< M, N, T > operator+(const ArcsMat< P, Q, R > &right) const
行列加算演算子(行列=行列+行列の場合)
Definition ArcsMatrix.hh:316
static constexpr void ordercolumn_and_vec(ArcsMat< M, N, T > &UY, ArcsMat< P, Q, R > &uy)
並び替え指定横ベクトルuが昇順になるように,行列Uの列と指定横ベクトルの両方を並び替える関数 (引数渡し版のみ)
Definition ArcsMatrix.hh:1052
static constexpr ArcsMat< M, N, T > shiftright(const ArcsMat< M, N, T > &U, const size_t n=1)
行列の各要素を右にn列分シフトする関数(左段の列はゼロになる)(戻り値渡し版)
Definition ArcsMatrix.hh:1555
constexpr void StoreArray(std::array< std::array< R, P >, Q > &Array) const
行列を2次元std::array配列に書き込む関数
Definition ArcsMatrix.hh:753
static constexpr void setcolumn(ArcsMat< M, N, T > &UY, const ArcsMat< P, Q, R > &u, const size_t n)
指定した列を縦ベクトルで上書きする関数 (引数渡し版)
Definition ArcsMatrix.hh:957
static constexpr void tanh(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の双曲線正接関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:1977
static constexpr ArcsMat< M, N, T > tanh(const ArcsMat< M, N, T > &U)
行列要素の双曲線正接関数を計算する関数(戻り値渡し版)
Definition ArcsMatrix.hh:1990
constexpr ArcsMat(ArcsMat< M, N, T > &&right)
ムーブコンストラクタ
Definition ArcsMatrix.hh:186
static constexpr ArcsMat< N, M, T > pinv(const ArcsMat< M, N, T > &A)
Moore-Penroseの疑似逆行列を返す関数(戻り値返し版)
Definition ArcsMatrix.hh:2966
static constexpr void linsolve(const ArcsMat< M, N, T > &A, const ArcsMat< MB, NB, TB > &B, ArcsMat< MX, NX, TX > &X)
AX = Bの形の線形方程式をXについて解く関数(引数渡し版)
Definition ArcsMatrix.hh:2879
constexpr void Disp(const std::string &format) const
行列の要素を表示
Definition ArcsMatrix.hh:571
static constexpr void log10(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の対数関数(底10版)を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:1881
static constexpr void getsubmatrix(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y, const size_t m, const size_t n)
行列から指定位置の小行列を抽出する関数 (引数渡し版)
Definition ArcsMatrix.hh:1341
static constexpr void sumcolumn(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &y)
各列の総和を計算して横ベクトルを出力する関数 (引数渡し版)
Definition ArcsMatrix.hh:1067
static constexpr void cos(const ArcsMat< M, N, T > &U, ArcsMat< P, Q, R > &Y)
行列要素の余弦関数を計算する関数(引数渡し版)
Definition ArcsMatrix.hh:1929