Вы получаете эту ошибку из MATLAB, поскольку, как natan намекнул вам в своем первом комментарии, вы не инициализировать переменную et1 (или может быть, вы сделали, но с неправильным размером). В вашей строке:
et1 (:, n) = 0;
Matlab не может знать о том, сколько строк он должен применить команду (это Nth столбец из et1) = 0.
Простой способ решить это предварительно инициализировать переменный перед FOR цикла (и если вы знаете размер заранее, это также хорошая практика в любом случае, MATLAB быстрее этот путь). Поэтому, прежде чем ваш двойной для петли, вставить что-то вроде:
nColumn = 20 ;
et1 = zeros(length(t) , nColumn) ;
Этот путь не более индексируются размер назначение несовпадение ошибка, и вы также можете избавиться от выражения et1 (:, п) = 0 ; в вашей петле, потому что все элементы et1 уже инициализированы 0.
Затем по вашим расчетам. В вашей самой внутренней петле вы вычисляете выражение для et2
пять раз (для m
= от 1 до 5), но каждый раз, когда вы записываете результат в том же месте (столбец Nth et2
). В результате вы сохраните только последний расчет (для m
= 5) в колонке et2
.
Если вы хотите сохранить результат выражения для каждого из пяти значений m
, вам нужно будет добавить измерение к своей матрице.
Однако, если et2
был предназначен только для временного использования, чтобы добавить его результат для каждого значения m
в столбец et1
, то вы можете полностью избавиться от него (или просто использовать временный вектор столбца).
Если я правильно понял ваш код и ваше намерение, то следующий код должен работать для вас:
//% initialize your matrix
nColumn = 20 ;
et1 = zeros(length(t) , nColumn) ;
et2_tempCol = zeros(length(t) , 1) ;
//% Run the loop
for n=1:nColumn
for m=1:1:5
et2_tempCol(:) = (exp(t*(-n/tau)).*((t*(n/tau)).^(m*n-1))/(factorial(m*n - 1)))*(n) ;
et1(:,n) = et2_tempCol + et1(:,n);
end
end
Обратите внимание, что я использую только временную переменную et2_tempCol
и назначение (:)
индекса, чтобы убедиться, что воля будет Проходит колонна вектора к et1
.Это может позаботиться о любой форме вашего вектора t
(будь то св линии или колонка вектором) , В противном случае Matlab может рассердиться и выбросить еще Размеры матрицы должны соответствовать Ошибка у вас.
Если вы контролируете размер вашего вектора t
(линии или колонке) и не нужно, чтобы сохранить результат et2
на всех, то вы можете избавиться от него полностью, используя в своем внутреннем цикл:
если t
является линии вектор:
et1(:,n) = ((exp(t*(-n/tau)).*((t*(n/tau)).^(m*n-1))/(factorial(m*n - 1)))*(n)).' + et1(:,n);
t
, если это колонка вектор:
et1(:,n) = ((exp(t*(-n/tau)).*((t*(n/tau)).^(m*n-1))/(factorial(m*n - 1)))*(n)) + et1(:,n);
почему вы 'et1 (:, п) = 0 'является первым цикл? – bla
его в основном et1 (:, n) = et2 (:, n) + et1 (:, n) для m = 1: 1: 5 – Zirael
, так зачем вам цикл for? просто 'et1 = et2 + et1' – bla