NSolve vs Roots

时间:2016-10-25 06:45:16

标签: wolfram-mathematica

我需要在Mathematica中评估以下表达式:

(1/((3 + E^(4 k))^8))
 2 (1 + E^(4 k))^2 k (729 + E^(24 k) + 210 k + 2 E^(20 k) (9 + 7 k) + 
4 E^(12 k) (135 + 49 k) + 6 E^(4 k) (243 + 61 k) + 
E^(16 k) (135 + 82 k) + E^(8 k) (1215 + 284 k)) == k

其中E是指数。在Maple中,它很容易用Roots完成(函数(k)= k,k,数字),但在Mathematica中,运行时间太长。

你知道我怎么解决k?答案应该是0.2788 ......

2 个答案:

答案 0 :(得分:1)

我们需要先找到近似的解决方案。

从图中我们可以看到有两种解决方案 - 接近0和0.2。

Plot[(1/((3 + E^(4 k))^8)) 
2 (1 + E^(4 k))^2 k (729 + E^(24 k) + 210 k + 
 2 E^(20 k) (9 + 7 k) + 4 E^(12 k) (135 + 49 k) + 
 6 E^(4 k) (243 + 61 k) + E^(16 k) (135 + 82 k) + 
 E^(8 k) (1215 + 284 k)) - k, {k, -1, 1}]

plot.png

您可以使用FindRoot

FindRoot[(1/((3 + E^(4 k))^8))
2 (1 + E^(4 k))^2 k (729 + E^(24 k) + 210 k + 
  2 E^(20 k) (9 + 7 k) + 4 E^(12 k) (135 + 49 k) + 
  6 E^(4 k) (243 + 61 k) + E^(16 k) (135 + 82 k) + 
  E^(8 k) (1215 + 284 k)) == k, {k, 0.2}]

其中0.2是我们近似的解决方案。我们获得:

{k -> 0.278869}

答案 1 :(得分:1)

您可以将计算限制为实数解决方案。这个解决方案需要0.1秒。

Timing[
 NSolve[(1/((3 + E^(4 k))^8)) 2 (1 + E^(4 k))^2 k (729 + E^(24 k) + 
      210 k + 2 E^(20 k) (9 + 7 k) + 4 E^(12 k) (135 + 49 k) + 
      6 E^(4 k) (243 + 61 k) + E^(16 k) (135 + 82 k) + 
      E^(8 k) (1215 + 284 k)) == k, k, Reals]]
  

{0.109375,{{k - > 0.},{k - > 0.278869}}}