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

时间:2018-01-27 19:30:10

标签: 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.1760    0.1210    0.0648    0.1760    0.1506    0.1270    0.1841    0.1210

  Column 10

    0.1841

这可以按预期工作,但是如下所示的函数,有多个数据源

>>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) . . .

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

我不能简单地运行循环的原因是因为我需要将此函数输入到fminunc()函数优化过程中,并让它能够为每对值计算F.

我非常感谢有关此事的任何帮助,伙计们。

1 个答案:

答案 0 :(得分:1)

您撰写了extension SCNNode { func cleanup() { for child in childNodes { child.geometry = nil } } } ,然后将2*p(data1-x(1))视为向量,将其更改为p。第二个错误是2*p.*(data1-x(1))。这是一个矩阵乘法,由于尺寸不匹配会产生错误。我假设您需要标量乘法,然后再次添加(data1-x(1))*(data2-x(2)),使其变为.