Функция возвращает неверные данные, если передается список чисел, а не одно число - PullRequest
0 голосов
/ 06 ноября 2018

У меня возникли некоторые проблемы с получением правильного вывода из моей функции при построении графика.

Я написал простую функцию, которая принимает x в качестве ввода и просто возвращает x в качестве вывода. Но если x больше 75, я возвращаю 25 в качестве выхода (по сути, ограничивая вывод до 25, если x превышает 75).

Функция работает, как и предполагалось, когда я передаю ей нормальное число, но когда я даю ей список чисел, она полностью игнорирует мое выражение if и возвращает просто x независимо от того, что является вводом.

Полный код:

x = 0:0.1:200;
y = f(x);
plot(x,y)
function output = f(x)
    if (x >= 75)
        output = 25;
    else
        output = x;
    end
end

Мой сюжет выглядит примерно так: enter image description here Но я ожидаю, что мой сюжет будет выглядеть примерно так: enter image description here

Однако, если я просто использую функцию с одним номером, она работает как задумано. Например, если бы я сделал что-то вроде этого:

x = 75;
y = f(x)
function output = f(x)
    if (x >= 75)
        output = 25;
    else
        output = x;
    end
end

Почему моя функция не работает с входом массива? Как мне это исправить?

1 Ответ

0 голосов
/ 06 ноября 2018

Если вы хотите, чтобы ваша функция работала с массивами, вам нужно явно изменить ее для работы с массивами или вызвать вашу функцию для каждого элемента.

Вызов для каждого элемента

x = [1, 2, 100];

% Calls the function f for each element in x
output = arrayfun(@f, x);
% [1, 2, 25]

Запись f для работы с массивами

Для этого вы можете использовать логическое индексирование для замены элементов в массиве, где значение больше или равно 75 на 25. Это будет наиболее производительный вариант

function x = f(x)
    % Creates a logical index using `x >= 75` and assigns the value `25`
    % to those elements matching that criteria
    x(x >= 75) = 25;
end

x = [1, 2, 100];
f(x)
% [1, 2, 25]

Или вы можете написать свою функцию для циклического перебора входного массива

function output = f(x)
    output = x
    for k = 1:numel(x)
        if output(k) >= 75
            output(k) = 25
        end
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...