У меня есть проблема математического контроля, которую я решаю с помощью обратной индукции. Математическая проблема заключается в следующем:
с K меньше, чем n.
И окончательные условия
Что такое J (0,0,0)?
Для этой цели я использую c ++ и 32-битную версию mingw в качестве компилятора.
Проблема заключается в коде (ниже), который решает проблему как индукцию и не дает никаких результатов, если n, M> 15.
Я пытался запустить n = M = 100 в течение 4 дней, но безрезультатно.
У кого-нибудь есть решение? Это опция компилятора для изменения (недостаточно памяти процессора)? Сложность слишком большая?
Вот мой код
const int n = 10;
const int M = 10;
double J_naive (double K, double Z, double W)
{
double J_tmp = exp(100.0);
double WGreaterThanZero = 0.0;
//Final condition : Boundaries
if (K == n)
{
if (W > 0) WGreaterThanZero = 1.0;
else WGreaterThanZero = 0.0;
if (Z >= WGreaterThanZero) return 0.0;
return exp(100.0);//Infinity
}
//Induction
else if (K < n)
{
double y;
for (int i = 0; i <= M; i++)
{
y = ((double) i)/M;
{
J_tmp = std::min (J_tmp, ((double) n)*y*y +
0.5*J_naive(K+1.0, Z+y, W + 1.0/sqrt(n)) +
0.5*J_naive(K+1.0, Z+y, W - 1.0/sqrt(n)) );
}
}
}
return J_tmp;
}
int main()
{
J_naive(0.0, 0.0, 0.0);
}