Если данные в текстовом файле выглядят так (строки, разделенные пробелами):
x1 x2 x3 ...
Вы можете прочитать строки в массив ячеек, используя TEXTSCAN примерно так:
fid = fopen('file.txt','r');
A = textscan(fid,'%s');
fclose(fid);
A = A{:};
A теперь сохраняет строки в массиве ячеек: {'x1'; «Х2»; 'X3'; ...} . Теперь, чтобы сделать переменную из одной из этих строк и присвоить ей значение, я бы использовал ASSIGNIN :
assignin('base',A{1},[1 2; 1 2]);
Это создаст переменную x1 в базовой рабочей области и присвоит ей значение [1 2; 1 2] . Первый аргумент может быть либо «базовым», либо «вызывающим» для создания переменной либо в базовом рабочем пространстве MATLAB, либо в рабочем пространстве функции вызывающего. Вы должны повторить это для каждого имени строки в A , присвоив ему любое значение.
ДОПОЛНИТЕЛЬНЫЙ ВАРИАНТ:
Это альтернативный ответ на тот, который я дал вам выше. Приведенный выше ответ решает конкретную проблему, поднятую в вашем вопросе Этот ответ дает вам совершенно другой вариант - потенциально избегать того, что вы описали в своем вопросе, и надеюсь, вам будет легче ...
Если я понимаю вашу проблему, у вас в основном 256 матриц 2 на 2, и вы хотите случайным образом выбрать 30 из них. Каждая из этих матриц 2 на 2 звучит так, как будто она хранится в своей собственной переменной ( x1 до x256 ). Вместо этого я бы предложил хранить все 256 матриц в одной переменной в виде трехмерного массива:
xArray = zeros(2,2,256); % Initialize all matrices as [0 0; 0 0]
xArray(:,:,1) = [1 1; 2 2]; % This enters a value for the first matrix
или массив ячеек:
xArray = cell(1,256); % Initializes an empty array of cells
xArray{1} = [1 1; 2 2]; % Enters a value for the first matrix
Сначала вам нужно будет инициализировать все значения. Затем, если вы хотите случайным образом выбрать 30 значений, вы можете затем рандомизировать порядок третьего измерения массива 3-D или порядка массива ячеек, используя RANDPERM :
startOrder = 1:256; % The default order of the matrices
index = randperm(256); % Randomly order the numbers 1 to 256
xArray = xArray(:,:,index); % For a 3-d array
xArray = xArray(index); % For a cell array
Затем просто используйте первые 30 записей в xArray для своих расчетов (вместо отдельных переменных, как вы были раньше):
x = xArray(:,:,1); % Puts the first matrix from the 3-D array in x
x = xArray{1}; % Puts the first matrix from the cell array in x
Вы можете продолжать повторять использование RANDPERM для генерации новых рандомизированных массивов матриц. Если вам необходимо отслеживать, какие исходные матрицы вы используете, вы должны добавить эту строку после рандомизации xArray :
startOrder = startOrder(index);
Теперь записи startOrder сообщат вам исходную позицию, в которой была матрица. Например, если первая запись массива в startOrder равна 40, то матрица в первой позиция xArray изначально была 40-й матрицей, введенной вами при инициализации xArray .
Надеюсь, это поможет!