如何在Matlab中表达这个表达式?
How to express this expression in Matlab?
我想在 Matlab 中计算这个表达式,但我的代码生成了很多 NaN。在这个表达式中,n = 2000 和 Q = 100。L 和 M 的范围是从 10 到 100。如何解决这个问题。我在这里粘贴我的代码。任何人都可以帮助我吗?
这是我的代码:
clear all;
close all;
nCk = @(n,kVec)arrayfun(@(k)nchoosek(n,k),kVec);
n_own = 2000;
Q = 100;
[M, L ] = meshgrid(10:100, 10:100);
tp5 = 0;
for j = 1:1:min(Q,M)
tp1 = nCk(Q,j);
tp2 = nCk((n_own-Q) , (M-j));
tp3 = tp1* (tp2^2) ;
tp4 = ( nCk(n_own,M) )^2;
tp5 = tp5 + tp3 / tp4;
end
P_all_pairs_id = power( ( 1 - tp5 ),( L(L-1)/2 ) );
figure
surf( M, L, P_all_pairs_id);
您应该尝试检查 tp's
的大小,正如 David 评论的那样。通常不建议使用内联表达式,例如 nCk = @(n,kVec)arrayfun(@(k)nchoosek(n,k),kVec);
,至少在调试期间是这样。用不太紧凑但更简单的代码试试这个。
我想在 Matlab 中计算这个表达式,但我的代码生成了很多 NaN。在这个表达式中,n = 2000 和 Q = 100。L 和 M 的范围是从 10 到 100。如何解决这个问题。我在这里粘贴我的代码。任何人都可以帮助我吗?
这是我的代码:
clear all;
close all;
nCk = @(n,kVec)arrayfun(@(k)nchoosek(n,k),kVec);
n_own = 2000;
Q = 100;
[M, L ] = meshgrid(10:100, 10:100);
tp5 = 0;
for j = 1:1:min(Q,M)
tp1 = nCk(Q,j);
tp2 = nCk((n_own-Q) , (M-j));
tp3 = tp1* (tp2^2) ;
tp4 = ( nCk(n_own,M) )^2;
tp5 = tp5 + tp3 / tp4;
end
P_all_pairs_id = power( ( 1 - tp5 ),( L(L-1)/2 ) );
figure
surf( M, L, P_all_pairs_id);
您应该尝试检查 tp's
的大小,正如 David 评论的那样。通常不建议使用内联表达式,例如 nCk = @(n,kVec)arrayfun(@(k)nchoosek(n,k),kVec);
,至少在调试期间是这样。用不太紧凑但更简单的代码试试这个。