如何在多个成对输入上运行Matlab函数并输出矩阵?

如何在多个成对输入上运行Matlab函数并输出矩阵?,matlab,matrix,statistics,anonymous-function,mle,Matlab,Matrix,Statistics,Anonymous Function,Mle,我是Matlab新手,到目前为止,我学习了如何在单个数据向量上计算多个var.s的函数,如以下示例所示 >>data = [1,2,3,4,2,2.5,2.9,1.8,-1,1.8] >>fun=@(x) (1/(sqrt(2*pi)*x(2)))*exp((-(data-x(1)).^2)/(2*x(2)^2)) %A Normal distribution >>fun([1,2]) Columns 1 through 9 0.1995 0

我是Matlab新手,到目前为止,我学习了如何在单个数据向量上计算多个var.s的函数,如以下示例所示

>>data = [1,2,3,4,2,2.5,2.9,1.8,-1,1.8]
>>fun=@(x) (1/(sqrt(2*pi)*x(2)))*exp((-(data-x(1)).^2)/(2*x(2)^2)) %A Normal distribution
>>fun([1,2])

Columns 1 through 9

    0.1995    0.1760    0.1210    0.0648    0.1760    0.1506    0.1270    0.1841    0.1210

  Column 10

    0.1841
这与预期的一样有效,但是下面这样一个具有多个数据源的函数呢

最后一个方程只是一个联合概率分布,每个观测值由一对x和y值组成。我如何同时在data1和data2上运行这个函数和类似的函数,对它们的相同索引进行迭代,每次一个数字,生成一个输出矩阵


我不能简单地运行循环的原因是,我需要将此函数输入到函数优化过程中,并使其能够计算每对值的F。

您编写的
2*p(data1-x(1))
然后将
p
视为向量,将其更改为
2*p.*(data1-x(1))
。第二个错误是
(data1-x(1))*(data2-x(2))
。这是一个矩阵乘法,由于维数不匹配,将产生错误。我假设您想要一个标量乘法,然后再次添加
,使其成为
(data1-x(1)).*(data2-x(2))

什么时候应该为元素操作放置“.”?它是否在任何向量的周围无处不在,即使是加法/减法,或者有更多的规则我应该知道吗?@Coolio2654当涉及向量/矩阵时,点仅用于标量乘法或除法。好的,如果我按照您建议的方式在匿名函数中定义我的两个
数据()
,我的代码现在运行。我还有一个问题希望你能回答。我为运行整个过程而创建的函数将
数据
作为输入,但是如果有多个观测数据源(如在这种情况下),我不知道如何允许函数接受随机数量的
数据。那么,有没有一种方法可以将任意两个观测数据源压缩/组合到一个二维文件中,并让函数运行到该文件上?@Coolio2654您的意思是将
data1
data2
组合到一个变量数据中?这当然是可能的。如果有两个长度相等的行向量(比如1xn),那么
data=[data1;data2]
是一个2xn矩阵,第一行
data1
和第二行
data2
。对于2个列向量,它是
data=[data1 data2]
。这就是你的意思吗?是的,在两列上运行一些函数
fun()
,将其中一列作为与data1、data2等相对应的单独数据源。正如您所说,我将它们合并到一个文件中,但它不起作用,因为函数无法识别其中的信息。是否有某种方法可以让函数在矩阵的特定维度内查看其所有观察集?
>>data1 = [1,2,3,4,2,2.5,2.9,1.8,-1,1.8]
>>data2 = [1,2,3.1,4.1,2.1,2.51,3.1,-1,1.9,2] 
>>p = .5092
>>fun = @(x) (1/(2*pi*x(2)*x(4)*sqrt(1-p^2))) * exp( (-1/(2-2*p^2)) * ( (data1-x(1)).^2/(x(3)^2) + (data2-x(2)).^2/(x(4)^2) - (2*p(data1-x(1))*(data2-x(2)))/(x(3)*x(4)) ) ) % A joint-probability distribution
>>fun([1,2,3,4])

Subscript indices must either be real positive integers or logicals.

Error in
@(x)(1/(2*pi*x(2) . . .