Как решить 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))
Другие вопросы по тегам