Чтение входного m-файла в главном m-файле - PullRequest
3 голосов
/ 09 октября 2008

Алло, У меня есть вопрос о MATLAB Я не имею опыта в Matlab, и я хотел бы сказать мне, если у меня есть входной файл (m-файл), который содержит некоторые переменные с их номерами, т.е. файл в другой программе (основной m-файл), которая использует эти переменные для вычисления S = a + b + c. Как в основном файле я могу прочитать входной файл? Какие команды я должен использовать? Какой должна быть первая строка? Предположим, что входной файл называется INP, а основной - MAIN. Спасибо!

Ответы [ 6 ]

6 голосов
/ 09 октября 2008

Обычно это не очень хорошая практика в MATLAB. Файл, содержащий входные переменные, в вашем примере будет скриптом. Как и ваш основной файл. MATLAB не выдает ошибку при запуске одного скрипта из другого, как предлагает ScottieT812, но при определенных обстоятельствах могут возникнуть странные ошибки. (При компиляции во время выполнения возникают трудности, конфликты имен переменных в сценариях)

Лучший вариант - превратить скрипт ввода в функцию, которая возвращает интересующие переменные

function [a,b c] = inputs
a = 5;
b = 6;
c = 7;

Затем эту функцию можно вызвать в сценарии main.m.

% main.m
[a,b,c] = inputs;
s = a+b+c;
3 голосов
/ 10 декабря 2008

Для такого рода вещей (параметры, которые легко настраиваются позже), я почти всегда использую структуры:

function S = zark
    S.wheels = 24;
    S.mpg = 13.2;
    S.name = 'magic bus';
    S.transfer_fcn = @(x) x+7;
    S.K = [1 2; -2 1];

Тогда вы можете вернуть много данных без необходимости делать что-то вроде [a, b, c, d, e, f] = some_function;

Одна приятная вещь о структурах - вы можете обращаться к ним динамически:

>> f = 'wheels';
>> S.(f)

ans =

    24
2 голосов
/ 11 октября 2008

Звучит так, как будто вы хотите иметь некоторую глобальную информацию о конфигурации, которая используется скриптами. Часто гораздо лучше создавать функции и передавать значения в качестве аргументов, но иногда имеет смысл делать все так, как вы предлагаете. Один из способов сделать это - сохранить информацию в файл. Смотрите "загрузить" и "сохранить" в документации Matlab.

2 голосов
/ 09 октября 2008

Если ваш «входной» файл является m-файлом, просто используйте имя файла в вашем «основном» m-файле. Например, у вас может быть файл с именем input.m, который выглядит следующим образом:

% File: inputs.m
a = 5;
b = 6;
c = 7;

Затем вы можете использовать его в файле main.m следующим образом:

% File: main.m
inputs;
S = a + b + c;
0 голосов
/ 21 ноября 2008

Если скрипт данных является просто скриптом, вы можете вызвать его непосредственно из функции или другого скрипта. Не требуются дополнительные команды. Например:

%mydata.m
a = 1;
b = 2;


%mymain.m
mydata
whos
mymain

>> mymain
Имя Размер Байты Атрибуты класса

1x1 8 двойной
б 1х1 8 двойной

Это также работает для функций в дополнение к сценариям

% foo.m
функция Foo MYDATA
* 1015 Whos * >> foo

Имя Размер Байты Атрибуты класса

1x1 8 двойной
б 1х1 8 двойной

Как правило, для такого рода вещей предпочтительно использовать MAT или другой файл данных.

0 голосов
/ 10 октября 2008

Я столкнулся с точной проблемой KennyMorton , упомянутой при попытке создать скомпилированные во время выполнения версии программного обеспечения MATLAB для моей работы Программное обеспечение широко использует m-файлы для передачи аргументов между функциями. Кроме того, мы создаем эти m-файлы динамически, с которыми развернутая версия MATLAB не подходит. Наш обходной путь был:

  • сохранить параметры в файл без расширения .m
  • читать и оценивать содержимое файла

Итак, чтобы следовать примеру OP, в функции мы создали бы текстовый файл INP, содержащий наши параметры. Мы создаем этот файл в каталоге, возвращаемом функцией ctfroot . Затем в MAIN мы использовали бы следующее для получения этих параметров:

eval(char(textread(fullfile(ctfroot, INP), '%s', 'whitespace', '');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...