2016-06-27 3 views
1

Я установил Matlab 2014 в Ubuntu. Моя проблема: Я создаю несколько входных файлов для другой программы Quantum Espresso в Matlab. Теперь я должен передать эти файлы в Quantum Espresso, используя командную строку matlab. Теперь я знаю, что могу сделать это с помощью Linux Terminal, но мой способ решения моей проблемы достиг того, что мой единственный вариант - «вызов Quantum Espresso из matlab». Один единственный вызов на самом деле легко:вызов внешней программы в matlab в цикле

! installation/folder/espresso-5.3.0/bin/pw.x <inputfile> outputfile 

Проблема в том, у меня есть несколько входных файлов с именами, как 1name.in 1name.in .... Поэтому повторные вызовы должны выполняться в цикле. Но как?

Я пробовал: сценарий оболочки для зацикливания файлов. Я добавил, что дополнительные '!' для каждой строки скрипта, но он не работает. Я также попытался написать цикл, как это:

for i = 1:N 

prefix = int2str(i); 
fuloutname = [prefix 'name' '.' 'out']; 
fulinname = [prefix 'name' '.' 'in']; 
! adress/espresso-5.3.0/bin/pw.x <fulinname> fuloutname ; 

end 

В которой «N» в число моих входных файлов. Ясно, что это означает, что вы передаете файл nemaed 'fulinname' not 1name.in и приведете к выходному файлу с именем 'fuloutname'

Я также попытался сделать это, поскольку вы обычно загружаете различные файлы в цикл, но это также не работает

Пожалуйста, помогите мне.

+1

Вы должны использовать 'unix' функцию' МояКоманда = «mycall'' и' UNIX (МояКоманда) ' – obchardon

+0

@obchardon Должен ли я использовать его как:' command1 = 'для значения в $ 1 * .in'' ... а затем 'unix (command1)'? Это приводит к ошибке: '/ bin/bash: -c: строка 1: синтаксическая ошибка: неожиданный конец файла –

+0

переместил ее из ответа - @ fb.researcher - попробуйте в matlab'! 'Плюс строку. Я действительно верю, что @obchardon правильно ответил на вопрос. – bdecaf

ответ

1

Вы должны использовать unix функцию:

for i = 1:N 

prefix = int2str(i); 
fuloutname = [prefix 'name' '.' 'out']; 
fulinname = [prefix 'name' '.' 'in']; 
mycommand = ['adress/espresso-5.3.0/bin/pw.x < ',fulinname,' > ',fuloutname]; 
unix(mycommand); 
%system(mycommand); %will give you the same, result and this function is cross-platform 

end 
+0

, но я думаю, что команда 'system' будет эквивалентна'! '. (он также работает на выигрыш) – bdecaf

+0

'unix' будет работать на unix-машине,' dos' для Windows-машины и 'system' для обеих машин. Так что да, он даст точный результат. – obchardon

+0

@obchardon Результатом является 'STOP 1', когда он достигает строки' unix (mycommand); ' –

Смежные вопросы