Я новичок в 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. Как бы я запускал эту и подобные функции одновременно для данных1 и данных2, выполняя итерацию по одному и тому же индексу для них обоих, по одному числу за раз, создавая матрицу выходов?
Причина, по которой я не могу просто запустить цикл, заключается в том, что мне нужно ввести эту функцию в процесс оптимизации функции fminunc()
, чтобы она могла оценить F. для каждой пары значений.