Не ясно, как векторизовать эту функцию, чтобы избавиться от предупреждения fsurf в Matlab - PullRequest
0 голосов
/ 02 февраля 2020

Чтобы использовать fsurf, необходимо правильно векторизовать рассматриваемую функцию, что означает использование поэлементных операций, то есть операций с массивами.

Например, эта функция правильно векторизована:

f = x.^2 -2 * x .* y + 4 * y.^2

Теперь мой вопрос: как бы вы векторизовали эту функцию (a, b, c, d, e - просто константы)?

f = a + [b, c]*[x - d; y - e]

В таком случае я не могу использовать поэлементное умножение (т. Е. .*), поскольку мне нужна эта операция для возврата скаляра, а не матрицы, поэтому использование * является правильным.

Хотя график, возвращаемый fsurf, безусловно, является правильным, я получаю это предупреждение:

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

Как бы вы поступили?

1 Ответ

1 голос
/ 02 февраля 2020

Матрицу в вашей формуле трудно векторизовать. Возьмите ручку и бумагу и выполните умножение матриц:

f = a - b.*(d - x) - c.*(e - y)

Только умножения со скалярным левым, легко векторизовать.

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