MATLAB — создать переменную массива в цикле For и построить график

#matlab #plot

#matlab #построение графика

Вопрос:

Я предварю этот пост очевидным фактом, что я не очень разбираюсь в MATLAB, и этот пост может быть несколько запутанным. Любая помощь приветствуется!

Мне нужно хранить данные внутри двух параметров, но я не уверен, как это сделать. Количество значений «x» известно, но это значение, введенное пользователем, поэтому его нельзя жестко запрограммировать. То же, что и значения «y». Вот упрощенный пример того, что, я думаю, мне нужно (числа здесь жестко закодированы для примера).

Затем на конечном рисунке должно быть несколько графиков. Каждая переменная «x» — это ее собственный «вывод», который необходимо отобразить. В конце мне нужно «x» количество графиков, где «z» и «y» являются координатами (X, Y) для каждого графика «x» соответственно.

РЕДАКТИРОВАТЬ: обновленный пример кода.

 list = [.0025, .005, .0075];
x = input('How many? ');
y = linspace(2.4*10^9, 5.0*10^9, 1000);

z = zeros(x, length(y));

for i = x
    time = list(i)/(3*10^8);
    for j = y
        z(i,j) = (time * j);
    end
end

for i = x
    plot(z(i,j));
end
 

Я получаю следующую ошибку:

 Requested 3x2400000000 (53.6GB) array exceeds maximum array size preference. Creation of arrays greater
than this limit may take a long time and cause MATLAB to become unresponsive. See array size limit or
preference panel for more information.
 

Приведенный мной пример может быть совершенно неправильным, но я надеюсь, что я объяснил достаточно, чтобы кто-то мог оставить отзыв.

Комментарии:

1. Когда вы передаете plot матрицу, она отображает каждый столбец независимо. Может быть, это то, что вам нужно (ваш вопрос не совсем ясен)

2. Я обновил свой пример кода, надеюсь, он более понятен для того, чего я пытаюсь достичь.

Ответ №1:

Создайте z-массив заранее в соответствии с вашими потребностями: https://uk.mathworks.com/help/matlab/ref/zeros.html

Затем вы можете заполнить его z[x,y] = x y

HTH

Комментарии:

1. Я уже это сделал, но я получаю эту ошибку. «Запрошенный массив размером 3×2400000000 (53,6 ГБ) превышает предпочтительный максимальный размер массива». Но «x» равно 5, а «y» равно 1000.

2. Я мог бы представить, что есть проблема с синтаксическим анализом этой переменной. Не могли бы вы вставить весь свой код?

3. Не могли бы вы просто для целей тестирования попробовать: z = zeros(x, 1000); … по-видимому, linspace() cmd создает этот огромный массив, который на самом деле довольно странный. Просто хочу убедиться, что ошибка находится где-то в linspace cmd или нет. (у меня нет ноутбука с matlab — тогда я бы сделал это сам)