0

解けない数学の問題があります: n の値を求める方法がわかりません。

365! / ((365-n)! * 365^n) = 50%.

Casio 500ms 関数電卓を使用していますが、方法がわかりません。

質問が簡単すぎてすみません。転職するので、何年も無視してきた数学を見直してアップグレードする必要があります。

4

3 に答える 3

2

理論的には、微分を取ることができれば、ニュートンの方法のようなルート検索スキームを使用できます。ただし、この関数は階乗を使用するため、整数に対してのみ定義されます。

1つの方法は、アイデンティティを認識することです

n! = gamma(n+1)

これにより、関数を実際の行に効果的に拡張できます。ガンマ関数は正の実線上で定義されますが、負の整数で特異点があります。そしてもちろん、ガンマは微分可能であるため、この式の微分が必要です。

ところで、このような問題に対するニュートンの方法のような方法の危険性は、依然として負の実線に発散する可能性があることです。不適切な開始値を選択すると、ガベージが発生する可能性があります。(私はこの関数の形を注意深く見ていないので、それが発散する開始値のセットについては主張しません。)

上記のフープのセットを飛び越える価値はありますか? もちろん違います。Newton の方法よりも良い選択は、Brent のアルゴリズムのようなもの、またはここでは微分の計算を必要としない正割法かもしれません。しかし、それでも無駄な努力です。

これが実際に整数の問題であることを認識すると、二分法などのツールを使用して解を非常に効率的に解決できます。導関数を必要とせず、整数に対しても十分にうまく機能します。間隔をできるだけ短く解決すると、アルゴリズムは終了し、その過程でさまざまな関数評価が行われます。

最後に、この関数にはかなり大きな階乗が含まれるため、階乗を評価する多くのツールが簡単にオーバーフローする可能性があるため、注意してください。たとえば、MATLAB で factorial(365) を評価しようとすると、次のようになります。

factorial(365)
ans =
   Inf

オーバーフローします。シンボリック ツールボックスのようなツール、または独自の可変精度整数ツール スイートに移行する必要があります。あるいは、これらの階乗の項の多くが相殺されることを認識することができます。

365! / (365 - n)! = 365*(365-1)*(365-2)*...*(365-n+1)

ポイントは、注意しないと、このような大きな値でオーバーフローが発生することです。オーバーフローしないツールがある場合は、それを使用し、私が提案したように二等分を使用します。ここでは、MATLAB のシンボリック ツールボックスを使用して、7 つの関数評価のみを使用して解を得ています。

f = @(n) vpa(factorial(sym(365))/(factorial(sym(365 - n))*365^sym(n)));

f(0)
ans =
1.0

f(365)
ans =
1.4549552156187034033714015903853e-157

f(182)
ans =
0.00000000000000000000000095339164972764493041114884521295

f(91)
ans =
0.000004634800180846641815683109605743

f(45)
ans =
0.059024100534225072005461014516788

f(22)
ans =
0.52430469233744993108665513602619

f(23)
ans =
0.49270276567601459277458277166297

または、そのようなオプションを選択できないが、ガンマ関数のログを評価できるツールがあり、かつ MATLAB のように利用可能なルートファインダーがある場合...

f = @(n) exp(gammaln(365+1) - gammaln(365-n + 1) - n*log(365));
fzero(@(n) f(n) - .5,10)
ans =
   22.7677

ここでわかるように、ガンマと階乗関数に関連する恒等式を使用してから、MATLAB でガンマ関数の対数 gammaln を使用しました。すべての汚れた作業が完了したら、混乱全体をべき乗します。これは妥当な数になります。Fzero は、交差が 22 と 23 の間で発生することを示しています。

于 2013-05-16T13:43:03.100 に答える
1

数値近似で問題ない場合は、Wolfram Alphaに質問してください:

n ~= -22.2298272...

n ~= 22.7676903...

于 2013-05-16T12:16:36.490 に答える