2016-07-20 5 views
0

я пытаюсь решить это уравнение:решить уравнение, используя список в качестве коэффициента

solve[-Log2[0.001]/1000 == k*Log2[k/q] + (1 - k)*Log2[(1 - k)/(1 - q)], q] 

к является значением из списка

v1 = {7,8,9} 

Таким образом, желаемые результаты должны быть

q={somevaule1, somevaule2, somevalue2} corresponding to different choice of k in v1 

Я искал в Интернете, но не повезло. Спасибо за вашу помощь!

ответ

2

Это будет делать это

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 и возвращает вы список результатов. Вы можете написать точно такую ​​же вещь с

Если это более понятно для вас.

 Смежные вопросы

  • Нет связанных вопросов^_^