При создании матрицы я получаю сообщение об ошибке «Индекс превышает размеры матрицы»

#matlab #matrix

#matlab #матрица

Вопрос:

Я хотел создать с каждым вектором матрицу V, но я получаю эту ошибку Индекс превышает размеры матрицы. Я не понимаю, почему это не должно работать, я что-то упускаю?

 x1=[1 2 3];
x2=[1 4 3];
x3=[1 5 3];
x4=[1 6 3];
x=[];
V=[];    


for i=1:1:4
         V=[ones(size(x(i))) x(i)]
end

v =

     []


V =

     []

Index exceeds matrix dimensions.
  

Ответ №1:

Чего вы пытаетесь достичь?

В вашем цикле for ваш индекс i изменяется от 1 до 4 включительно. Тем не менее, вы пытаетесь получить доступ к x (i), где x — пустой массив. Следовательно, на вашей первой итерации (i = 1) вы получаете доступ к x(1), который не определен. Это приводит к ошибке выхода индекса за пределы.

Также для использования функции ones() вы должны разделять входные аргументы запятой: ones(size(x(i)), x(i))

Пример кода

 x = [1 2 3; 1 4 3; 1 5 3; 1 6 3];
V = zeros(size(x, 1), 1);  % initialize V
for i = 1:1:size(x, 1)
    V(i) = x(i, 1);
end
  

Этот пример возвращает вектор первых элементов из каждой строки вашей матрицы x.

 V = [1; 1; 1; 1]
  

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

1. Я пытаюсь создать матрицу с каждым вектором, выглядящим следующим образом V = 1 1 1 1 2 3 и так далее, поэтому в цикле должен быть доступ к x1, x2, x3, x4, поэтому i должен быть индексом, и именно поэтому я написал его таким образом x (i)

2. Ага, понятно. Проблема в том, что x(i) обращается к элементам переменной x. Если вы хотите выполнить итерацию по разным векторам, я рекомендую вам построить матрицу x = [x1; x2; x3; x4] и выполнить итерацию по ее строкам x(i, :) for i=1:1:4 .

3. Пожалуйста! Я добавил пример в код. Если мой ответ вам помог, пожалуйста, не забудьте принять его 🙂

4. Я принял это, но мне было интересно, как сохранить все выходные данные этого цикла, потому что даже вы написали V(i) .. это просто сохраняет один вектор

5. Зависит от того, каким должен быть ваш вывод. В вашем коде вы перезаписываете V на каждой итерации. Если вы хотите сохранить его постоянно, вы можете итеративно заполнить матрицу, которую вы инициализируете заранее, как я сделал в своем примере.