Проблема реализации рекурсивной параллели для Loop Pari версии 2.11.1 Win64 - PullRequest
0 голосов
/ 21 января 2019

У меня есть квадратное уравнение, генерирующее 2 решения x1, x2, и каждое решение снова генерирует два новых решения.Это продолжается до бесконечности.

Я пытался реализовать это, используя подпрограмму с вектором r = [x1, x2] в качестве входного параметра.И используйте параллельный цикл for для вычисления следующих 2.

К сожалению, цикл продолжает выполнять только первое решение r [].

Код выглядит следующим образом:

r=[1,2];
axyz=fileopen("myfile","w");
test(r)={
 parfor(i=1,2,r[i],c,
  if(c<>1,filewrite(axyz,c); 
   test([x1(c),x2(c)]))
 );
}

test(r);
Оператор IF должен предотвращать сохранение решения, когда оно является единичным.Запись в файл не требуется и может быть заменена отпечатком.

Вопрос: Можно ли убедиться, что второе решение также обрабатывается?Так что функция расширяется в бесконечное дерево решений, порождающее все решения.

1 Ответ

0 голосов
/ 23 января 2019

Использование parfor не приведет к тому, что вы хотите.Я бы предложил использовать поиск в глубину.Ваш код неполон (отсутствуют определения для x1, x2), поэтому следующее не проверено - предназначено для отображения необходимых изменений.

r=[1,2];
axyz=fileopen("myfile","w");
test(r,level)={
for(i=1,2,my(c=r[i]);
   if(c<>1,if(level==0, filewrite(axyz,c),
   test([x1(c),x2(c)], level-1))
 );
}
for(level=0, oo, test(r, level));
...