n*log2(n) = A
,A
已知值。如何在Matlab中解决n
?请注意,n
不一定是整数。
答案 0 :(得分:6)
或solve the equation analytically并使用:
n = A*log(2)/lambertw(A*log(2))
答案 1 :(得分:2)
不是最优雅的解决方案,但您可以使用fmincon
n = fmincon(@(N) abs(N*log2(N)-A),10, [],[],[],[],1,Inf)
答案 2 :(得分:2)
只需使用fzero
:
solution = fzero(@(n) n.*log2(n)-A, A/5);
我通过检查解决方案在0-1000区间的行为来经验性地找到了最初的猜测。你可能想根据你的用例调整它。
答案 3 :(得分:1)
如果您安装了Symbolic Math Toolbox,您只需要:
solve('n*log2(n)=A', 'n')
ans =
(A*log(2))/lambertw(0, A*log(2))
您还可以将solve
与syms
:
syms n A
solve(n*log2(n)==A, n)
在syms n A
之后,您还可以定义A
:
A = 0
solve(n*log2(n)==A, n)
ans =
1
A = 2
solve(n*log2(n)==A, n)
ans =
2
A = 3
solve(n*log2(n)==A, n)
ans =
(3*log(2))/lambertw(0, 3*log(2))