2016-07-20 3 views
0

ich diese Gleichung zu lösen versuchen:löst Gleichung eine Liste als Koeffizient mit

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

k ein Wert aus einer Liste ist

v1 = {7,8,9} 

So sollen die gewünschten Ergebnisse

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

Ich suchte online, aber kein Glück. Danke für Ihre Hilfe!

Antwort

2

es

v1 = {7, 8, 9}; 
FindRoot[-Log2[10^-3]/1000==#*Log2[#/q]+(1-#)*Log2[(1-#)/(1-q)],{q,5}]&/@v1 

Es beschwert sich in der Lage tun über die Genauigkeit zu bekommen, dass sie will, wird dies aber Sie können das ignorieren können. Wenn Sie eine WorkingPrecision- oder AccuracyGoal-Option verwenden, können Sie das vielleicht überwinden. Ich habe die Werte von 0,001 bis 10^-3 geändert, da dies die einzige Zahl in Ihrem Post war, die einen Dezimalpunkt hatte, und ich hoffte, durch diesen exakten Bruch die Warnungen vor Genauigkeit loszuwerden, aber das war nicht genug.

Das macht den gesamten FindRoot zu einer Funktion, die # mit & als Variable verwendet, und verwendet dann Map (die eine Kurzbezeichnung von/@ hat), um diese Funktion für jedes Element in Ihrer v1-Liste zu verwenden Sie die Liste der Ergebnisse. Sie könnten genau das gleiche mit

schreiben, wenn das für Sie verständlicher ist.