いや、待ってめっちゃ数学やん。うふぇぇ苦手なんだよなぁ。。。
ってことでニュートン法についてまずウィキ様から引用します。
数値解析の分野において、ニュートン法(ニュートンほう、英: Newton's method)またはニュートン・ラフソン法(英: Newton-Raphson method)は、方程式系を数値計算によって解くための反復法による求根アルゴリズムの1つである。対象とする方程式系に対する条件は、領域における微分可能性と2次微分に関する符号だけであり、線型性などは特に要求しない。収束の速さも2次収束なので古くから数値計算で使用されていた。名称はアイザック・ニュートンとジョゼフ・ラフソンに由来する。
やっぱりわかんない。
結局やりたいことは、収束する点を探したいってことと、特定の桁数まで合致するようにif文とfor文を回せってことだと思う。
まず頭の中でどういうアルゴリズムであるべきかを想定する。
xの平方根を求める方法を考える。変数zを使う場合に、10回の試行でどれだけ近づけるかを考える。
一回書いてみっかーヒント見ながら。
package main
import (
"fmt"
"math"
)
func Sqrt(x float64) float64 {
z := float64(1)
fmt.Println(math.Sqrt(x))
for i := 0; i < 9; i++{
z -= (z*z - x) / (2*z)
}
return z
}
func main() {
fmt.Println(Sqrt(2))
}
はい答え。。。
10回の試行で小数点以下16桁まで合うのすげぇ。
まあ、そうか偏差的に計算してるし、そらよっていくよね。1000からzを初めて10回試行で2ケタくらいだし。
おもしろいなぁ