我试图计算在R ^(n ^ 2)中均匀分布的点(nxn矩阵)仅具有负实部的特征值的概率,但我不断得到以下误差:
Not enough input arguments.
Error in probability_n (line 4)
for i = 1:num_pts
这是我的代码:
N = 10^2;
num_pts = 10^4;
n = 2;
n = n*ones(N,1,'gpuArray');
k = arrayfun(probability_n,n,num_pts);
并且调用的函数是
function k = probability_n(n,num_pts)
k = 0;
for i = 1:num_pts
R = reshape(randsphere(1,n^2,1),n,n);
if all(real(eig(R))<0)
k = k+1;
end
end
end
function P = randsphere(m,n,r)
P = randn(m,n);
s2 = sum(P.^2,2);
P = P.*repmat(r*(gammainc(s2/2,n/2).^(1/n))./sqrt(s2),1,n);
end
为什么会这样?我怀疑这是一个非常简单的语法错误,因为这是我第一次尝试将我的GPU用于MATLAB。 GPU是Nvidia GeForce GTX 580.谢谢。
答案 0 :(得分:2)
一般情况下,如果您遇到问题以查看问题是否特定于GPU或并行处理或是否有问题,最好在vanilla MATLAB(无GPU或并行处理)中进行测试其他。如果你这样做,你会发现你的代码仍然无效。
这是因为您需要将probability_n
arrayfun
传递给probability_n
,正如您所写的那样,()
被隐式调用而没有输入参数(您不需要#39; t需要num_pts
来调用一个函数。当您在probability_n
内尝试访问k = arrayfun(@probability_n, n, num_pts);
并且尚未提供时,您会收到错误。
num_pts
请注意,将标量arrayfun
作为第三个输入传递仅在gpuarray
的第一个输入为num_pts
对象时有效。否则,您将要创建一个将probability_n
传递给DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(OpenBoard.class);
DynamicQuery categoryQuery = DynamicQueryFactoryUtil.forClass(CategoryTypes.class);
User user=UserLocalServiceUtil.getUser(PortalUtil.getUserId(request));
List<CategoryTypes> category_list= null;
categoryQuery.add(RestrictionsFactoryUtil.eq("categoryTarget",String.valueOf("O")));
category_list=CategoryTypesLocalServiceUtil.dynamicQuery(categoryQuery);
the last line generates the warning
的匿名函数