Использование strcmpi
с if
/ else
Функция strcmpi
сравнивает две строки без учета регистра и возвращает логическое значение.Таким образом, вам нужно использовать его следующим образом:
dist = 'markovian';
x = pi/7;
if strcmpi(dist, 'lorentzian')
z = sin(x)
elseif strcmpi(dist, 'markovian')
z = cos(x)
else
z = sin(x) + cos(x)
end
Использование switch
Код может быть более понятным с помощью оператора switch
.Вы можете использовать lower
для достижения нечувствительности к регистру.
dist = 'markovian';
x = pi/7;
switch lower(dist)
case 'lorentzian'
z = sin(x)
case 'markovian'
z = cos(x)
otherwise
z = sin(x) + cos(x)
end
Без ветвления
Вот альтернатива, которая избегает ветвления.Если у вас есть только два или три варианта, этот подход излишне сложен, но если есть много вариантов, он может быть более подходящим для компактности или даже читабельности.
Это работает путем нахождения индекса выбранной опции в ячейке.массив векторов char, если имеется;и используя feval
для оценки соответствующей функции из массива ячеек дескрипторов функций:
names = {'lorentzian', 'markovian'}; % names: cell array of char vectors
funs = {@(x)sin(x), @(x)cos(x), @(x)sin(x)+cos(x)}; % functions: cell array of handles.
% Note there is one more than names
dist = 'markovian';
x = pi/7;
[~, ind] = ismember(lower(dist), names); % index of dist in names
ind = ind + (ind==0)*numel(funs); % if 0 (dist not in names), select last function
feval(funs{ind}, x)