かどうかを確認するための迅速な方法 $f(x)>x$ どのような値のために $x$
Aug 25 2020
値を見つけるために $x$ そのために $f(x)>x$、次のコードを使用して試しました。
ParallelTable[If[TrueQ[f[x]>x],x,Nothing],{x,0,10^9}]
一部の機能について $f(x)$。しかし、それは永遠にかかります、それをより速くする方法はありますか?
回答
2 cvgmt Aug 25 2020 at 06:40
それはうまくいくかどうか?
Reduce[Cos[x] > x && -6 < x < 6, x, Reals] // N
Reduce[N[{Cos[x] > x && -6 < x < 6}], x, Reals]
プロット
Clear["`*"];
fig = Plot[{Cos[x], 0}, {x, -6, 6},
MeshFunctions -> {Function[x, Cos[x] - x]}, Mesh -> {{0}},
MeshShading -> {Directive[Opacity[0.1], Blue], Red},
AspectRatio -> Automatic, Axes -> False]
1 MichaelE2 Aug 25 2020 at 09:18
@flintyがコメントで示唆しているように、それは関数に依存する可能性があります。Cot[x](OPのcommmentから) MKLに(&自動並列化)ベクトル化され、ここでの方法は、次のとおりです。
Block[{chunk = 10^9/20000},
Table[
Round@Pick[#, UnitStep[# - Cot@#], 0] &@
Range[chunk*k + 1., chunk*(k + 1)],
{k, 0, 10^9/chunk - 1}
] // Flatten
] // AbsoluteTiming
(* {9.04107, {22, 44, 355, 710, 1065, 1420, 1775, 2130, 2485, 2840, 3195, 312689, 1146408, 5419351, 10838702}} *)
注1:関数の鍵は、Cot[x]を避けるCot[0]ことですComplexInfinity。これはです。Real結果以外を回避することで、計算で効率的なパック配列を使用できます。
注2:計算をチャンク化する方法はシステムによって異なります。いっぱいに10^9なると私の記憶がどきどきします。を使用するchunk = 10^9/10と、タイミングは18〜19秒になります。その後、約まで減少し10^9/20000ます。