Как создать матрицу в Matlab, где каждая запись является результатом двумерной функции

#matlab #vectorization

#matlab #векторизация

Вопрос:

Я хочу создать матрицу 4 x 4 с каждой записью, представляющей f (x, y), где оба x и y принимают значения 0, 1, 2 и 3. Таким образом, первой записью будет f (0,0), вплоть до f (3,3).

Функция f (x, y) равна:

3 * cos (0 * x 0 * y) 2 * cos (0 * x 1 * y) 3 * cos (0 *x 2 * y) 8 * cos (0 *x 3 * y) 3 * cos (1 *x 0 *y) 25 * cos (1 * x 1 * y) 3 * cos (1 * x 2 * y) 8 * cos (1* x 3*y) 3 * cos (2*x 0 *y) 25 * cos (2* x 1 * y) 3 * cos (2 * x 2 * y) 8 * cos (2 * x 3 * y) 3 * cos (3* x 0*y) 25 * cos (3*x 1* y) 3 * cos (3*x 2*y) — 90 * cos (3 * x 3* y)

Я не часто пользовался Matlab, и прошло некоторое время. Я пытался превратить f (x, y) в функцию @f (x, y); используя оператор .*; объединяя x и y и т.д. Все это безуспешно…

Ответ №1:

Не уверен, что именно вы пробовали, но использование meshgrid — правильная идея.

 % Function defintion (abbreviated)
f = @(x, y) 3 * cos(0*x   0*y)   2 * cos(0*x   1*y)   3 * cos(0*x   2*y)

% Set up x and y values.
x = 0:3
y = 0:3

% Generate grid.
[X, Y] = meshgrid(x, y);

% Rseult matrix.
res = f(X, Y)
  

Сгенерированный результат:

 f =
   @(x, y) 3 * cos (0 * x   0 * y)   2 * cos (0 * x   1 * y)   3 * cos (0 * x   2 * y)

x =
   0   1   2   3

y =
   0   1   2   3

res =
   8.00000   8.00000   8.00000   8.00000
   2.83216   2.83216   2.83216   2.83216
   0.20678   0.20678   0.20678   0.20678
   3.90053   3.90053   3.90053   3.90053
  

Комментарии:

1. ‘f = @(x, y) 3 * cos (0 * x 0 * y) 25 * cos (0 * x 1 * y) 3 * cos (0 * x 2 * y) ошибка: ‘x’ не определено возле столбца 13 строки 2′

2. Получаете ли вы подобную ошибку при попытке запустить этот пример из документации MATLAB (первый краткий пример)?