Matlab: сравнение различных типов переменных

#matlab #compare #variable-types

#matlab #Сравнить #типы переменных

Вопрос:

У меня есть код Matlab ниже. Переменной «k» могут быть присвоены значения 1, 2, 3 или «N». На основе значения «k» мне нужно выполнить последующие операторы if. Я думал, что Matlab не будет выполнять приведенные ниже инструкции if и возвращать значения k1 = k2 = 0, но он делает что-то другое. Когда я выполняю команду «whos», я вижу, что типы переменных сгенерированы Matlab. Не могли бы вы помочь мне понять, что пытается сделать Matlab? Как еще я могу сравнить / достичь того, что я пытаюсь сделать?

Код Matlab

 k = 'N'
k1=0;
k2=0;

if k >= 1
k1 = 1;
end

if k >= 2
k2 = 2;
end

k1
k2
 

Вывод Matlab

 k =

    'N'


k1 =

     1


k2 =

     2
 

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

1. 'N' является символом . При сравнении с числом этот символ интерпретируется как его ASCII-код, который является 78 . Таким образом, оба if условия «» верны

Ответ №1:

Использование ischar() функции в качестве проверки

Одним из методов может быть добавление оберточного / внешнего оператора if, чтобы проверить, что k это не символ (символ), прежде чем оценивать два других внутренних оператора if. Функция ischar() примет значение «true», если переменная k (входная) является символом (символом) и false в противном случае. В этом случае мы используем ~ тильду для обозначения отсутствия / дополнения результата. Это инвертирует регистр и ~ischar(k) будет оцениваться как «true», если переменная k (входные данные) не является символом (символом). Короче говоря, защитный / внешний оператор if можно прочитать как «Если k не является символом, продолжайте внутри оператора».

 k = 'N';
k1=0;
k2=0;

if ~ischar(k)
if k >= 1 
k1 = 1;
end

if k >= 2 
k2 = 2;
end
end

k1
k2
 

Запускался с использованием MATLAB R2019b