00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00037 #include <iostream>
00038
00040
00041 #include <qtensor/qtensor.h>
00042
00044
00045 int main ()
00046 {
00047
00048
00049 {
00050
00051 QTensorIndex i = 3, j = 2, k = 8, l = 3, m = 6;
00052 QTensor T( i * j.cov() * k );
00053
00054 double *data = T.getWriteData();
00055 for (int n=0; n<T.getDataSize(); n++)
00056 data[n] = n;
00057
00058 QTensor A = T;
00059 QTensor B = A.slice( i[1] & k.range(3,5) & k.range(0,2) & i[0] );
00060 QTensor C = B.transpose(k * j.cov() * i);
00061 QTensorIndex i1 = 2, j1 = 3, k1 = 7;
00062 QTensor D = C(i1 * j1.cov() * k1).slice(i1[1]);
00063 QTensor E = D.transpose(k1, j1.cov());
00064
00065
00066
00067
00068 std::cout << "E = D.transpose(k1, j1.cov()) = " << E << std::endl;
00069 }
00070
00071
00072 {
00073 QTensorIndex i1 = 2, j1 = 3, i2 = 2, j2 = 3;
00074 QTensor T( i1 * j1.cov() * i2 * j2);
00075
00076 double *data = T.getWriteData();
00077 for (int n=0; n<T.getDataSize(); n++)
00078 data[n] = n;
00079
00080 QTensor A = T(i1 * j1 * i1.cov() * j2);
00081 QTensor B = T(i1 * j1 * i2 * j1.cov());
00082 QTensor C = T(i1 * j1 * i1.cov() * j1.cov());
00083
00084 std::cout << "T = " << T << std::endl;
00085 std::cout << "A = T(i * j * i.cov() * l) = " << A << std::endl;
00086 std::cout << "B = T(i * j * k * j.cov()) = " << B << std::endl;
00087 std::cout << "C = T(i * j * i.cov() * j.cov()) = " << C << std::endl;
00088 }
00089
00090
00091 {
00092 QTensorIndex i = 30, j = 16, k = 30;
00093 QTensor T1(j*i);
00094 QTensor T2(j.cov()*k);
00095
00096 double *data1 = T1.getWriteData();
00097 for (int n=0; n<T1.getDataSize(); n++)
00098 data1[n] = n;
00099
00100 double *data2 = T2.getWriteData();
00101 for (int n=0; n<T2.getDataSize(); n++)
00102 data2[n] = n;
00103
00104
00105
00106
00107
00108 {
00109
00110 QTensor Y2 = T1 * T2;
00111
00112
00113
00114 }
00115 }
00116
00117 }