Как преобразовать вывод MATLAB в массив? - PullRequest
0 голосов
/ 23 февраля 2010

Я создал M-файл, который выводит данные в мое командное окно MATLAB в форме ниже (я удалил лишние пробелы). Есть ли простой способ преобразовать этот вывод в массив, без необходимости вводить все данные в редактор массива, как я сейчас делаю? (Или даже запустить его прямо из M-файла в массив?)

T =    0.3000
price =   24.8020

T =    0.4000
price =   28.3453

T =    0.5000
price =   31.3934

T =    0.6000
price =   34.0880

Ответы [ 3 ]

1 голос
/ 23 февраля 2010

Организуйте свои данные в массивы. Например:

T=0.3:0.1:0.6;
Price=yourfunction(T);

Тогда, если вам нужна цена против графика T,

plot(T,Price)

Если у вас большой объем данных, старайтесь избегать циклов for, так как они медленнее, чем векторизованный код.

1 голос
/ 23 февраля 2010

В какой-то момент в вашем M-файле вы печатаете каждую строку данных в командном окне, предположительно используя DISP или FPRINTF . Вы можете заменить эту строку следующим:

data = [data; T price];

Где T и price - переменные, содержащие ваши данные. Каждый раз, когда вы вызываете вышеуказанную строку (скажем, в цикле), она добавляет ваши данные как новую строку в переменную data. В какой-то момент в начале вашего M-файла вы должны будете добавить следующую инициализацию:

data = [];  %# An empty array

Добавление значений в массив, подобный этому, иногда может быть неэффективным, поэтому, если вы заранее знаете, сколько строк данных вы соберете, вы можете вместо этого предварительно выделить data с заданным размером. Например, если вы знаете, что у вас будет 4 пары значений для T и price, вы можете инициализировать data следующим образом:

data = zeros(4,2);  %# A 4-by-2 array of zeroes

Затем, когда вы добавляете данные в массив, вы вместо этого делаете следующее:

data(i,:) = [T price];  %# Fill row i with data

Еще одна проблема, которую стоит рассмотреть, - это ли ваш M-файл script или function . M-файл функции имеет строку типа function output = file_name(input) вверху, а M-файл скрипта - нет. Запуск M-файла сценария эквивалентен вводу всего содержимого файла непосредственно в командное окно MATLAB, поэтому все переменные, созданные в M-файле, доступны в рабочей области.

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

function data = your_file

где your_file - имя M-файла, а data - возвращаемая переменная. Когда вы вызываете эту функцию из рабочей области, вам нужно будет записать вывод в переменную:

outputData = your_file();

Теперь у вас есть содержимое переменной data из your_file, сохраненное как новая переменная outputData в рабочей области.

0 голосов
/ 23 февраля 2010

Почему вы распечатываете данные, а не собираете их в массив?

M = [];
for ...
   M(end+1, :) = [T, price];
end;

или, идиоматически,

M = 0.3:0.1:0.6; % or whatever your T values should be
M = [M' (M'.^2)] % replace the .^2 by your price function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...