package main import "fmt" import "math" func main() { fmt.Printf("%d\n", 3 + 5) fmt.Printf("%d\n", 3 - 5) fmt.Printf("%d\n", 3 * 5) fmt.Printf("%f\n", math.Pow(3, 5)) fmt.Printf("%d\n", 5 / 3) fmt.Printf("%f\n", 5.0 / 3) fmt.Printf("%f\n", 5 / 3.0) fmt.Printf("%d\n", 5 % 3) fmt.Printf("%3d\n", 3 * 5) fmt.Printf("%23.20f\n", 5 / 3.0) } package main import "fmt" func main() { var i int = 3 * 5 fmt.Printf("3 * 5 = %d\n", i) } package main import "fmt" import "math" func main() { const a = 0 const b = 1 // å°å½¢å‰E§ç©åE var n int = 2 for j := 1; j <= 10; j++ { var h float64 = (b - a) / float64(n) var s float64 = 0 var x float64 = a for i := 1; i <= n - 1; i++ { x += h s += f(x) } s = h * ((f(a) + f(b)) / 2 + s) n *= 2 // çµæžœã‚EÏ€ ã¨æ¯”è¼E fmt.Printf("%2d : %13.10f, %13.10f\n", j, s, s - math.Pi) } } func f(x float64) float64 { return (4 / (1 + x * x)) } package main import "fmt" import "math" func main() { const a = 0 const b = 1 // ä¸ç‚¹å‰E§ç©åE var n int = 2 for j := 1; j <= 10; j++ { var h float64 = (b - a) / float64(n) var s float64 = 0 var x float64 = a + (h / 2) for i := 1; i <= n; i++ { s += f(x) x += h } s *= h n *= 2 // çµæžœã‚EÏ€ ã¨æ¯”è¼E fmt.Printf("%2d : %13.10f, %13.10f\n", j, s, s - math.Pi) } } func f(x float64) float64 { return (4 / (1 + x * x)) } package main import "fmt" import "math" func main() { const a = 0 const b = 1 // Simpsonå‰E§ç©åE var n int = 2 for j := 1; j <= 5; j++ { var h float64 = (b - a) / float64(n) var s2 float64 = 0 var s4 float64 = 0 var x float64 = a + h for i := 1; i <= n / 2; i++ { s4 += f(x) x += h s2 += f(x) x += h } s2 = (s2 - f(b)) * 2 + f(a) + f(b) s4 *= 4 var s float64 = (s2 + s4) * h / 3 n *= 2 // çµæžœã‚EÏ€ ã¨æ¯”è¼E fmt.Printf("%2d : %13.10f, %13.10f\n", j, s, s - math.Pi) } } func f(x float64) float64 { return (4 / (1 + x * x)) } package main import "fmt" import "math" func main() { const a = 0 const b = 1 var t[7][7] float64 // å°å½¢å‰E§ç©åE var n int = 2 for i := 1; i <= 6; i++ { var h float64 = (b - a) / float64(n) var s float64 = 0 var x float64 = a for j := 1; j <= n - 1; j++ { x += h s += f(x) } // çµæžœã‚’ä¿åE t[i][1] = h * ((f(a) + f(b)) / 2 + s) n *= 2 } // Richardsonã®è£œå¤–æ³E n = 4 for j := 2; j <= 6; j++ { for i := j; i <= 6; i++ { t[i][j] = t[i][j - 1] + (t[i][j - 1] - t[i - 1][j - 1]) / float64(n - 1) if i == j { // çµæžœã‚EÏ€ ã¨æ¯”è¼E fmt.Printf("%2d : %13.10f, %13.10f\n", j, t[i][j], t[i][j] - math.Pi) } } n *= 4 } } func f(x float64) float64 { return (4 / (1 + x * x)) } package main import "fmt" import "math" // ãƒEEタ点ã®æ•° const N = 7 func main() { var x [N]float64 var y [N]float64 // 1.5刻ã¿ã§ -4.5EE.5 ã¾ã§, E—点ã ã‘値をセãƒEƒˆ for i := 0; i < N; i++ { var d float64 = float64(i) * 1.5 - 4.5 x[i] = d y[i] = f(d) } // 0.5刻ã¿ã§ 与ãˆã‚‰ã‚Œã¦ãEªãE€¤ã‚’補間 for i := 0; i <= 18; i++ { var d float64 = float64(i) * 0.5 - 4.5 var d1 float64 = f(d) var d2 float64 = lagrange(d, x[:], y[:]) // å…EE関数ã¨æ¯”è¼E fmt.Printf("%5.2f\t%8.5f\t%8.5f\t%8.5f\n", d, d1, d2, d1 - d2) } } // å…EE関数 func f(x float64) float64 { return x - math.Pow(x,3) / (3 * 2) + math.Pow(x,5) / (5 * 4 * 3 * 2) } // Lagrange (ラグランジュ) 補間 func lagrange(d float64, x []float64, y []float64) float64 { var sum float64 = 0 for i := 0; i < N; i++ { var prod float64 = y[i] for j := 0; j < N; j++ { if (j != i) { prod *= (d - x[j]) / (x[i] - x[j]) } } sum += prod } return sum } package main import "fmt" import "math" // ãƒEEタ点ã®æ•° const N = 7 func main() { var x [N]float64 var y [N]float64 // 1.5刻ã¿ã§ -4.5EE.5 ã¾ã§, E—点ã ã‘値をセãƒEƒˆ for i := 0; i < N; i++ { var d float64 = float64(i) * 1.5 - 4.5 x[i] = d y[i] = f(d) } // 0.5刻ã¿ã§ 与ãˆã‚‰ã‚Œã¦ãEªãE€¤ã‚’補間 for i := 0; i <= 18; i++ { var d float64 = float64(i) * 0.5 - 4.5 var d1 float64 = f(d) var d2 float64 = neville(d, x[:], y[:]) // å…EE関数ã¨æ¯”è¼E fmt.Printf("%5.2f\t%8.5f\t%8.5f\t%8.5f\n", d, d1, d2, d1 - d2) } } // å…EE関数 func f(x float64) float64 { return x - math.Pow(x,3) / (3 * 2) + math.Pow(x,5) / (5 * 4 * 3 * 2) } // Neville (ãƒãƒ´ã‚£ãƒ«) 補間 func neville(d float64, x []float64, y []float64) float64 { var w[N][N] float64 for i := 0; i < N; i++ { w[0][i] = y[i] } for j := 1; j < N; j++ { for i := 0; i < N - j; i++ { w[j][i] = w[j-1][i+1] + (w[j-1][i+1] - w[j-1][i]) * (d - x[i+j]) / (x[i+j] - x[i]) } } return w[N-1][0] } package main import "fmt" import "math" // ãƒEEタ点ã®æ•° const N = 7 func main() { var x [N]float64 var y [N]float64 // 1.5刻ã¿ã§ -4.5EE.5 ã¾ã§, E—点ã ã‘値をセãƒEƒˆ for i := 0; i < N; i++ { var d float64 = float64(i) * 1.5 - 4.5 x[i] = d y[i] = f(d) } // å·®åˆE•†ã®è¡¨ã‚’作る var d[N][N] float64 for j := 0; j < N; j++ { d[0][j] = y[j] } for i := 1; i < N; i++ { for j := 0; j < N - i; j++ { d[i][j] = (d[i-1][j+1] - d[i-1][j]) / (x[j+i] - x[j]) } } // EŽéšŽå·®åˆE•† var a [N]float64 for j := 0; j < N; j++ { a[j] = d[j][0] } // 0.5刻ã¿ã§ 与ãˆã‚‰ã‚Œã¦ãEªãE€¤ã‚’補間 for i := 0; i <= 18; i++ { var d float64 = float64(i) * 0.5 - 4.5 var d1 float64 = f(d) var d2 float64 = newton(d, x[:], a[:]) // å…EE関数ã¨æ¯”è¼E fmt.Printf("%5.2f\t%8.5f\t%8.5f\t%8.5f\n", d, d1, d2, d1 - d2) } } // å…EE関数 func f(x float64) float64 { return x - math.Pow(x,3) / (3 * 2) + math.Pow(x,5) / (5 * 4 * 3 * 2) } // Newton (ニュートン) 補間 func newton(d float64, x []float64, a []float64) float64 { var sum float64 = a[0] for i := 1; i < N; i++ { var prod float64 = a[i] for j := 0; j < i; j++ { prod *= (d - x[j]) } sum += prod } return sum } package main import "fmt" import "math" // ãƒEEタ点ã®æ•° const N = 7 const Nx2 = 14 func main() { var x [N]float64 var y [N]float64 var yd [N]float64 // 1.5刻ã¿ã§ -4.5EE.5 ã¾ã§, E—点ã ã‘値をセãƒEƒˆ for i := 0; i < N; i++ { var d float64 = float64(i) * 1.5 - 4.5 x[i] = d y[i] = f(d) yd[i] = fd(d) } // å·®åˆE•†ã®è¡¨ã‚’作る var z[Nx2] float64 var d[Nx2][Nx2] float64 for i := 0; i < Nx2; i++ { j := i / 2 z[i] = x[j] d[0][i] = y[j] } for i := 1; i < Nx2; i++ { for j := 0; j < Nx2 - i; j++ { if (i == 1 && j % 2 == 0) { d[i][j] = yd[j / 2] } else { d[i][j] = (d[i-1][j+1] - d[i-1][j]) / (z[j+i] - z[j]) } } } // EŽéšŽå·®åˆE•† var a[Nx2] float64 for j := 0; j < Nx2; j++ { a[j] = d[j][0] } // 0.5刻ã¿ã§ 与ãˆã‚‰ã‚Œã¦ãEªãE€¤ã‚’補間 for i := 0; i <= 18; i++ { var d float64 = float64(i) * 0.5 - 4.5 var d1 float64 = f(d) var d2 float64 = hermite(d, z[:], a[:]) // å…EE関数ã¨æ¯”è¼E fmt.Printf("%5.2f\t%8.5f\t%8.5f\t%8.5f\n", d, d1, d2, d1 - d2) } } // å…EE関数 func f(x float64) float64 { return x - math.Pow(x,3) / (3 * 2) + math.Pow(x,5) / (5 * 4 * 3 * 2) } // 導関数 func fd(x float64) float64 { return 1 - math.Pow(x,2) / 2 + math.Pow(x,4) / (4 * 3 * 2) } // Hermite (エルミãEãƒE 補間 func hermite(d float64, z []float64, a []float64) float64 { var sum float64 = a[0] for i := 1; i < Nx2; i++ { var prod float64 = a[i] for j := 0; j < i; j++ { prod *= (d - z[j]) } sum += prod } return sum } package main import "fmt" import "math" // ãƒEEタ点ã®æ•° const N = 7 func main() { var x [N]float64 var y [N]float64 // 1.5刻ã¿ã§ -4.5EE.5 ã¾ã§, E—点ã ã‘値をセãƒEƒˆ for i := 0; i < N; i++ { var d float64 = float64(i) * 1.5 - 4.5 x[i] = d y[i] = f(d) } // E“é E–¹ç¨‹å¼ãEä¿‚æ•°ã®è¡¨ã‚’作る var a [N]float64 var b [N]float64 var c [N]float64 var d [N]float64 for i := 1; i < N - 1; i++ { a[i] = x[i] - x[i-1] b[i] = 2.0 * (x[i+1] - x[i-1]) c[i] = x[i+1] - x[i] d[i] = 6.0 * ((y[i+1] - y[i]) / (x[i+1] - x[i]) - (y[i] - y[i-1]) / (x[i] - x[i-1])) } // E“é E–¹ç¨‹å¼ã‚’解ãE(トï¼ãEスæ³E var g [N]float64 var s [N]float64 g[1] = b[1] s[1] = d[1] for i := 2; i < N - 1; i++ { g[i] = b[i] - a[i] * c[i-1] / g[i-1] s[i] = d[i] - a[i] * s[i-1] / g[i-1] } var z [N]float64 z[0] = 0 z[N-1] = 0 z[N-2] = s[N-2] / g[N-2] for i := N - 3; i >= 1; i-- { z[i] = (s[i] - c[i] * z[i+1]) / g[i] } // 0.5刻ã¿ã§ 与ãˆã‚‰ã‚Œã¦ãEªãE€¤ã‚’補間 for i := 0; i <= 18; i++ { var d1 float64 = float64(i) * 0.5 - 4.5 var d2 float64 = f(d1) var d3 float64 = spline(d1, x[:], y[:], z[:]) // å…EE関数ã¨æ¯”è¼E fmt.Printf("%5.2f\t%8.5f\t%8.5f\t%8.5f\n", d1, d2, d3, d2 - d3) } } // å…EE関数 func f(x float64) float64 { return x - math.Pow(x,3) / (3 * 2) + math.Pow(x,5) / (5 * 4 * 3 * 2) } // Spline (スプライン) 補間 func spline(d float64, x []float64, y []float64, z []float64) float64 { // 補間関数値ãŒã©ã®åŒºé–“ã«ã‚ã‚‹ãE k := -1 for i := 1; i < N; i++ { if d <= x[i] { k = i - 1 break } } if k < 0 { k = N - 1 } var d1 float64 = x[k+1] - d var d2 float64 = d - x[k] var d3 float64 = x[k+1] - x[k] return (z[k] * math.Pow(d1,3) + z[k+1] * math.Pow(d2,3)) / (6.0 * d3) + (y[k] / d3 - z[k] * d3 / 6.0) * d1 + (y[k+1] / d3 - z[k+1] * d3 / 6.0) * d2 } package main import "fmt" import "math" // é‡åŠ›åŠ 速度 const g float64 = -9.8 // 空気抵抗係数 const k float64 = -0.01 // 時間間隔(ç§E const h float64 = 0.01 func main() { // 角度 var degree float64 = 45 var radian float64 = degree * math.Pi / 180.0 // åˆé€E250 km/h -> 秒速ã«å¤‰æ› var v float64 = 250 * 1000 / 3600 // 水平方å‘ãE速度 var vx[2] float64 vx[0] = v * math.Cos(radian) // 鉛直方å‘ãE速度 var vy[2] float64 vy[0] = v * math.Sin(radian) // 経éŽç§’æ•° var t float64 = 0.0 // ä½ç½® var x float64 = 0.0 var y float64 = 0.0 // Euleræ³E for i := 1; y >= 0.0; i++ { // 経éŽç§’æ•° t = float64(i) * h // ä½ç½® x += h * vx[0] y += h * vy[0] fmt.Printf("%4.2f\t%8.5f\t%9.5f\t%9.5f\t%8.5f\n", t, vx[0], vy[0], x, y) // 速度 vx[1] = vx[0] + h * fx(vx[0], vy[0]) vy[1] = vy[0] + h * fy(vx[0], vy[0]) vx[0] = vx[1] vy[0] = vy[1] } } // 空気抵抗ã«ã‚ˆã‚‹æ°´å¹³æ–¹å‘ãE減速åE func fx(vx float64, vy float64) float64 { return k * math.Sqrt(vx * vx + vy * vy) * vx } // é‡åŠ›ã¨ç©ºæ°—抵抗ã«ã‚ˆã‚‹é‰›ç›´æ–¹å‘ãE減速åE func fy(vx float64, vy float64) float64 { return g + (k * math.Sqrt(vx * vx + vy * vy) * vy) } package main import "fmt" import "math" // é‡åŠ›åŠ 速度 const g float64 = -9.8 // 空気抵抗係数 const k float64 = -0.01 // 時間間隔(ç§E const h float64 = 0.01 func main() { // 角度 var degree float64 = 45 var radian float64 = degree * math.Pi / 180.0 // åˆé€E250 km/h -> 秒速ã«å¤‰æ› var v float64 = 250 * 1000 / 3600 // 水平方å‘ãE速度 var vx[3] float64 vx[0] = v * math.Cos(radian) // 鉛直方å‘ãE速度 var vy[3] float64 vy[0] = v * math.Sin(radian) // 経éŽç§’æ•° var t float64 = 0.0 // ä½ç½® var x[3] float64 x[0] = 0.0 var y[3] float64 y[0] = 0.0 // Heunæ³E for i := 1; y[0] >= 0.0; i++ { // 経éŽç§’æ•° t = float64(i) * h // ä½ç½®ãƒ»é€Ÿåº¦ x[1] = x[0] + h * vx[0] y[1] = y[0] + h * vy[0] vx[1] = vx[0] + h * fx(vx[0], vy[0]) vy[1] = vy[0] + h * fy(vx[0], vy[0]) x[2] = x[0] + h * ( vx[0] + vx[1] ) / 2 y[2] = y[0] + h * ( vy[0] + vy[1] ) / 2 vx[2] = vx[0] + h * (fx(vx[0], vy[0]) + fx(vx[1], vy[1])) / 2 vy[2] = vy[0] + h * (fy(vx[0], vy[0]) + fy(vx[1], vy[1])) / 2 x[0] = x[2] y[0] = y[2] vx[0] = vx[2] vy[0] = vy[2] fmt.Printf("%4.2f\t%8.5f\t%9.5f\t%9.5f\t%9.5f\n", t, vx[0], vy[0], x[0], y[0]) } } // 空気抵抗ã«ã‚ˆã‚‹æ°´å¹³æ–¹å‘ãE減速åE func fx(vx float64, vy float64) float64 { return k * math.Sqrt(vx * vx + vy * vy) * vx } // é‡åŠ›ã¨ç©ºæ°—抵抗ã«ã‚ˆã‚‹é‰›ç›´æ–¹å‘ãE減速åE func fy(vx float64, vy float64) float64 { return g + (k * math.Sqrt(vx * vx + vy * vy) * vy) } package main import "fmt" import "math" // é‡åŠ›åŠ 速度 const g float64 = -9.8 // 空気抵抗係数 const k float64 = -0.01 // 時間間隔(ç§E const h float64 = 0.01 func main() { // 角度 var degree float64 = 45 var radian float64 = degree * math.Pi / 180.0 // åˆé€E250 km/h -> 秒速ã«å¤‰æ› var v float64 = 250 * 1000 / 3600 // 水平方å‘ãE速度 var vx[2] float64 vx[0] = v * math.Cos(radian) // 鉛直方å‘ãE速度 var vy[2] float64 vy[0] = v * math.Sin(radian) // 経éŽç§’æ•° var t float64 = 0.0 // ä½ç½® var x[2] float64 x[0] = 0.0 var y[2] float64 y[0] = 0.0 // ä¸ç‚¹æ³E for i := 1; y[0] >= 0.0; i++ { // 経éŽç§’æ•° t = float64(i) * h // ä½ç½®ãƒ»é€Ÿåº¦ vx[1] = h * fx(vx[0], vy[0]) vy[1] = h * fy(vx[0], vy[0]) var wx float64 = vx[0] + vx[1] / 2 var wy float64 = vy[0] + vy[1] / 2 vx[0] = vx[0] + h * fx(wx, wy) vy[0] = vy[0] + h * fy(wx, wy) x[0] = x[0] + h * wx y[0] = y[0] + h * wy fmt.Printf("%4.2f\t%8.5f\t%9.5f\t%9.5f\t%9.5f\n", t, vx[0], vy[0], x[0], y[0]) } } // 空気抵抗ã«ã‚ˆã‚‹æ°´å¹³æ–¹å‘ãE減速åE func fx(vx float64, vy float64) float64 { return k * math.Sqrt(vx * vx + vy * vy) * vx } // é‡åŠ›ã¨ç©ºæ°—抵抗ã«ã‚ˆã‚‹é‰›ç›´æ–¹å‘ãE減速åE func fy(vx float64, vy float64) float64 { return g + (k * math.Sqrt(vx * vx + vy * vy) * vy) } package main import "fmt" import "math" // é‡åŠ›åŠ 速度 const g float64 = -9.8 // 空気抵抗係数 const k float64 = -0.01 // 時間間隔(ç§E const h float64 = 0.01 func main() { // 角度 var degree float64 = 45 var radian float64 = degree * math.Pi / 180.0 // åˆé€E250 km/h -> 秒速ã«å¤‰æ› var v float64 = 250 * 1000 / 3600 // 水平方å‘ãE速度 var vx[5] float64 vx[0] = v * math.Cos(radian) // 鉛直方å‘ãE速度 var vy[5] float64 vy[0] = v * math.Sin(radian) // 経éŽç§’æ•° var t float64 = 0.0 // ä½ç½® var x[5] float64 x[0] = 0.0 var y[5] float64 y[0] = 0.0 // Runge-Kuttaæ³E for i := 1; y[0] >= 0.0; i++ { // 経éŽç§’æ•° t = float64(i) * h // ä½ç½®ãƒ»é€Ÿåº¦ x[1] = h * vx[0] y[1] = h * vy[0] vx[1] = h * fx(vx[0], vy[0]) vy[1] = h * fy(vx[0], vy[0]) var wx float64 = vx[0] + vx[1] / 2 var wy float64 = vy[0] + vy[1] / 2 x[2] = h * wx y[2] = h * wy vx[2] = h * fx(wx, wy) vy[2] = h * fy(wx, wy) wx = vx[0] + vx[2] / 2 wy = vy[0] + vy[2] / 2 x[3] = h * wx y[3] = h * wy vx[3] = h * fx(wx, wy) vy[3] = h * fy(wx, wy) wx = vx[0] + vx[3] wy = vy[0] + vy[3] x[4] = h * wx y[4] = h * wy vx[4] = h * fx(wx, wy) vy[4] = h * fy(wx, wy) x[0] += ( x[1] + x[2] * 2 + x[3] * 2 + x[4]) / 6 y[0] += ( y[1] + y[2] * 2 + y[3] * 2 + y[4]) / 6 vx[0] += (vx[1] + vx[2] * 2 + vx[3] * 2 + vx[4]) / 6 vy[0] += (vy[1] + vy[2] * 2 + vy[3] * 2 + vy[4]) / 6 fmt.Printf("%4.2f\t%8.5f\t%9.5f\t%9.5f\t%9.5f\n", t, vx[0], vy[0], x[0], y[0]) } } // 空気抵抗ã«ã‚ˆã‚‹æ°´å¹³æ–¹å‘ãE減速åE func fx(vx float64, vy float64) float64 { return k * math.Sqrt(vx * vx + vy * vy) * vx } // é‡åŠ›ã¨ç©ºæ°—抵抗ã«ã‚ˆã‚‹é‰›ç›´æ–¹å‘ãE減速åE func fy(vx float64, vy float64) float64 { return g + (k * math.Sqrt(vx * vx + vy * vy) * vy) } package main import "fmt" import "math" // é‡åŠ›åŠ 速度 const g float64 = -9.8 // 空気抵抗係数 const k float64 = -0.01 // 時間間隔(ç§E const h float64 = 0.01 func main() { // 角度 var degree float64 = 45 var radian float64 = degree * math.Pi / 180.0 // åˆé€E250 km/h -> 秒速ã«å¤‰æ› var v float64 = 250 * 1000 / 3600 // 水平方å‘ãE速度 var vx[5] float64 vx[0] = v * math.Cos(radian) // 鉛直方å‘ãE速度 var vy[5] float64 vy[0] = v * math.Sin(radian) // 経éŽç§’æ•° var t float64 = 0.0 // ä½ç½® var x[5] float64 x[0] = 0.0 var y[5] float64 y[0] = 0.0 // Runge-Kutta-Gillæ³E for i := 1; y[0] >= 0.0; i++ { // 経éŽç§’æ•° t = float64(i) * h // ä½ç½®ãƒ»é€Ÿåº¦ x[1] = h * vx[0] y[1] = h * vy[0] vx[1] = h * fx(vx[0], vy[0]) vy[1] = h * fy(vx[0], vy[0]) var wx float64 = vx[0] + vx[1] / 2 var wy float64 = vy[0] + vy[1] / 2 x[2] = h * wx y[2] = h * wy vx[2] = h * fx(wx, wy) vy[2] = h * fy(wx, wy) wx = vx[0] + vx[1] * ((math.Sqrt(2.0) - 1) / 2) + vx[2] * (1 - 1 / math.Sqrt(2.0)) wy = vy[0] + vy[1] * ((math.Sqrt(2.0) - 1) / 2) + vy[2] * (1 - 1 / math.Sqrt(2.0)) x[3] = h * wx y[3] = h * wy vx[3] = h * fx(wx, wy) vy[3] = h * fy(wx, wy) wx = vx[0] - vx[2] / math.Sqrt(2.0) + vx[3] * (1 + 1 / math.Sqrt(2.0)) wy = vy[0] - vy[2] / math.Sqrt(2.0) + vy[3] * (1 + 1 / math.Sqrt(2.0)) x[4] = h * wx y[4] = h * wy vx[4] = h * fx(wx, wy) vy[4] = h * fy(wx, wy) x[0] += ( x[1] + x[2] * (2 - math.Sqrt(2.0)) + x[3] * (2 + math.Sqrt(2.0)) + x[4]) / 6 y[0] += ( y[1] + y[2] * (2 - math.Sqrt(2.0)) + y[3] * (2 + math.Sqrt(2.0)) + y[4]) / 6 vx[0] += (vx[1] + vx[2] * (2 - math.Sqrt(2.0)) + vx[3] * (2 + math.Sqrt(2.0)) + vx[4]) / 6 vy[0] += (vy[1] + vy[2] * (2 - math.Sqrt(2.0)) + vy[3] * (2 + math.Sqrt(2.0)) + vy[4]) / 6 fmt.Printf("%4.2f\t%8.5f\t%9.5f\t%9.5f\t%9.5f\n", t, vx[0], vy[0], x[0], y[0]) } } // 空気抵抗ã«ã‚ˆã‚‹æ°´å¹³æ–¹å‘ãE減速åE func fx(vx float64, vy float64) float64 { return k * math.Sqrt(vx * vx + vy * vy) * vx } // é‡åŠ›ã¨ç©ºæ°—抵抗ã«ã‚ˆã‚‹é‰›ç›´æ–¹å‘ãE減速åE func fy(vx float64, vy float64) float64 { return g + (k * math.Sqrt(vx * vx + vy * vy) * vy) } package main import "fmt" import "math" func main() { var a float64 = 1 var b float64 = 2 fmt.Printf("%12.10f\n", bisection(a, b)) } func bisection(a float64, b float64) float64 { var c float64 for { // 区é–E(a, b) ã®ä¸ç‚¹ c = (a + b) / 2 c = (a + b) / 2 fmt.Printf("%12.10f\t%13.10f\n", c, c - math.Sqrt(2)) var fc float64 = f(c) if math.Fabs(fc) < 0.0000000001 { break } if fc < 0 { // f(c) < 0 ã§ã‚ã‚Œã°, 解ã¯åŒºé–E(c, b) ã®ä¸ã«å˜åœ¨ a = c } else { // f(c) > 0 ã§ã‚ã‚Œã°, 解ã¯åŒºé–E(a, c) ã®ä¸ã«å˜åœ¨ b = c } } return c } func f(x float64) float64 { return x * x - 2 } package main import "fmt" import "math" func main() { var a float64 = 1 var b float64 = 2 fmt.Printf("%12.10f\n", falseposition(a, b)) } func falseposition(a float64, b float64) float64 { var c float64 for { // 点 (a,f(a)) 㨠点 (b,f(b)) ã‚’çµãE直線㨠x軸ã®äº¤ç‚¹ c = (a * f(b) - b * f(a)) / (f(b) - f(a)) fmt.Printf("%12.10f\t%13.10f\n", c, c - math.Sqrt(2)) var fc float64 = f(c) if math.Fabs(fc) < 0.0000000001 { break } if fc < 0 { // f(c) < 0 ã§ã‚ã‚Œã°, 解ã¯åŒºé–E(c, b) ã®ä¸ã«å˜åœ¨ a = c } else { // f(c) > 0 ã§ã‚ã‚Œã°, 解ã¯åŒºé–E(a, c) ã®ä¸ã«å˜åœ¨ b = c } } return c } func f(x float64) float64 { return x * x - 2 } package main import "fmt" import "math" func main() { var x float64 = 1 fmt.Printf("%12.10f\n", iterative(x)) } func iterative(x0 float64) float64 { var x1 float64 for { x1 = g(x0) fmt.Printf("%12.10f\t%13.10f\n", x1, x1 - math.Sqrt(2)) if math.Fabs(x1 - x0) < 0.0000000001 { break } x0 = x1 } return x1 } func g(x float64) float64 { return (x / 2) + (1 / x) } package main import "fmt" import "math" func main() { var x float64 = 2 fmt.Printf("%12.10f\n", newton(x)) } func newton(x0 float64) float64 { var x1 float64 for { x1 = x0 - (f0(x0) / f1(x0)) fmt.Printf("%12.10f\t%13.10f\n", x1, x1 - math.Sqrt(2)) if math.Fabs(x1 - x0) < 0.0000000001 { break } x0 = x1 } return x1 } func f0(x float64) float64 { return x * x - 2 } func f1(x float64) float64 { return 2 * x } package main import "fmt" import "math" func main() { var x float64 = 2 fmt.Printf("%12.10f\n", bailey(x)) } func bailey(x0 float64) float64 { var x1 float64 for { x1 = x0 - (f0(x0) / (f1(x0) - (f0(x0) * f2(x0) / (2 * f1(x0))))) fmt.Printf("%12.10f\t%13.10f\n", x1, x1 - math.Sqrt(2)) if math.Fabs(x1 - x0) < 0.0000000001 { break } x0 = x1 } return x1 } func f0(x float64) float64 { return x * x - 2 } func f1(x float64) float64 { return 2 * x } func f2(x float64) float64 { return 2 } package main import "fmt" import "math" func main() { var x0 float64 = 1 var x1 float64 = 2 fmt.Printf("%12.10f\n", secant(x0, x1)) } func secant(x0 float64, x1 float64) float64 { var x2 float64 for { x2 = x1 - f(x1) * (x1 - x0) / (f(x1) - f(x0)) fmt.Printf("%12.10f\t%13.10f\n", x2, x2 - math.Sqrt(2)) if math.Fabs(x2 - x1) < 0.0000000001 { break } x0 = x1 x1 = x2 } return x2 } func f(x float64) float64 { return x * x - 2 } package main import "fmt" import "math" const N = 4 func main() { var a [N][N]float64 = [N][N]float64{{9,2,1,1},{2,8,-2,1},{-1,-2,7,-2},{1,-1,-2,6}} var b = []float64{20,16,8,17} var c = []float64{0,0,0,0} jacobi(a,b,c) fmt.Println("X") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", c[i]) } fmt.Println("") } func jacobi(a[N][N]float64, b[]float64, x0[]float64) { for { var x1 = []float64{0,0,0,0} var finish = true for i := 0; i < N; i++ { x1[i] = b[i] for j := 0; j < N; j++ { if (j != i) { x1[i] -= a[i][j] * x0[j] } } x1[i] /= a[i][i] if (math.Abs(x1[i] - x0[i]) > 0.0000000001) { finish = false } } for i := 0; i < N; i++ { x0[i] = x1[i] fmt.Printf("%14.10f\t", x1[i]) } fmt.Println("") if (finish) { return } } } package main import "fmt" import "math" const N = 4 func main() { var a [N][N]float64 = [N][N]float64{{9,2,1,1},{2,8,-2,1},{-1,-2,7,-2},{1,-1,-2,6}} var b = []float64{20,16,8,17} var c = []float64{0,0,0,0} gauss(a,b,c) fmt.Println("X") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", c[i]) } fmt.Println("") } func gauss(a[N][N]float64, b[]float64, x0[]float64) { for { var x1 float64 var finish = true for i := 0; i < N; i++ { x1 = b[i] for j := 0; j < N; j++ { if (j != i) { x1 -= a[i][j] * x0[j] } } x1 /= a[i][i] if (math.Abs(x1 - x0[i]) > 0.0000000001) { finish = false } x0[i] = x1 } for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", x0[i]) } fmt.Println("") if (finish) { return } } } package main import "fmt" import "math" const N = 4 func main() { var a [N][N]float64 = [N][N]float64{{-1,-2,7,-2},{1,-1,-2,6},{9,2,1,1},{2,8,-2,1}} var b []float64 = []float64{8,17,20,16} pivoting(&a,b) fmt.Println("pivoting") disp_progress(a,b) forward_elimination(&a,b) fmt.Println("forward_elimination") disp_progress(a,b) backward_substitution(&a,b) fmt.Println("X") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", b[i]) } fmt.Println("") } func forward_elimination(a *[N][N]float64, b []float64) { for pivot := 0; pivot < N - 1; pivot++ { for row := pivot + 1; row < N; row++ { var s = a[row][pivot] / a[pivot][pivot] for col := pivot; col < N; col++ { a[row][col] -= a[pivot][col] * s } b[row] -= b[pivot] * s } } } func backward_substitution(a *[N][N]float64, b []float64) { for row := N - 1; row >= 0; row-- { for col := N - 1; col > row; col-- { b[row] -= a[row][col] * b[col] } b[row] /= a[row][row] } } func pivoting(a *[N][N]float64, b []float64) { for pivot := 0; pivot < N; pivot++ { var max_row = pivot var max_val float64 = 0.0 for row := pivot; row < N; row++ { if math.Abs(a[row][pivot]) > max_val { max_val = math.Abs(a[row][pivot]) max_row = row } } if (max_row != pivot) { var tmp float64 = 0.0 for col := 0; col < N; col++ { tmp = a[max_row][col] a[max_row][col] = a[pivot][col] a[pivot][col] = tmp } tmp = b[max_row] b[max_row] = b[pivot] b[pivot] = tmp } } } func disp_progress(a[N][N]float64, b[]float64) { for i := 0; i < N; i++ { for j := 0; j < N; j++ { fmt.Printf("%14.10f\t", a[i][j]) } fmt.Printf("%14.10f\t\n", b[i]) } fmt.Println() } package main import "fmt" import "math" const N = 4 func main() { var a [N][N]float64 = [N][N]float64{{-1,-2,7,-2},{1,-1,-2,6},{9,2,1,1},{2,8,-2,1}} var b []float64 = []float64{8,17,20,16} pivoting(&a,b) fmt.Println("pivoting") disp_progress(a,b) forward_elimination(&a,b) fmt.Println("forward_elimination") disp_progress(a,b) backward_substitution(&a,b) fmt.Println("X") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", b[i]) } fmt.Println("") } func forward_elimination(a *[N][N]float64, b []float64) { for pivot := 0; pivot < N; pivot++ { var s = a[pivot][pivot] for col := 0; col < N; col++ { a[pivot][col] /= s } b[pivot] /= s } fmt.Println("forward_elimination") disp_progress(*a,b) for pivot := 0; pivot < N; pivot++ { for row := 0; row < N; row++ { if (row == pivot) { continue } var s = a[row][pivot] / a[pivot][pivot] for col := pivot; col < N; col++ { a[row][col] -= a[pivot][col] * s } b[row] -= b[pivot] * s } } } func backward_substitution(a *[N][N]float64, b []float64) { for pivot := 0; pivot < N; pivot++ { b[pivot] /= a[pivot][pivot] } } func pivoting(a *[N][N]float64, b []float64) { for pivot := 0; pivot < N; pivot++ { var max_row = pivot var max_val float64 = 0.0 for row := pivot; row < N; row++ { if math.Abs(a[row][pivot]) > max_val { max_val = math.Abs(a[row][pivot]) max_row = row } } if (max_row != pivot) { var tmp float64 = 0.0 for col := 0; col < N; col++ { tmp = a[max_row][col] a[max_row][col] = a[pivot][col] a[pivot][col] = tmp } tmp = b[max_row] b[max_row] = b[pivot] b[pivot] = tmp } } } func disp_progress(a[N][N]float64, b[]float64) { for i := 0; i < N; i++ { for j := 0; j < N; j++ { fmt.Printf("%14.10f\t", a[i][j]) } fmt.Printf("%14.10f\t\n", b[i]) } fmt.Println() } package main import "fmt" import "math" const N = 4 func main() { var a [N][N]float64 = [N][N]float64{{-1,-2,7,-2},{1,-1,-2,6},{9,2,1,1},{2,8,-2,1}} var b []float64 = []float64{8,17,20,16} pivoting(&a,b) fmt.Println("pivoting") disp_progress(a,b) // LU var x []float64 = []float64{0,0,0,0} decomp(&a,b,x) fmt.Println("X") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", x[i]) } fmt.Println() } // LU func decomp(a *[N][N]float64, b []float64, x []float64) { // forward_elimination(a,b) // fmt.Println("L") for i := 0; i < N; i++ { for j := 0; j < N; j++ { if (i > j) { fmt.Printf("%14.10f\t", a[i][j]) } else if (i == j) { fmt.Printf("%14.10f\t", 1.0) } else { fmt.Printf("%14.10f\t", 0.0) } } fmt.Println() } fmt.Println() // fmt.Println("U") for i := 0; i < N; i++ { for j := 0; j < N; j++ { if (i <= j) { fmt.Printf("%14.10f\t", a[i][j]) } else { fmt.Printf("%14.10f\t", 0.0) } } fmt.Println() } fmt.Println() // Ly=b var y []float64 = []float64{0,0,0,0} for row := 0; row < N; row++ { for col := 0; col < row; col++ { b[row] -= a[row][col] * y[col] } y[row] = b[row] } // y fmt.Println("Y") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", y[i]) } fmt.Println("\n") // Ux=y for row := N - 1; row >= 0; row-- { for col := N - 1; col > row; col-- { y[row] -= a[row][col] * x[col] } x[row] = y[row] / a[row][row] } } // func forward_elimination(a *[N][N]float64, b []float64) { for pivot := 0; pivot < N - 1; pivot++ { for row := pivot + 1; row < N; row++ { var s = a[row][pivot] / a[pivot][pivot] for col := pivot; col < N; col++ { a[row][col] -= a[pivot][col] * s // } a[row][pivot] = s // // b[row] -= b[pivot] * s // } } } func pivoting(a *[N][N]float64, b []float64) { for pivot := 0; pivot < N; pivot++ { var max_row = pivot var max_val float64 = 0.0 for row := pivot; row < N; row++ { if math.Abs(a[row][pivot]) > max_val { max_val = math.Abs(a[row][pivot]) max_row = row } } if (max_row != pivot) { var tmp float64 = 0.0 for col := 0; col < N; col++ { tmp = a[max_row][col] a[max_row][col] = a[pivot][col] a[pivot][col] = tmp } tmp = b[max_row] b[max_row] = b[pivot] b[pivot] = tmp } } } func disp_progress(a[N][N]float64, b[]float64) { for i := 0; i < N; i++ { for j := 0; j < N; j++ { fmt.Printf("%14.10f\t", a[i][j]) } fmt.Printf("%14.10f\t\n", b[i]) } fmt.Println() } package main import "fmt" import "math" const N = 4 func main() { var a [N][N]float64 = [N][N]float64{{5,2,3,4},{2,10,6,7},{3,6,15,9},{4,7,9,20}} var b []float64 = []float64{34,68,96,125} fmt.Println("A") disp_progress(a) // LU var x []float64 = []float64{0,0,0,0} decomp(&a,b,x) fmt.Println("X") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", x[i]) } fmt.Println() } // LU func decomp(a *[N][N]float64, b []float64, x []float64) { // forward_elimination(a,b) // fmt.Println("L") for i := 0; i < N; i++ { for j := 0; j < N; j++ { if (j <= i) { fmt.Printf("%14.10f\t", a[i][j]) } else { fmt.Printf("%14.10f\t", a[j][i]) } } fmt.Println() } fmt.Println() // // Ly=b var y []float64 = []float64{0,0,0,0} for row := 0; row < N; row++ { for col := 0; col < row; col++ { b[row] -= a[row][col] * y[col] } y[row] = b[row] / a[row][row] } // y fmt.Println("Y") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", y[i]) } fmt.Println("\n") // Ux=y for row := N - 1; row >= 0; row-- { for col := N - 1; col > row; col-- { y[row] -= a[col][row] * x[col] } x[row] = y[row] / a[row][row] } } // func forward_elimination(a *[N][N]float64, b []float64) { for pivot := 0; pivot < N; pivot++ { var s = 0.0 for col := 0; col < pivot; col++ { s += a[pivot][col] * a[pivot][col] } a[pivot][pivot] = math.Sqrt(a[pivot][pivot] - s) for row := pivot + 1; row < N; row++ { s = a[row][pivot] / a[pivot][pivot] s = 0 for col := 0; col < pivot; col++ { s += a[row][col] * a[pivot][col] } a[row][pivot] = (a[row][pivot] - s) / a[pivot][pivot] } } } func disp_progress(a[N][N]float64) { for i := 0; i < N; i++ { for j := 0; j < N; j++ { fmt.Printf("%14.10f\t", a[i][j]) } fmt.Println() } } package main import "fmt" const N = 4 func main() { var a [N][N]float64 = [N][N]float64{{5,2,3,4},{2,10,6,7},{3,6,15,9},{4,7,9,20}} var b []float64 = []float64{34,68,96,125} fmt.Println("A") disp_progress(a) // LU var x []float64 = []float64{0,0,0,0} decomp(&a,b,x) fmt.Println("X") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", x[i]) } fmt.Println() } // LU func decomp(a *[N][N]float64, b []float64, x []float64) { // forward_elimination(a,b) // fmt.Println("L") for i := 0; i < N; i++ { for j := 0; j < N; j++ { if (j <= i) { fmt.Printf("%14.10f\t", a[i][j]) } else { fmt.Printf("%14.10f\t", a[j][i]) } } fmt.Println() } fmt.Println() // // Ly=b var y []float64 = []float64{0,0,0,0} for row := 0; row < N; row++ { for col := 0; col < row; col++ { b[row] -= a[row][col] * y[col] } y[row] = b[row] } // y fmt.Println("Y") for i := 0; i < N; i++ { fmt.Printf("%14.10f\t", y[i]) } fmt.Println("\n") // Ux=y for row := N - 1; row >= 0; row-- { for col := N - 1; col > row; col-- { y[row] -= a[col][row] * a[row][row] * x[col] } x[row] = y[row] / a[row][row] } } // func forward_elimination(a *[N][N]float64, b []float64) { for pivot := 0; pivot < N; pivot++ { var s = 0.0 // pivot < k for col := 0; col < pivot; col++ { s = a[pivot][col] for k := 0; k < col; k++ { s -= a[pivot][k] * a[col][k] * a[k][k] } a[pivot][col] = s / a[col][col] } // pivot == k s = a[pivot][pivot] for k := 0; k < pivot; k++ { s -= a[pivot][k] * a[pivot][k] * a[k][k] } a[pivot][pivot] = s } } func disp_progress(a[N][N]float64) { for i := 0; i < N; i++ { for j := 0; j < N; j++ { fmt.Printf("%14.10f\t", a[i][j]) } fmt.Println() } } |