c++ - C++中长表达式的优化

标签 c++ optimization wolfram-mathematica

我有一个关于 C/C++ 中的长表达式的问题。所以我计算了我代码中需要的矩阵的封闭形式。它是一个对称的 6x6 矩阵。所以基本上我想这样做

void calcMat(double * Mat, const double * S, const double * F, const double * tau, const double * D, const double * G)
{
   //ReadIn all data from the given Arrays into const double's
   const double G1 = G[0]; const double G2 = G[1]; const double G3 = G[2];

   const double F11 = F[0]; const double F12 = F[1]; const double F13 = F[2];
   const double F21 = F[3]; const double F22 = F[4]; const double F23 = F[5];
   const double F31 = F[6]; const double F32 = F[7]; const double F33 = F[8];

   const double sq2 = SQRT2 * 0.5;
   const double S11 = S[0]; const double S12 = sq2 * S[3]; const double S13 = sq2 * S[5];
   const double S22 = S[1]; const double S23 = sq2 * S[4];
   const double S33 = S[2];

   const double t11 = tau[0];
   const double t22 = tau[4];
   const double t33 = tau[8];
   const double t12 = tau[1];
   const double t23 = tau[5];
   const double t13 = tau[2];

   const double Sqr2I = 1. / sqrt(2.);
   const double D1111 = D[0]; const double D1122 = D[1]; const double D1133 = D[2]; const double D1112 = Sqr2I * D[3]; const double D1123 = Sqr2I * D[4]; const double D1113 = Sqr2I * D[5];
   const double D2222 = D[7]; const double D2233 = D[8]; const double D1222 = Sqr2I * D[9]; const double D2223 = Sqr2I*D[10]; const double D1322 = Sqr2I*D[11];
   const double D3333 = D[14]; const double D1233 = Sqr2I * D[15]; 
   const double D2333 = Sqr2I * D[16]; const double D1333 = Sqr2I * D[17];
   const double D1212 = 0.5 * D[21]; const double D1223 = 0.5 * D[22]; 
   const double D1213 = D[23];
   const double D2323 = 0.5 * D[28]; const double D1323 = 0.5 * D[29];
   const double D1313 = 0.5 * D[35];

   //Build Matrix first entry
   Mat[0] += (D1112*F11*G1*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1212*F12*G1*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1213*F13*G1*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1122*F11*G2*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1222*F12*G2*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1322*F13*G2*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1123*F11*G3*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1223*F12*G3*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1323*F13*G3*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1111*F11*G1*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1112*F12*G1*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1113*F13*G1*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1112*F11*G2*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1212*F12*G2*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1213*F13*G2*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1113*F11*G3*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1213*F12*G3*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1313*F13*G3*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1113*F11*G1*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1213*F12*G1*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1313*F13*G1*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1123*F11*G2*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1223*F12*G2*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1323*F13*G2*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1133*F11*G3*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1233*F12*G3*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1333*F13*G3*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)));
   //other terms in a similar fashion
}

我可以复制并粘贴所有 += 计算,当我使用 g++ 和 -O0 编译时效果很好。但是当我启用 -O2 时,编译会花费非常长的时间,而且我经常会在某些机器上耗尽内存。我的问题是:在它自己的范围内定义每个矩阵条目然后添加进去是否有帮助,比如

void calcMat(double * Mat, other InputArrays)
{
   //ReadIn all data from the given Arrays into const double's
   //as shown above 
   //Build Matrix
   {
     const double Mat0 = (D1112*F11*G1*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1212*F12*G1*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1213*F13*G1*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1122*F11*G2*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1222*F12*G2*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1322*F13*G2*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1123*F11*G3*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1223*F12*G3*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1323*F13*G3*(F12*F12*S12*t11 + F13*F22*S13*t12 + F13*F32*S13*t13 + F11*S11*(F12*t11 + F22*t12 + F32*t13) +
     F12*(F13*S13*t11 + F21*S11*t12 + 2*F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + 2*F32*S12*t13 + F33*S13*t13) + F21*F22*S11*t22 + F22*F22*S12*t22 + F22*F23*S13*t22 + F22*F31*S11*t23 +
     F21*F32*S11*t23 + 2*F22*F32*S12*t23 + F23*F32*S13*t23 + F22*F33*S13*t23 + F32*(F31*S11 + F32*S12 + F33*S13)*t33) +
  D1111*F11*G1*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1112*F12*G1*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1113*F13*G1*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1112*F11*G2*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1212*F12*G2*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1213*F13*G2*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1113*F11*G3*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1213*F12*G3*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1313*F13*G3*(F11*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F21*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F31*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1113*F11*G1*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1213*F12*G1*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1313*F13*G1*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1123*F11*G2*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1223*F12*G2*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1323*F13*G2*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1133*F11*G3*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1233*F12*G3*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)) +
  D1333*F13*G3*(F13*(F11*S11*t11 + F12*S12*t11 + F13*S13*t11 + F21*S11*t12 + F22*S12*t12 + F23*S13*t12 + F31*S11*t13 + F32*S12*t13 + F33*S13*t13) +
     F23*(F11*S11*t12 + F12*S12*t12 + F13*S13*t12 + F21*S11*t22 + F22*S12*t22 + F23*S13*t22 + F31*S11*t23 + F32*S12*t23 + F33*S13*t23) +
     F33*(F11*S11*t13 + F12*S12*t13 + F13*S13*t13 + F21*S11*t23 + F22*S12*t23 + F23*S13*t23 + F31*S11*t33 + F32*S12*t33 + F33*S13*t33)));
     Mat[0] += Mat0;
   } 
   ...
}

或者是否有任何其他方法可以帮助编译器解析巨大的表达式?

最佳答案

在结束之前,让我先给你一个开场白。

如果您只有表达式而没有算法,以及它是如何构建的,您仍然可以进行一些优化。我将您的 Mat[0] 大表达式放入 Mathematica 中的一个变量中。我们用来优化常用表达式的函数在这里

Experimental`OptimizeExpression[{x^2 Sin[x^2]}]
(*
Experimental`OptimizedExpression[
 Block[{Compile`$125}, 
  Compile`$125 = x^2; {Compile`$125 Sin[Compile`$125]}]]
*)

希望我们可以 (a) 使您的表达式更小,并且 (b) 使编译器更容易,因为它可能能够比大表达式更好地优化语句。

我们已经可以看到优化后的表达式(即使有所有新的临时变量)将比您现在拥有的小 6 倍:

ByteCount[expr]
Experimental`OptimizeExpression[{expr}] // ByteCount

Out[560]= 64624

Out[561]= 11752

让我们尝试将优化后的表达式转换为 C 代码。

<< CCodeGenerator`
opt = Experimental`OptimizeExpression[{expr}];
vars = # -> ToString[#] & /@ DeleteDuplicates[Cases[expr, _Symbol, Infinity]]

vars 是一个替换列表,它对 var -> "var" 形式的大型表达式中的每个变量都有一个规则。稍后我们需要它来创建 C 代码字符串。如果查看优化后的表达式,您会发现它包含一个带有变量定义的 Block 和一个发生所有操作的正文中的 CompoundExpression

首先,我们会将所有赋值转换为有效的 c 声明并制作一个 c block 。

expr1 = opt /. CompoundExpression :> List /. 
       HoldPattern[Block[_, body_]] :> CBlock[body] /. 
      HoldPattern[Set[lhs_, rhs_]] :> 
       CDeclare["const double", CAssign[lhs, rhs]] /. {final_} :> 
      CAssign["Mat[0]", final] /. repl /. vars // First

在此之后,我们有很多形式的东西

CDeclare["const double", CAssign["tmp55", "F22" "S12" "t23"]]

需要注意的重要一点是运算(如此处“F22”、“S12”和“t23”的乘法)仍然存在。这些也需要被有效的 c 操作替换。

expr2 = expr1 //. {(h : (Times | Plus))[a__] :> COperator[h, {a}],
   Power[a_, b_] :> CCall["pow", {a, b}]}

现在,当结构正确时,您可以将其转换为可读的 C 代码

ToCCodeString @@ expr2 

请注意,我尚未验证我所做的所有事情都是正确的。我什至不会用这些替换来实现它,但我只是试了一下,想了想,我也可以发布它。创建的代码在本质上反射(reflect)了 Mathematica 编译器也会做的事情。也许它有帮助:

const double tmp1 = pow(F12, 2);
const double tmp2 = S12 * t11 * tmp1;
const double tmp3 = F13 * F22 * S13 * t12;
const double tmp4 = F13 * F32 * S13 * t13;
const double tmp5 = F12 * t11;
const double tmp6 = F22 * t12;
const double tmp7 = F32 * t13;
const double tmp8 = tmp5 + tmp6 + tmp7;
const double tmp9 = F11 * S11 * tmp8;
const double tmp10 = F13 * S13 * t11;
const double tmp11 = F21 * S11 * t12;
const double tmp12 = 2 * F22 * S12 * t12;
const double tmp13 = F23 * S13 * t12;
const double tmp14 = F31 * S11 * t13;
const double tmp15 = 2 * F32 * S12 * t13;
const double tmp16 = F33 * S13 * t13;
const double tmp17 = tmp10 + tmp11 + tmp12 + tmp13 + tmp14 + tmp15 + tmp16;
const double tmp18 = F12 * tmp17;
const double tmp19 = F21 * F22 * S11 * t22;
const double tmp20 = pow(F22, 2);
const double tmp21 = S12 * t22 * tmp20;
const double tmp22 = F22 * F23 * S13 * t22;
const double tmp23 = F22 * F31 * S11 * t23;
const double tmp24 = F21 * F32 * S11 * t23;
const double tmp25 = 2 * F22 * F32 * S12 * t23;
const double tmp26 = F23 * F32 * S13 * t23;
const double tmp27 = F22 * F33 * S13 * t23;
const double tmp28 = F31 * S11;
const double tmp29 = F32 * S12;
const double tmp30 = F33 * S13;
const double tmp31 = tmp28 + tmp29 + tmp30;
const double tmp32 = F32 * t33 * tmp31;
const double tmp33 = tmp18 + tmp19 + tmp2 + tmp21 + tmp22 + tmp23 + tmp24 + tmp25 + tmp26 + tmp27 + tmp3 + tmp32 + tmp4 + tmp9;
const double tmp34 = F11 * S11 * t11;
const double tmp35 = F12 * S12 * t11;
const double tmp36 = F22 * S12 * t12;
const double tmp37 = F32 * S12 * t13;
const double tmp38 = tmp10 + tmp11 + tmp13 + tmp14 + tmp16 + tmp34 + tmp35 + tmp36 + tmp37;
const double tmp39 = F11 * tmp38;
const double tmp40 = F11 * S11 * t12;
const double tmp41 = F12 * S12 * t12;
const double tmp42 = F13 * S13 * t12;
const double tmp43 = F21 * S11 * t22;
const double tmp44 = F22 * S12 * t22;
const double tmp45 = F23 * S13 * t22;
const double tmp46 = F31 * S11 * t23;
const double tmp47 = F32 * S12 * t23;
const double tmp48 = F33 * S13 * t23;
const double tmp49 = tmp40 + tmp41 + tmp42 + tmp43 + tmp44 + tmp45 + tmp46 + tmp47 + tmp48;
const double tmp50 = F21 * tmp49;
const double tmp51 = F11 * S11 * t13;
const double tmp52 = F12 * S12 * t13;
const double tmp53 = F13 * S13 * t13;
const double tmp54 = F21 * S11 * t23;
const double tmp55 = F22 * S12 * t23;
const double tmp56 = F23 * S13 * t23;
const double tmp57 = F31 * S11 * t33;
const double tmp58 = F32 * S12 * t33;
const double tmp59 = F33 * S13 * t33;
const double tmp60 = tmp51 + tmp52 + tmp53 + tmp54 + tmp55 + tmp56 + tmp57 + tmp58 + tmp59;
const double tmp61 = F31 * tmp60;
const double tmp62 = tmp39 + tmp50 + tmp61;
const double tmp63 = F13 * tmp38;
const double tmp64 = F23 * tmp49;
const double tmp65 = F33 * tmp60;
const double tmp66 = tmp63 + tmp64 + tmp65;
Mat[0] = D1112 * F11 * G1 * tmp33 + D1212 * F12 * G1 * tmp33 + D1213 * F13 * G1 * tmp33 + D1122 * F11 * G2 * tmp33 + D1222 * F12 * G2 * tmp33 + D1322 * F13 * G2 * tmp33 + D1123 * F11 * G3 * tmp33 + D1223 * F12 * G3 * tmp33 + D1323 * F13 * G3 * tmp33 + D1111 * F11 * G1 * tmp62 + D1112 * F12 * G1 * tmp62 + D1113 * F13 * G1 * tmp62 + D1112 * F11 * G2 * tmp62 + D1212 * F12 * G2 * tmp62 + D1213 * F13 * G2 * tmp62 + D1113 * F11 * G3 * tmp62 + D1213 * F12 * G3 * tmp62 + D1313 * F13 * G3 * tmp62 + D1113 * F11 * G1 * tmp66 + D1213 * F12 * G1 * tmp66 + D1313 * F13 * G1 * tmp66 + D1123 * F11 * G2 * tmp66 + D1223 * F12 * G2 * tmp66 + D1323 * F13 * G2 * tmp66 + D1133 * F11 * G3 * tmp66 + D1233 * F12 * G3 * tmp66 + D1333 * F13 * G3 * tmp66;

关于c++ - C++中长表达式的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48568021/

相关文章:

c++ - 如何重载具有多个参数的运算符,如 a + b + c?

c++ - 如何将此嵌套迭代转换为递归解决方案?

python - 优化生成变量的拒绝方法

python - Python 中的二维优化(最小化)(使用 scipy.optimize)

image-processing - 选择矩阵中感兴趣区域中的数据(使用 Mathematica)

java - 用于大输出的 Java 高级文本记录 Pane

c++ - 全局新运算符调用语法

c++ - 键盘有一些问题

开发中的 Rails 3 优化工具?

wolfram-mathematica - matlab 喜欢 Mathematica 中的多线图