У вас есть ряд проблем с вашим кодом.
1) Ваше условное условие относится к вектору, так как вы можете проверить условное выражение для каждой точки в вашем векторе? Ну, ты не можешь таким образом.
2) Вы берете abs()
вектора, но похоже, что вы хотите, чтобы отрицательные части были учтены? abs([-1 0 1])
вернет вывод [1 0 1]
, что сделает ваш вектор положительным и удалит отрицательные части.
Теперь я понимаю, почему вы просили for-loop
проверить состояние каждой переменной x в векторе. Вы можете сделать это с помощью:
for ii=1:numel(x) % This iterates through the vector
x(ii) % this accesses the current index of ii
end
Но вам все еще не нужен цикл for. Вместо этого используйте условный вектор для отслеживания точек нег и положений в х, например:
idx_neg = x < 0; % boolean of all negative points in x
Затем используйте idx_neg
на векторе, к которому вы хотите применить уравнение. И инвертирование idx для положительных значений, таких как:
u = zeros(1, numel(x)); % initialize empty vector for storage
% for positive x values, use ~idx_neg to find the pos points
u(~idx_neg) = 0.5 .* ((-(xpt2(~idx_neg)) .* exp(-abs(xpt2(~idx_neg)))./abs(xpt2(~idx_neg))) + ((xmt2(~idx_neg)).*exp(-abs(xmt2(~idx_neg)))./abs(xmt2(~idx_neg))));
% now apply to neg points in x:
u(idx_neg) = 0.5 .* abs(xpt2(idx_neg(idx_neg))) + 0.5 .* abs(xmt2(idx_neg)) + 0.5 .* (-(xpt2(idx_neg)) .* exp(-abs(xpt2(idx_neg))./abs(xpt2(idx_neg))) + ((xmt2(idx_neg)).*exp(-abs(xmt2(idx_neg)))./abs(xmt2(idx_neg))));
Я не проверял синтаксические ошибки, но это в основном то, что вы ищете.