所以,我是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.
我非常感谢有关此事的任何帮助,伙计们。
答案 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))
,使其变为.