Ошибка, показывающая, что «Переменная ‘uLS1’, по-видимому, меняет размер на каждой итерации цикла. подумайте о предварительном распределении для скорости».

#matlab

Вопрос:

 % 3. Calculation of strain energy density
% CALCULATION OF STRAIN-ENERGY-DENSITY FOR EACH LOAD CASE
% u=1/2*sigma*epsilon

for p = 1:N_ele
    uLS1(p) = 1/2*(sigma_1(p,2:7)*epsilon_1(p,2:7)');
    uLS2(p) = 1/2*(sigma_2(p,2:7)*epsilon_2(p,2:7)');
    uLS3(p) = 1/2*(sigma_3(p,2:7)*epsilon_3(p,2:7)');
end
% AVERAGE OF ALL LOAD CASES
sed(:,a) = (uLS1'   uLS2'   uLS3')/3;        ...    line
 

Ошибка в командном окне:

«Нераспознанная функция или переменная « uLS1

Ошибка в main_file (строка 86)
sed(:,a) = (uLS1' uLS2' uLS3')/3;

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

1. Похоже, вы смешиваете 2 источника ошибок. Первый-при выполнении сценария (ошибка нераспознанной функции или переменной), а второй-при анализе сценария на предмет повышения производительности (итерация цикла). И то и другое совершенно не связано. Исправьте первый, объявив uLS1 перед его использованием, например uLS1 = [];. Вторая ошибка-это просто предупреждение.

2. после использования этого uLS1 = нули(1:N_ele); , uLS2 = нули(1:N_ele);, uLS3 = нули(1:N_ele); ошибка предварительного распределения не приходит,но ошибка все еще отображается в sed (:, a) = (uLS1′ uLS2′ uLS3′)/3; — «Невозможно выполнить назначение, поскольку индексы на левой стороне несовместимы с размером правой стороны». Как мне предварительно распределить этот sed, поскольку здесь нет цикла?

Ответ №1:

Что касается ошибки: Переменная sed должна содержать N_ele строк, таких что size(sed,1) = N_ele . Если число N_ele меняется с каждой итерацией a , то вы можете использовать ячейку вместо массива, т. Е. sed{a} = (uLS1' uLS2' uLS3')/3; .

Что касается предупреждения: Предварительно распределите массивы uLS1 , uLS2 , и uLS3 перед циклом for, когда вы узнаете размер, который они будут иметь, т. Е.,

 uLS1 = zeros(1, N_ele);
uLS2 = zeros(1, N_ele);
uLS3 = zeros(1, N_ele);
 

Если вы заранее не знаете их размеры, у вас есть выбор проигнорировать предупреждение Matlab и действовать как есть.