我想解决这个等式:
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
我在网上搜索但没有运气。谢谢你的帮助!
答案 0 :(得分: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,因为这是您帖子中唯一具有小数点的数字,我希望通过将其精确分数来消除关于准确性的警告,但这还不够。 / p>
这样做是将整个FindRoot变成一个函数,使用#with&作为变量,然后使用Map(其中包含/ @的简写)在v1列表中的每个项目上使用该函数,并返回结果列表。你可以用
写出完全相同的东西Map[FindRoot[....]&, v1]
如果您更容易理解。