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()
    }
}
inserted by FC2 system