Matlab - ошибка с несколькими входами - PullRequest
1 голос
/ 20 апреля 2011

Это моя функция:

function [o1  o2] = f(t, y)
o1 = y(2);
o2 = -sin(y(1));
end

Когда я вызываю его из командной строки:

f(1, [2,3])
ans = 3

почему я вижу только o1? Кроме того, это не работает

feval(f, 1, [2 3])

Сообщение об ошибке

Input argument "y" is undefined.

Error in ==> f at 2
o1 = y(2);

Пожалуйста, помогите, я понятия не имею, что происходит.

Ответы [ 2 ]

3 голосов
/ 20 апреля 2011

feval должен был вызываться с дескриптором функции или строкой, поэтому используйте

feval(@f, 1, [2,3])

или

feval('f', 1, [2,3])

Как вы увидите, это также возвращает только первый вывод функции. Для получения дополнительных результатов вы должны назначить их, например,

[o1, o2] = feval(@f, 1, [2, 3])
3 голосов
/ 20 апреля 2011

Если вы просто вызовете функцию без явной выходной переменной, она вернет только первый выходной аргумент, который равен o1, и присвоит его битовой корзине ans.Чтобы получить оба выхода, выполните следующие действия.

[o1,o2]=f(1, [2,3])

Чтобы использовать feval, вы должны передать дескриптор функции, который является именем функции, которому предшествует @знак.Итак, feval(@f,1,[2,3]) должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...