Как решить n*log2(n)=A в Matlab?
n*log2(n) = A
, с A
известная ценность. Как решить для n
в матлабе? Обратите внимание, что n
не обязательно целое число.
4 ответа
Решение
Или решите уравнение аналитически и используйте это:
n = A*log(2)/lambertw(A*log(2))
Не самое элегантное решение, но вы можете использовать fmincon
n = fmincon(@(N) abs(N*log2(N)-A),10, [],[],[],[],1,Inf)
Просто используйте fzero
:
solution = fzero(@(n) n.*log2(n)-A, A/5);
Первоначальное предположение я нашел эмпирически, изучив поведение решения в интервале 0-1000; Вы можете настроить его для своего варианта использования.
Если у вас установлен 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))