n*log2(n) = A
,具有A
已知值。n
Matlab中如何求解?请注意,这n
不是整数。
问问题
1472 次
4 回答
6
或解析方程并使用它:
n = A*log(2)/lambertw(A*log(2))
于 2012-09-21T13:20:06.313 回答
2
不是最优雅的解决方案,但您可以使用fmincon
n = fmincon(@(N) abs(N*log2(N)-A),10, [],[],[],[],1,Inf)
于 2012-09-21T12:43:28.017 回答
2
只需使用fzero
:
solution = fzero(@(n) n.*log2(n)-A, A/5);
通过检查解决方案在 0-1000 区间内的行为,我凭经验找到了最初的猜测;您可能需要针对您的用例进行调整。
于 2012-09-21T14:26:40.120 回答
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))
于 2012-09-21T14:18:00.803 回答