Это будет делать это
v1 = {7, 8, 9};
FindRoot[-Log2[10^-3]/1000==#*Log2[#/q]+(1-#)*Log2[(1-#)/(1-q)],{q,5}]&/@v1
Он жалуется, не будучи в состоянии получить точность, что он хочет, но вы можете быть в состоянии игнорировать это. Предоставление этого параметра WorkingPrecision или AccuracyGoal может, возможно, преодолеть это. Я изменил значение 0.001 на 10^-3, потому что это было единственное число в вашей должности, у которого была десятичная точка, и я надеялся, что это точная доля, которая может избавиться от предупреждений о точности, но этого было недостаточно.
То, что делает, превращает весь FindRoot в функцию, используя # с & в качестве переменной, а затем использует Map (у которого есть стенограмма/@), чтобы использовать эту функцию для каждого элемента в вашем списке v1 и возвращает вы список результатов. Вы можете написать точно такую же вещь с
Если это более понятно для вас.