数据矩阵函数

时间:2012-02-22 13:10:09

标签: function matlab math

我将这样的函数定义为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 个答案:

答案 0 :(得分:2)

当您为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代码,因为如果写得正确,你应该能够用矩阵运算替换那些嵌套的for循环。