계수

2016-07-20 3 views
0
I이 방정식을 해결하기 위해 노력하고

을 같은 목록을 사용하여 방정식을 푼다 원하는 결과이어야계수

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

k는리스트 그래서

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 목록의 각 항목에서 해당 함수를 사용하고 결과를 반환합니다. 당신에게 결과 목록. 더 정확하게 이해할 수있는 경우 정확하게

Map[FindRoot[....]&, v1] 

으로 작성할 수 있습니다.