[解決済み] Pythonで再帰的平方根を作るにはどうしたらいいですか?
2022-02-19 09:15:38
質問
このようなコードがあります。
def root(x,n):
if n==0:
return x
else:
return 0.5**(x/root(x,n-1)+root(x,n-1))
が、です。
>>>root(4,2)
>>>2.05
なぜ? 他の平方根ではうまくいかないし......。
解決方法は?
を実装しようとしているようですね。 分割差分 しかし、なぜここで累乗演算子(**)を使っているのかはよくわかりません。
再帰的平方根の基本戦略は、平方根を推測し、推測の正確さをチェックし、古い推測が十分に正確でなければ新しい推測を作成し、推測が真の根に十分に近づいて戻るまで再帰的にこれを続けるというものです。
結果の精度(と再帰の深さ)を制御するために、推測と実際の平方根を照合できるようにする必要があります。これを行うには、平方根を二乗して、平方根を求める数値との差を非常に小さくします。
def goodEnough(guess, x):
return abs((x - (guess * guess))) <= .01 #change this value to make the function more or less accurate
実際に平方根を求めるには、より良い推測を導き出す方法が必要で、これがアルゴリズムの出番となる。ここでは ニュートンの方法 というのも、かなりシンプルだからです。
def newGuess(guess, x):
return (guess + guess/x)/2
これで、全部まとめることができます。
def root(guess, x):
if goodEnough(guess, x):
return guess
else:
return root(newGuess(guess, x), x)
そして、もう一歩踏み込めば、guessパラメータを排除することができます。
def sqrt(x):
return root(x/2, x) #x/2 is usually somewhat close to the square root of a number
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
任意波形を生成してtxtで保存するためのPython実装
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み] データ型が理解できない
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない