Matlab - как заставить это работать как для скаляров, так и для векторов - PullRequest
0 голосов
/ 20 апреля 2011

Предположим, что функция g принимает функцию f в качестве параметра, и внутри g мы имеем что-то вроде x = t * feval (f, u);однако, f может быть либо скалярным, либо векторным.Если оно имеет векторное значение, мы хотим, чтобы x также был вектором, то есть оператор feval возвращает весь вектор, возвращаемый функцией f.Как мы можем сделать это для скалярных и векторных случаев?

Ответы [ 2 ]

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

Если выходные данные feval(f,u) могут быть скаляром или вектором, и вы хотите, чтобы результат x был одинаковым (то есть скаляр или вектор той же длины и размера), тогда он будет зависетьчто такое t:

  • Если t скаляр, то то, что у вас есть, хорошо.Вы можете использовать любой из операторов * или .* для выполнения умножения.
  • Если t - это вектор такой же длины и размера, что и результат feval(f,u), тогда используйте *Оператор 1014 * для поэлементного умножения.
  • Если t - это вектор такой же длины, но с другим размером, который является результатом feval(f,u) (т. Е. Один - строкавектор, а один - вектор столбца), тогда вы должны привести в соответствие размеры, транспонировав одно или другое с помощью оператора .'.
  • Если t отличается от длины, полученной в результате feval(f,u), тогда вы не можете выполнять поэлементное умножение.
0 голосов
/ 20 апреля 2011

Насколько я могу судить, то, что вы спрашиваете, уже является поведением по умолчанию в matlab.Это означает, что если f возвращает скаляр, x будет скаляром, а если он возвращает вектор, x будет вектором.

В вашем примере это верно, пока t также является скаляром - иначе результат будет зависеть от того, как оценивается t * [output of f].

Пример

function o1 = f(N)
o1 = zeros(1,N);
end

Здесь f возвращает скаляр, если N = 1, и вектор для N> 1.Вызов вашего кода дает

x=feval('f', 1); % Returns x = 0

x=feval('f', 4); % Returns x = [0 0 0 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...