Function 数据矩阵函数

Function 数据矩阵函数,function,matlab,math,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循环中使用它是可能的,但是我需要将它作为

我将这种函数定义为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循环中使用它是可能的,但是我需要将它作为一个函数留在另一个函数中使用它。你能帮我一下吗?

当你把一个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循环。

您希望我们如何调试您的函数(您称之为M的函数),而不向我们展示其实现?“kk”和“ll”在这里做什么,它们无关紧要。@High Performance Mark你是对的:)但我不想为我的整个问题打扰任何人。我只想问一下,是否有可能找出这一麻烦的原因?谢谢你的回复。非常感谢你清晰详细的回答!我很想问这个问题。