функция матрицы данных - PullRequest
0 голосов
/ 22 февраля 2012

Я определил такую ​​функцию как M-файл M (t, Z, X, Y, p1, p2, p3, k, l).Здесь p1, p2, p3 - заданные параметры, X и Y - входы сетки и Z = Z (X, Y, K, L).Если я спрашиваю у Matlab, например, вывод для t = 3, k = 4, l = 5, то M (3, Z, X, Y, p1, p2, p3,4,5), я получаю значительный вывод. Моя проблемая не могу сделать то же самое для такой матрицы данных:

t=[2 3 4]';
k=[3 4 5]';
l=[2 3 4]';
M(t,Z,X,Y,p1,p2,p3,k,l)

Это возможно в цикле for, но мне нужно оставить это как функцию, используя ее в другой функции,Не могли бы вы помочь мне?

1 Ответ

2 голосов
/ 22 февраля 2012

Когда вы передаете функции Matlab матрицу, она не проходит и не оценивает ее по точкам. Он использует всю матрицу в качестве входных данных. Для некоторых функций этот результат может быть одинаковым, например:

function f = y2(x)
f = y.^2;
end

Произведет y ^ 2 для однозначного ввода или, если вы введете вектор, скажем, y = [1, 2, 3], вы получите однозначные выходные данные функции [1, 4, 9], но только потому, что функция была написана таким образом. В качестве альтернативы, если ваша функция была написана:

function f = y2(x)
f = y^2;
end

Вы получите тот же результат для однозначных входных данных, однако, если вы введете вектор, он попытается выполнить умножение матриц и, таким образом, выдаст ошибку, если y не является квадратным.

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

function fvec = Mvec(...)
[n k] = size(t)
fvec = zeros(n,k)
for i=1:n
    for j = 1:k
        fvec(i,j) = M(t(i,j),...)
    end
end
end

Это сработает, но обычно считается плохим кодом Matlab, потому что, если он написан правильно, вы сможете заменить те, которые вложены в циклы, матричными операциями.

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