Массив проходов Matlab как параметр функции - PullRequest
0 голосов
/ 17 апреля 2020

в Matlab мы пытаемся создать таблицу для логики c, и у нас есть функция с именем "functionNot", которая превращает 0 в 1 и 1 в 0;

function functionNot(x)
    for x >=0 && x <= 2
        if x == 0
        disp(1);
        elseif x == 1 
        disp(0);
        else disp (2);
        end
    end
end

, и мы хотим сделать таблица, для таблицы у нас есть 3 массива X, Y и AND tnot (который сохраняет значение «functionNot»), и у нас есть массив X и массив Y

x=[1; 1 ;1; 0; 0; 0; 2; 2; 2];
y=[1; 0; 2 ;1; 0; 2; 1; 0; 2];
tnot(x) =[ functionNot(x(1)); functionNot(x(2));functionNot(x(3));functionNot(x(4));functionNot(x(5));functionNot(x(6));functionNot(x(7));functionNot(x(8));functionNot(x(9))]
tand(x,y) =[ functionAnd(x(1),y(1));
T= table(x, y, tnot(x));

, но он всегда выдает ошибку «Too many Output Аргументы "кто-нибудь знает, как это исправить?

1 Ответ

2 голосов
/ 17 апреля 2020

Проблема, с которой вы столкнулись, связана с тем, что x в функции functionNot доступна только для скаляра, а не для вектора. Чтобы исправить это, вы можете попробовать

function y = functionNot(x)
  y = x;
  for k = 1:length(x)
    if x(k) == 0
       y(k) = 1;
    elseif x(k) == 1 
        y(k) = 0;
    else
        continue;
    end
  end
end

Также вы можете написать векторизованную версию functionNot, как показано ниже

function y = functionNot(x)
  y = 1*(x==0)+0*(x==1) + 2*(x~=0&x~=1);
end

, где x==0 возвращает логи c вектор и true появляются только в тех местах, где значения 0 (аналогично x==1 и x~=0&x~=1), тогда я думаю, что T= table(x, y, tnot(x)) будет работать хорошо.

...