Как составить график в Matlab, если я не знаю конкретный размер массива? - PullRequest
1 голос
/ 23 февраля 2010

У меня есть код

function runTubulin()
  n = 10;
  for j = 1:n
      TubulinModel(); 
  end


plot(TubulinModel(), n);

Так что моя проблема в том, что TubulinModel имеет случайное количество выходов, поэтому я продолжаю получать

??? Ошибка при использовании ==> TubulinModel Too много выходных аргументов.

Ошибка в ==> runTubulin в 11 сюжет (TubulinModel (), n);

Есть ли способ построить данные, когда я не знаю размер массива?

Ответы [ 3 ]

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

Полученная ошибка (Too many output arguments) означает, что функция TubulinModel фактически не возвращает никаких выходных данных. Ожидается, что функция TubulinModel передаст как минимум один выходной аргумент для использования команды PLOT , что, по-видимому, не выполняется. Вы можете проверить это, попробовав следующее:

a = TubulinModel();  %# Place the output in a variable instead

Если это дает вам ошибку, то это означает, что вам придется изменить TubulinModel, чтобы он возвращал нужные вам данные или помещал эти данные в глобальную переменную, к которой вы можете обращаться за пределами функции и использовать для участок.

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

Ваш цикл, кажется, не делает ничего другого с функцией TublinModel на последующих итерациях. Кроме того, функция plot снова вызывает функцию, так же, как это делали циклы. Предполагая, что каждый цикл возвращает разные данные произвольной длины, вы можете сохранить каждый набор данных в массиве объектов, а затем выяснить, какие параметры использовать перед построением графика.

function runTubulin()

n = 10;
max_length = 0; max_pos = 0; max_neg = 0;
for j = 1:n
    data{j} = TublinModel();    % get your data, then characterize it
    if max(data(j)) > max_pos, max_pos = max(data(j)); end
    if max(-data(j)) > max_neg, max_neg = max(-data(j)); end
end

figure(1); % new axes
axis([0 10 -max_neg max_pos]); hold on; % scale the axis and freeze it
for j = 1:n
    plot(length(data(j)),data(j));
end

Надеюсь, это поможет!

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

Когда вы вызываете plot с двумя параметрами, первый будет данными оси X, а второй - данными оси Y. Это то, что вы намерены? Если вы хотите, чтобы TubulinModel() были данными оси Y, вы можете сделать plot(TubulinModel()). См. help plot для получения дополнительной информации.

Я не понимаю, почему вы вызываете TubulinModel() десять раз в цикле, прежде чем вызывать его одиннадцатый раз в plot?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...