使用列表作为系数求解方程

时间:2016-07-20 17:23:32

标签: wolfram-mathematica

我想解决这个等式:

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
我在网上搜索但没有运气。谢谢你的帮助!

1 个答案:

答案 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]

如果您更容易理解。