我是Matlab的新手,到目前为止,我已经学会了如何在单个数据向量上评估多个变量的函数,如下例所示,
>>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值。
发布于 2018-01-27 19:43:49
您编写了2*p(data1-x(1)),然后将p视为向量,将其更改为2*p.*(data1-x(1))。第二个错误是(data1-x(1))*(data2-x(2))。这是一个矩阵乘法,因为维数不匹配,就会产生一个误差。我假设您想要一个标量乘法,然后再添加.,使它成为(data1-x(1)).*(data2-x(2))
https://stackoverflow.com/questions/48479716
复制相似问题