import sys

print 3 + 5
print 3 - 5
print 3 * 5
print 3 ** 5
print 5 / 3.0
print 5.0 / 3
print 5 / 3
print 5 % 3

sys.stdout.write(str(3 * 5) + "\n")

print "%3d"     % (3 * 5)
print "%23.20f" % (5 / 3.0)
i = 3 * 5
print "3 * 5 =", i
print "3 * 5 = %d" % i
for i in range(1, 10):
    print i, ",",
for i in range(1, 10):
    if i % 3 == 0:
        print i, ",",
sum = 0
for i in range(1, 100):
    if i % 3 == 0:
        sum += i
print sum

sum = 0
for i in range(1, 100):
    sum += i if i % 3 == 0 else 0
print sum
range(1, 10)
[n for n in range(1, 10) if (n % 3 == 0)]
filter(lambda n: (n % 3 == 0), range(1, 10))
ary = [n for n in range(1, 100) if (n % 3 == 0)]
reduce(lambda x, y: x + y, ary, 0)
sum([n for n in range(1, 100) if (n % 3 == 0)])
# coding: Shift_JIS

# 初項:a, 公差:a で 上限:lim の数列の総和を返す関数
def sn(a, lim):
    n = int(lim) / a        # 項数:n  =  上限:lim / 公差:a
    l = n * a               # 末項:l  =  項数:n   * 公差:a
    return (a + l) * n / 2  # 総和:sn = (初項:a   + 末項:l) * 項数:n / 2

# 3 の倍数の合計
print sn(3, 999)
# coding: Shift_JIS

# 10000 までの 自然数の和
# 項目数 n = 10000
n = 10000
print (n * (n + 1) / 2)
# 10000 までの 偶数の和
# 項目数 n = 5000
n = 10000 / 2
print (n * (n + 1))
# 10000 までの 奇数の和
# 項目数 n = 5000
n = 10000 / 2
print (n ** 2)
# 1000 までの 自然数の2乗の和
n = 1000
print (n * (n + 1) * (2 * n + 1) / 6)
# 100 までの 自然数の3乗の和
n = 100
print ((n ** 2) * ((n + 1) ** 2) / 4)
# 初項 2, 公比 3, 項数 10 の等比数列の和
n = 10
a = 2
r = 3
print ((a * ((r ** n) - 1)) / (r - 1))
a = 5  # 初項 5
d = 3  # 公差 3
n = 10 # 項数 10
p = 1  # 積

for i in range(1, n + 1):
    m = a + (d * (i - 1))
    p *= m
print p
def product(m, d, n):
    if (n == 0):
        return 1
    else:
        return m * product(m + d, d, n - 1)

# 初項 5, 公差 3, 項数 10 の数列の積を表示する
print product(5, 3, 10)
# coding: Shift_JIS

# 階乗を求める関数
def Fact(n):
    if (n <= 1):
        return 1
    else:
        return n * Fact(n - 1)

# 10の階乗
print Fact(10)
print 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
# 下降階乗冪
def FallingFact(x, n):
    if (n <= 1):
        return x
    else:
        return x * FallingFact(x - 1, n - 1)

# 10 から 6 までの 総乗
print FallingFact(10, 5)
print 10 * 9 * 8 * 7 * 6
# 上昇階乗冪
def RisingFact(x, n):
    if (n <= 1):
        return x
    else:
        return x * RisingFact(x + 1, n - 1)

# 10 から 14 までの 総乗
print RisingFact(10, 5)
print 10 * 11 * 12 * 13 * 14
# coding: Shift_JIS

# 階乗
def Fact(n):
    if (n <= 1):
        return 1
    else:
        return n * Fact(n - 1)

# 下降階乗冪
def FallingFact(x, n):
    if (n <= 1):
        return x
    else:
        return x * FallingFact(x - 1, n - 1)

# 順列 (異なる 10 個のものから 5 個取ってできる順列の総数)
n = 10
r = 5
print Fact(n) / Fact(n - r)
print FallingFact(n, r)
# 重複順列 (異なる 10 個のものから重複を許して 5 個取ってできる順列の総数)
n = 10
r = 5
print n ** r
# coding: Shift_JIS

# 組合せ
def Comb(n, r):
    if (r == 0 or r == n):
        return 1
    elif (r == 1):
        return n
    else:
        return Comb(n - 1, r - 1) + Comb(n - 1, r)

# 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数)
n = 10
r = 5
print Comb(n, r)
# coding: Shift_JIS

# 組合せ
def Comb(n, r):
    if (r == 0 or r == n):
        return 1
    elif (r == 1):
        return n
    else:
        return Comb(n - 1, r - 1) + Comb(n - 1, r)

# 重複組合せ (異なる 10 個のものから重複を許して 5 個とる組合せの総数)
n = 10
r = 5
print Comb(n + r - 1, r)
# coding: Shift_JIS

import math

# 自作の正弦関数
def mySin(x, n, nega, numerator, denominator, y):
    m           = 2 * n
    denominator = denominator * (m + 1) * m
    numerator   = numerator * x * x
    a           = numerator / denominator
    # 十分な精度になったら処理を抜ける
    if (a <= 0.00000000001):
        return y
    else:
        return y + mySin(x, n + 1, not nega, numerator, denominator, a if nega else -a)

for i in range(0, 25):
    degree = i * 15
    if degree % 30 == 0 or degree % 45 == 0:
        radian = math.radians(degree)
        # 自作の正弦関数
        d1     = mySin(radian, 1, False, radian, 1.0, radian)
        # 標準の正弦関数
        d2     = math.sin(radian)
        # 標準関数との差異
        print "%3d : %13.10f - %13.10f = %13.10f" % (degree, d1, d2, d1 - d2)
# coding: Shift_JIS

import math

# 自作の余弦関数
def myCos(x, n, nega, numerator, denominator, y):
    m           = 2 * n
    denominator = denominator * m * (m - 1)
    numerator   = numerator * x * x
    a           = numerator / denominator
    # 十分な精度になったら処理を抜ける
    if (a <= 0.00000000001):
        return y
    else:
        return y + myCos(x, n + 1, not nega, numerator, denominator, a if nega else -a)

for i in range(0, 25):
    degree = i * 15
    if degree % 30 == 0 or degree % 45 == 0:
        radian = math.radians(degree)
        # 自作の余弦関数
        d1     = myCos(radian, 1, False, 1.0, 1.0, 1.0)
        # 標準の余弦関数
        d2     = math.cos(radian)
        # 標準関数との差異
        print "%3d : %13.10f - %13.10f = %13.10f" % (degree, d1, d2, d1 - d2)
# coding: Shift_JIS

import math

# 自作の正接関数
def myTan(x, x2, n, t):
    t = x2 / (n - t)
    n -= 2
    if (n <= 1):
        return x / (1 - t)
    else:
        return myTan(x, x2, n, t)

for i in range(0, 13):
    if i * 15 % 180 != 0:
        degree = i * 15 - 90
        radian = math.radians(degree)
        x2     = radian * radian
        # 自作の正接関数
        d1     = myTan(radian, x2, 15, 0.0) # 15:必要な精度が得られる十分大きな奇数
        # 標準の正接関数
        d2     = math.tan(radian)
        # 標準関数との差異
        print "%3d : %13.10f - %13.10f = %13.10f" % (degree, d1, d2, d1 - d2)
# coding: Shift_JIS

import math

# 自作の指数関数
def myExp(x, n, numerator, denominator, y):
    denominator = denominator * n
    numerator   = numerator   * x
    a           = numerator / denominator
    # 十分な精度になったら処理を抜ける
    if (abs(a) <= 0.00000000001):
        return y
    else:
        return y + myExp(x, n + 1, numerator, denominator, a)

for i in range(0, 21):
    x  = (i - 10) / 4.0
    # 標準の指数関数
    d1 = math.exp(x)
    # 自作の指数関数
    d2 = myExp(x, 1, 1.0, 1.0, 1.0)
    # 標準関数との差異
    print "%5.2f : %13.10f - %13.10f = %13.10f" % (x, d1, d2, d1 - d2)
# coding: Shift_JIS

import math

# 自作の指数関数
def myExp(x, x2, n, t):
    t = x2 / (n + t)
    n -= 4

    if (n < 6):
        return 1 + ((2 * x) / (2 - x + t))
    else:
        return myExp(x, x2, n, t)

for i in range(0, 21):
    x  = (i - 10) / 4.0
    # 標準の指数関数
    d1 = math.exp(x)
    # 自作の指数関数
    x2 = x * x
    d2 = myExp(x, x2, 30, 0.0) # 30:必要な精度が得られるよう, 6から始めて4ずつ増加させる
    # 標準関数との差異
    print "%5.2f : %13.10f - %13.10f = %13.10f" % (x, d1, d2, d1 - d2)
# coding: Shift_JIS

import math

# 自作の対数関数
def myLog(x2, numerator, denominator, y):
    denominator = denominator + 2
    numerator   = numerator   * x2 * x2
    a           = numerator / denominator
    # 十分な精度になったら処理を抜ける
    if (abs(a) <= 0.00000000001):
        return y
    else:
        return y + myLog(x2, numerator, denominator, a)

for i in range(1, 21):
    x  = i / 5.0
    # 標準の対数関数
    d1 = math.log(x)
    # 自作の対数関数
    x2 = (x - 1) / (x + 1)
    d2 = 2 * myLog(x2, x2, 1.0, x2)
    # 標準関数との差異
    print "%5.2f : %13.10f - %13.10f = %13.10f" % (x, d1, d2, d1 - d2)
# coding: Shift_JIS

import math

# 自作の対数関数
def myLog(x, n, t):
    n2 = n
    x2 = x
    if (n > 3):
        if (n % 2 == 0):
            n2 = 2
        x2 = x * int(n / 2)
    t = x2 / (n2 + t)

    if (n <= 2):
        return x / (1 + t)
    else:
        return myLog(x, n - 1, t)

for i in range(1, 21):
    x  = i / 5.0
    # 標準の対数関数
    d1 = math.log(x)
    # 自作の対数関数
    d2 = myLog(x - 1, 27, 0.0) # 27:必要な精度が得られる十分大きな奇数
    # 標準関数との差異
    print "%5.2f : %13.10f - %13.10f = %13.10f" % (x, d1, d2, d1 - d2)
# coding: Shift_JIS

import math

# 自作の双曲線正弦関数
def mySinh(x, n, numerator, denominator, y):
    m           = 2 * n
    denominator = denominator * (m + 1) * m
    numerator   = numerator * x * x
    a           = numerator / denominator
    # 十分な精度になったら処理を抜ける
    if (abs(a) <= 0.00000000001):
        return y
    else:
        return y + mySinh(x, n + 1, numerator, denominator, a)

for i in range(0, 21):
    x  = i - 10
    # 自作の双曲線正弦関数
    d1 = mySinh(x, 1, x, 1.0, x)
    # 標準の双曲線正弦関数
    d2 = math.sinh(x)
    # 標準関数との差異
    print "%3d : %17.10f - %17.10f = %13.10f" % (x, d1, d2, d1 - d2)
# coding: Shift_JIS

import math

# 自作の双曲線余弦関数
def myCosh(x, n, numerator, denominator, y):
    m           = 2 * n
    denominator = denominator * m * (m - 1)
    numerator   = numerator * x * x
    a           = numerator / denominator
    # 十分な精度になったら処理を抜ける
    if (abs(a) <= 0.00000000001):
        return y
    else:
        return y + myCosh(x, n + 1, numerator, denominator, a)

for i in range(0, 21):
    x  = i - 10
    # 自作の双曲線余弦関数
    d1 = myCosh(x, 1, 1.0, 1.0, 1.0)
    # 標準の双曲線余弦関数
    d2 = math.cosh(x)
    # 標準関数との差異
    print "%3d : %17.10f - %17.10f = %13.10f" % (x, d1, d2, d1 - d2)
# coding: Shift_JIS

import math

def f(x):
    return 4 / (1 + x * x)

a = 0
b = 1

# 台形則で積分
n = 2
for j in range(1, 11):
    h = (b - a) / float(n)
    s = 0
    x = a
    for i in range(1, n):
        x += h
        s += f(x)
    s = h * ((f(a) + f(b)) / 2 + s)
    n *= 2

    # 結果を π と比較
    print "%2d : %13.10f, %13.10f" % (j, s, s - math.pi)
# coding: Shift_JIS

import math

def f(x):
    return 4 / (1 + x * x)

a = 0
b = 1

# 中点則で積分
n = 2
for j in range(1, 11):
    h = (b - a) / float(n)
    s = 0
    x = a + (h / 2)
    for i in range(1, (n + 1)):
        s += f(x)
        x += h
    s *= h
    n *= 2

    # 結果を π と比較
    print "%2d : %13.10f, %13.10f" % (j, s, s - math.pi)
# coding: Shift_JIS

import math

def f(x):
    return 4 / (1 + x * x)

a = 0
b = 1

# Simpson則で積分
n = 2
for j in range(1, 6):
    h  = (b - a) / float(n)
    s2 = 0
    s4 = 0
    x  = a + h
    for i in range(1, (n / 2 + 1)):
        s4 += f(x)
        x  += h
        s2 += f(x)
        x  += h
    s2 = (s2 - f(b)) * 2 + f(a) + f(b)
    s4 *= 4
    s  = (s2 + s4) * h / 3
    n  *= 2

    # 結果を π と比較
    print "%2d : %13.10f, %13.10f" % (j, s, s - math.pi)
# coding: Shift_JIS

import math

def f(x):
    return 4 / (1 + x * x)

a = 0
b = 1

t = [[0 for j in range(7)] for i in range(7)]

# 台形則で積分
n = 2
for i in range(1, 7):
    h = (b - a) / float(n)
    s = 0
    x = a
    for j in range(1, n):
        x += h
        s += f(x)
    # 結果を保存
    t[i][1] = h * ((f(a) + f(b)) / 2 + s)
    n *= 2

# Richardsonの補外法
n = 4
for j in range(2, 7):
    for i in range(j, 7):
        t[i][j] = t[i][j - 1] + (t[i][j - 1] - t[i - 1][j - 1]) / (n - 1)
        if (i == j):
            # 結果を π と比較
            print "%2d : %13.10f, %13.10f" % (j, t[i][j], t[i][j] - math.pi)
    n *= 4
# coding: Shift_JIS

# データ点の数
N = 7

# 元の関数
def f(x):
    return x - (x ** 3) / (3 * 2) + (x ** 5) / (5 * 4 * 3 * 2)

# Lagrange (ラグランジュ) 補間
def lagrange(d, x, y):
    sum = 0
    for i in range(0, N):
        prod = y[i]
        for j in range(0, N):
            if (j != i):
                prod *= (d - x[j]) / (x[i] - x[j])
        sum += prod
    return sum

x = [0 for i in range(N)]
y = [0 for i in range(N)]

# 1.5刻みで -4.5〜4.5 まで, 7点だけ値をセット
for i in range(0, N):
    d = i * 1.5 - 4.5
    x[i] = d
    y[i] = f(d)

# 0.5刻みで 与えられていない値を補間
for i in range(0, 19):
    d  = i * 0.5 - 4.5
    d1 = f(d)
    d2 = lagrange(d, x, y)

    # 元の関数と比較
    print "%5.2f\t%8.5f\t%8.5f\t%8.5f" % (d, d1, d2, d1 - d2)
# coding: Shift_JIS

# データ点の数
N = 7

# 元の関数
def f(x):
    return x - (x ** 3) / (3 * 2) + (x ** 5) / (5 * 4 * 3 * 2)

# Neville (ネヴィル) 補間
def neville(d, x, y):
    w = [[0 for j in range(N)] for i in range(N)]
    for i in range(0, N):
        w[0][i] = y[i]

    for j in range(1, N):
        for i in range(0, N - j):
            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]

x = [0 for i in range(N)]
y = [0 for i in range(N)]

# 1.5刻みで -4.5〜4.5 まで, 7点だけ値をセット
for i in range(0, N):
    d = i * 1.5 - 4.5
    x[i] = d
    y[i] = f(d)

# 0.5刻みで 与えられていない値を補間
for i in range(0, 19):
    d  = i * 0.5 - 4.5
    d1 = f(d)
    d2 = neville(d, x, y)

    # 元の関数と比較
    print "%5.2f\t%8.5f\t%8.5f\t%8.5f" % (d, d1, d2, d1 - d2)
# coding: Shift_JIS

# データ点の数
N = 7

# 元の関数
def f(x):
    return x - (x ** 3) / (3 * 2) + (x ** 5) / (5 * 4 * 3 * 2)

# Newton (ニュートン) 補間
def newton(d, x, a):
    sum = a[0]
    for i in range(1, N):
        prod = a[i]
        for j in range(0, i):
            prod *= (d - x[j])
        sum += prod
    return sum

x = [0 for i in range(N)]
y = [0 for i in range(N)]

# 1.5刻みで -4.5〜4.5 まで, 7点だけ値をセット
for i in range(0, N):
    d = i * 1.5 - 4.5
    x[i] = d
    y[i] = f(d)

# 差分商の表を作る
d = [[0 for j in range(N)] for i in range(N)]
for j in range(0, N):
    d[0][j] = y[j]

for i in range(1, N):
    for j in range(0, N - i):
        d[i][j] = (d[i-1][j+1] - d[i-1][j]) / (x[j+i] - x[j])

# n階差分商
a = [0 for i in range(N)]
for j in range(0, N):
    a[j] = d[j][0]

# 0.5刻みで 与えられていない値を補間
for i in range(0, 19):
    d1 = i * 0.5 - 4.5
    d2 = f(d1)
    d3 = newton(d1, x, a)

    # 元の関数と比較
    print "%5.2f\t%8.5f\t%8.5f\t%8.5f" % (d1, d2, d3, d2 - d3)
# coding: Shift_JIS

# データ点の数
N   =  7
Nx2 = 14

# 元の関数
def f(x):
    return x - (x ** 3) / (3 * 2) + (x ** 5) / (5 * 4 * 3 * 2)

# 導関数
def fd(x):
    return 1 - (x ** 2) / 2 + (x ** 4) / (4 * 3 * 2)

# Hermite (エルミート) 補間
def hermite(d, z, a):
    sum = a[0]
    for i in range(1, Nx2):
        prod = a[i]
        for j in range(0, i):
            prod *= (d - z[j])
        sum += prod
    return sum

x  = [0 for i in range(N)]
y  = [0 for i in range(N)]
yd = [0 for i in range(N)]

# 1.5刻みで -4.5〜4.5 まで, 7点だけ値をセット
for i in range(0, N):
    d = i * 1.5 - 4.5
    x[i]  = d
    y[i]  = f(d)
    yd[i] = fd(d)

# 差分商の表を作る
z =  [0 for i in range(Nx2)]
d = [[0 for j in range(Nx2)] for i in range(Nx2)]
for i in range(0, Nx2):
    j       = int(i / 2)
    z[i]    = x[j]
    d[0][i] = y[j]

for i in range(1, Nx2):
    for j in range(0, Nx2 - i):
        if (i == 1 and j % 2 == 0):
            d[i][j] = yd[int(j / 2)]
        else:
            d[i][j] = (d[i-1][j+1] - d[i-1][j]) / (z[j+i] - z[j])

# n階差分商
a = [0 for i in range(Nx2)]
for j in range(0, Nx2):
    a[j] = d[j][0]

# 0.5刻みで 与えられていない値を補間
for i in range(0, 19):
    d1 = i * 0.5 - 4.5
    d2 = f(d1)
    d3 = hermite(d1, z, a)

    # 元の関数と比較
    print "%5.2f\t%8.5f\t%8.5f\t%8.5f" % (d1, d2, d3, d2 - d3)
# coding: Shift_JIS

# データ点の数
N = 7

# 元の関数
def f(x):
    return x - (x ** 3) / (3 * 2) + (x ** 5) / (5 * 4 * 3 * 2)

# Spline (スプライン) 補間
def spline(d, x, y, z):
    # 補間関数値がどの区間にあるか
    k = -1
    for i in range(1, N):
        if d <= x[i]:
            k = i - 1
            break
    if (k < 0):
        k = N - 1

    d1 = x[k+1] - d
    d2 = d      - x[k]
    d3 = x[k+1] - x[k]
    return ( (z[k] * (d1 ** 3) + z[k+1] * (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)

x = [0 for i in range(N)]
y = [0 for i in range(N)]

# 1.5刻みで -4.5〜4.5 まで, 7点だけ値をセット
for i in range(0, N):
    d = i * 1.5 - 4.5
    x[i] = d
    y[i] = f(d)

# 3項方程式の係数の表を作る
a = [0 for i in range(N)]
b = [0 for i in range(N)]
c = [0 for i in range(N)]
d = [0 for i in range(N)]
for i in range(1, N - 1):
    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]))

# 3項方程式を解く (ト−マス法)
g = [0 for i in range(N)]
s = [0 for i in range(N)]
g[1] = b[1]
s[1] = d[1]
for i in range(2, N - 1):
    g[i] = b[i] - a[i] * c[i-1] / g[i-1]
    s[i] = d[i] - a[i] * s[i-1] / g[i-1]

z = [0 for i in range(N)]
z[0]   = 0
z[N-1] = 0
z[N-2] = s[N-2] / g[N-2]
i = N - 3
while i >= 1:
    z[i] = (s[i] - c[i] * z[i+1]) / g[i]
    i -= 1

# 0.5刻みで 与えられていない値を補間
for i in range(0, 19):
    d1 = i * 0.5 - 4.5
    d2 = f(d1)
    d3 = spline(d1, x, y, z)

    # 元の関数と比較
    print "%5.2f\t%8.5f\t%8.5f\t%8.5f" % (d1, d2, d3, d2 - d3)
# coding: Shift_JIS

import math

# 重力加速度
g = -9.8
# 空気抵抗係数
k = -0.01
# 時間間隔(秒)
h = 0.01

# 角度
degree = 45
radian = degree * math.pi / 180.0
# 初速 250 km/h -> 秒速に変換
v = int(250 * 1000 / 3600)
# 水平方向の速度
vx = [0 for i in range(2)]
vx[0] = v * math.cos(radian)
# 鉛直方向の速度
vy = [0 for i in range(2)]
vy[0] = v * math.sin(radian)
# 経過秒数
t = 0.0
# 位置
x = 0.0
y = 0.0

# 空気抵抗による水平方向の減速分
def fx(vx, vy):
    return k * math.sqrt(vx * vx + vy * vy) * vx

# 重力と空気抵抗による鉛直方向の減速分
def fy(vx, vy):
    return g + (k * math.sqrt(vx * vx + vy * vy) * vy)

# Euler法
i = 1
while y >= 0.0:
    # 経過秒数
    t = i * h

    # 位置
    x += h * vx[0]
    y += h * vy[0]

    print "%4.2f\t%8.5f\t%9.5f\t%9.5f\t%8.5f" % (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]

    i += 1
# coding: Shift_JIS

import math

# 重力加速度
g = -9.8
# 空気抵抗係数
k = -0.01
# 時間間隔(秒)
h = 0.01

# 角度
degree = 45
radian = degree * math.pi / 180.0
# 初速 250 km/h -> 秒速に変換
v = int(250 * 1000 / 3600)
# 水平方向の速度
vx = [0 for i in range(3)]
vx[0] = v * math.cos(radian)
# 鉛直方向の速度
vy = [0 for i in range(3)]
vy[0] = v * math.sin(radian)
# 経過秒数
t = 0.0
# 位置
x = [0 for i in range(3)]
x[0] = 0.0
y = [0 for i in range(3)]
y[0] = 0.0

# 空気抵抗による水平方向の減速分
def fx(vx, vy):
    return k * math.sqrt(vx * vx + vy * vy) * vx

# 重力と空気抵抗による鉛直方向の減速分
def fy(vx, vy):
    return g + (k * math.sqrt(vx * vx + vy * vy) * vy)

# Heun法
i = 1
while y[0] >= 0.0:
    # 経過秒数
    t = 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]

    print "%4.2f\t%8.5f\t%9.5f\t%9.5f\t%8.5f" % (t, vx[0], vy[0], x[0], y[0])

    i += 1
# coding: Shift_JIS

import math

# 重力加速度
g = -9.8
# 空気抵抗係数
k = -0.01
# 時間間隔(秒)
h = 0.01

# 角度
degree = 45
radian = degree * math.pi / 180.0
# 初速 250 km/h -> 秒速に変換
v = int(250 * 1000 / 3600)
# 水平方向の速度
vx = [0 for i in range(3)]
vx[0] = v * math.cos(radian)
# 鉛直方向の速度
vy = [0 for i in range(3)]
vy[0] = v * math.sin(radian)
# 経過秒数
t = 0.0
# 位置
x = [0 for i in range(3)]
x[0] = 0.0
y = [0 for i in range(3)]
y[0] = 0.0

# 空気抵抗による水平方向の減速分
def fx(vx, vy):
    return k * math.sqrt(vx * vx + vy * vy) * vx

# 重力と空気抵抗による鉛直方向の減速分
def fy(vx, vy):
    return g + (k * math.sqrt(vx * vx + vy * vy) * vy)

# 中点法
i = 1
while y[0] >= 0.0:
    # 経過秒数
    t = i * h

    # 位置・速度
    vx[1] = h * fx(vx[0], vy[0])
    vy[1] = h * fy(vx[0], vy[0])

    wx    = vx[0] + vx[1] / 2.0
    wy    = vy[0] + vy[1] / 2.0
    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

    print "%4.2f\t%8.5f\t%9.5f\t%9.5f\t%9.5f" % (t, vx[0], vy[0], x[0], y[0])

    i += 1
# coding: Shift_JIS

import math

# 重力加速度
g = -9.8
# 空気抵抗係数
k = -0.01
# 時間間隔(秒)
h = 0.01

# 角度
degree = 45
radian = degree * math.pi / 180.0
# 初速 250 km/h -> 秒速に変換
v = int(250 * 1000 / 3600)
# 水平方向の速度
vx = [0 for i in range(5)]
vx[0] = v * math.cos(radian)
# 鉛直方向の速度
vy = [0 for i in range(5)]
vy[0] = v * math.sin(radian)
# 経過秒数
t = 0.0
# 位置
x = [0 for i in range(5)]
x[0] = 0.0
y = [0 for i in range(5)]
y[0] = 0.0

# 空気抵抗による水平方向の減速分
def fx(vx, vy):
    return k * math.sqrt(vx * vx + vy * vy) * vx

# 重力と空気抵抗による鉛直方向の減速分
def fy(vx, vy):
    return g + (k * math.sqrt(vx * vx + vy * vy) * vy)

# Runge-Kutta法
i = 1
while y[0] >= 0.0:
    # 経過秒数
    t = 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])

    wx    = vx[0] + vx[1] / 2
    wy    = 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

    print "%4.2f\t%8.5f\t%9.5f\t%9.5f\t%9.5f" % (t, vx[0], vy[0], x[0], y[0])

    i += 1
# coding: Shift_JIS

import math

# 重力加速度
g = -9.8
# 空気抵抗係数
k = -0.01
# 時間間隔(秒)
h = 0.01

# 角度
degree = 45
radian = degree * math.pi / 180.0
# 初速 250 km/h -> 秒速に変換
v = int(250 * 1000 / 3600)
# 水平方向の速度
vx = [0 for i in range(5)]
vx[0] = v * math.cos(radian)
# 鉛直方向の速度
vy = [0 for i in range(5)]
vy[0] = v * math.sin(radian)
# 経過秒数
t = 0.0
# 位置
x = [0 for i in range(5)]
x[0] = 0.0
y = [0 for i in range(5)]
y[0] = 0.0

# 空気抵抗による水平方向の減速分
def fx(vx, vy):
    return k * math.sqrt(vx * vx + vy * vy) * vx

# 重力と空気抵抗による鉛直方向の減速分
def fy(vx, vy):
    return g + (k * math.sqrt(vx * vx + vy * vy) * vy)

# Runge-Kutta-Gill法
i = 1
while y[0] >= 0.0:
    # 経過秒数
    t = 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])

    wx    = vx[0] + vx[1] / 2
    wy    = 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

    print "%4.2f\t%8.5f\t%9.5f\t%9.5f\t%9.5f" % (t, vx[0], vy[0], x[0], y[0])

    i += 1
# coding: Shift_JIS

import math

def f(x):
    return x * x - 2.0

def bisection(a, b):
    while True:
        # 区間 (a, b) の中点 c = (a + b) / 2
        c = (a + b) / 2
        print "%12.10f\t%13.10f" % (c, c - math.sqrt(2))

        fc = f(c)
        if (abs(fc) < 0.0000000001):
            break

        if (fc < 0):
            # f(c) < 0 であれば, 解は区間 (c, b) の中に存在
            a = c
        else:
            # f(c) > 0 であれば, 解は区間 (a, c) の中に存在
            b = c
    return c

a = 1.0
b = 2.0
print "%12.10f" % bisection(a, b)
# coding: Shift_JIS

import math

def f(x):
    return x * x - 2.0

def falseposition(a, b):
    while True:
        # 点 (a,f(a)) と 点 (b,f(b)) を結ぶ直線と x軸の交点
        c  = (a * f(b) - b * f(a)) / (f(b) - f(a))
        print "%12.10f\t%13.10f" % (c, c - math.sqrt(2))

        fc = f(c)
        if (abs(fc) < 0.0000000001):
            break

        if (fc < 0):
            # f(c) < 0 であれば, 解は区間 (c, b) の中に存在
            a = c
        else:
            # f(c) > 0 であれば, 解は区間 (a, c) の中に存在
            b = c
    return c

a = 1.0
b = 2.0
print "%12.10f" % falseposition(a, b)
# coding: Shift_JIS

import math

def g(x):
    return (x / 2.0) + (1.0 / x)

def iterative(x0):
    while True:
        x1 = g(x0)
        print "%12.10f\t%13.10f" % (x1, x1 - math.sqrt(2))

        if (abs(x1 - x0) < 0.0000000001):
            break
        x0 = x1

    return x1

x = 1.0
print "%12.10f" % iterative(x)
# coding: Shift_JIS

import math

def f0(x):
    return x * x - 2.0

def f1(x):
    return 2.0 * x

def newton(x0):
    while True:
        x1 = x0 - (f0(x0) / f1(x0))
        print "%12.10f\t%13.10f" % (x1, x1 - math.sqrt(2))

        if (abs(x1 - x0) < 0.0000000001):
            break
        x0 = x1

    return x1

x = 2.0
print "%12.10f" % newton(x)
# coding: Shift_JIS

import math

def f0(x):
    return x * x - 2.0

def f1(x):
    return 2.0 * x

def f2(x):
    return 2.0

def bailey(x0):
    while True:
        x1 = x0 - (f0(x0) / (f1(x0) - (f0(x0) * f2(x0) / (2 * f1(x0)))))
        print "%12.10f\t%13.10f" % (x1, x1 - math.sqrt(2))

        if (abs(x1 - x0) < 0.0000000001):
            break
        x0 = x1

    return x1

x = 2.0
print "%12.10f" % bailey(x)
# coding: Shift_JIS

import math

def f(x):
    return x * x - 2.0

def secant(x0, x1):
    while True:
        x2 = x1 - f(x1) * (x1 - x0) / (f(x1) - f(x0))
        print "%12.10f\t%13.10f" % (x2, x2 - math.sqrt(2))

        if (abs(x2 - x1) < 0.0000000001):
            break
        x0 = x1
        x1 = x2

    return x2

x0 = 1.0
x1 = 2.0
print "%12.10f" % secant(x0, x1)
# coding: Shift_JIS

N = 4

# ヤコビの反復法
def jacobi(a, b, x0):
    while True:
        x1 = range(N)
        finish = True
        for i in range(0, N, 1):
            x1[i] = 0
            for j in range(0, N, 1):
                if (j != i):
                    x1[i] += a[i][j] * x0[j]

            x1[i] = (b[i] - x1[i]) / a[i][i]
            if (abs(x1[i] - x0[i]) > 0.0000000001):
                finish = False

        for i in range(0, N, 1):
            x0[i] = x1[i]
            print "%14.10f\t" % x0[i],
        print ""
        if (finish):
            return

a = [[ 9.0,  2.0, 1.0,  1.0], [2.0, 8.0, -2.0, 1.0], [-1.0, -2.0, 7.0, -2.0], [1.0, -1.0, -2.0, 6.0]]
b =  [20.0, 16.0, 8.0, 17.0]
c =  [ 0.0,  0.0, 0.0,  0.0]

# ヤコビの反復法
jacobi(a,b,c)

print "解"
for i in range(0, N, 1):
    print "%14.10f\t" % c[i],
print ""

# coding: Shift_JIS

N = 4

def gauss(a, b, x0):
    while True:
        x1 = 0.0
        finish = True
        for i in range(0, N, 1):
            x1 = 0
            for j in range(0, N, 1):
                if (j != i):
                    x1 += a[i][j] * x0[j]

            x1 = (b[i] - x1) / a[i][i]
            if (abs(x1 - x0[i]) > 0.0000000001):
                finish = False
            x0[i] = x1

        for i in range(0, N, 1):
            print "%14.10f\t" % x0[i],
        print ""
        if (finish):
            return

a = [[ 9.0,  2.0, 1.0,  1.0], [2.0, 8.0, -2.0, 1.0], [-1.0, -2.0, 7.0, -2.0], [1.0, -1.0, -2.0, 6.0]]
b =  [20.0, 16.0, 8.0, 17.0]
c =  [ 0.0,  0.0, 0.0,  0.0]

gauss(a,b,c)

print "X"
for i in range(0, N, 1):
    print "%14.10f\t" % c[i],
print ""
# coding: Shift_JIS

N = 4

def forward_elimination(a, b):
    for pivot in range(0, N - 1, 1):
        for row in range(pivot + 1, N, 1):
            s = a[row][pivot] / a[pivot][pivot]
            for col in range(pivot, N, 1):
                a[row][col] -= a[pivot][col]    * s
            b[row]          -= b[pivot]         * s

def backward_substitution(a, b):
    for row in range(N - 1, -1, -1):
        for col in range(N - 1, row, -1):
            b[row] -= a[row][col] * b[col]
        b[row] /= a[row][row]

def pivoting(a, b):
    for pivot in range(0, N, 1):
        max_row =   pivot
        max_val =   0.0
        for row in range(pivot, N, 1):
            if (abs(a[row][pivot]) > max_val):
                max_val =   abs(a[row][pivot])
                max_row =   row

        if (max_row != pivot):
            tmp = 0.0
            for col in range(0, N, 1):
                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

def disp_progress(a, b):
    for i in range(0, N, 1):
        for j in range(0, N, 1):
            print "%14.10f\t" % a[i][j],
        print "%14.10f" % b[i]
    print ""

a = [[-1.0, -2.0,  7.0, -2.0], [1.0, -1.0, -2.0, 6.0], [ 9.0,  2.0, 1.0,  1.0], [2.0, 8.0, -2.0, 1.0], ]
b =  [ 8.0, 17.0, 20.0, 16.0]
c =  [ 0.0,  0.0,  0.0,  0.0]

pivoting(a,b)
print "pivoting"
disp_progress(a,b)

forward_elimination(a,b)
print "forward_elimination"
disp_progress(a,b)

backward_substitution(a,b)
for i in range(0, N, 1):
    print "%14.10f\t" % b[i],
print ""
# coding: Shift_JIS

N = 4

def disp_progress(a, b):
    for i in range(0, N, 1):
        for j in range(0, N, 1):
            print "%14.10f\t" % a[i][j],
        print "%14.10f" % b[i]
    print ""

def forward_elimination(a, b):
    for pivot in range (0, N, 1):
        for row in range (0, N, 1):
            if (row == pivot):
                continue

            s = a[row][pivot] / a[pivot][pivot]
            for col in range(pivot, N, 1):
                a[row][col] -= a[pivot][col] * s
            b[row] -= b[pivot] * s


def backward_substitution(a, b):
    for pivot in range(0, N, 1):
        b[pivot] /= a[pivot][pivot]

def pivoting(a, b):
    for pivot in range(0, N, 1):
        max_row =   pivot
        max_val =   0.0
        for row in range(pivot, N, 1):
            if (abs(a[row][pivot]) > max_val):
                max_val =   abs(a[row][pivot])
                max_row =   row

        if (max_row != pivot):
            tmp = 0.0
            for col in range(0, N, 1):
                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

a = [[-1.0, -2.0,  7.0, -2.0], [1.0, -1.0, -2.0, 6.0], [ 9.0,  2.0, 1.0,  1.0], [2.0, 8.0, -2.0, 1.0], ]
b =  [ 8.0, 17.0, 20.0, 16.0]
c =  [ 0.0,  0.0,  0.0,  0.0]

pivoting(a,b)
print "pivoting"
disp_progress(a,b)

forward_elimination(a,b)
print "forward_elimination"
disp_progress(a,b)

backward_substitution(a,b)
for i in range(0, N, 1):
    print "%14.10f\t" % b[i],
print ""
# coding: Shift_JIS

N = 4

# LU
def decomp(a, b, x):
    #
    forward_elimination(a,b)
    #
    print "L"
    for i in range(0, N, 1):
        for j in range (0, N, 1):
            if (i > j):
                print "%14.10f\t" % a[i][j],
            elif (i == j):
                print "%14.10f\t" % 1.0,
            else:
                print "%14.10f\t" % 0.0,
        print ""
    print ""

    #
    print "U"
    for i in range(0, N, 1):
        for j in range(0, N, 1):
            if (i <= j):
                print "%14.10f\t" % a[i][j],
            else:
                print "%14.10f\t" % 0.0,
        print ""
    print ""

    # Ly=b
    y = [0.0, 0.0, 0.0, 0.0]
    forward_substitution(a,b,y)
    # y
    print "Y"
    for i in range(0, N, 1):
        print "%14.10f\t" % y[i],
    print ""

    # Ux=y,
    backward_substitution(a,y,x)

def forward_elimination(a, b):
    for pivot in range(0, N - 1, 1):
        for row in range(pivot + 1, N, 1):
            s = a[row][pivot] / a[pivot][pivot]
            for col in range(pivot, N, 1):
                a[row][col] -= a[pivot][col]    * s
            a[row][pivot]    = s
            # b[row]        -= b[pivot]         * s

# Ly=b
def forward_substitution(a, b, y):
    for row in range(0, N, 1):
        for col in range(0, row, 1):
            b[row] -= a[row][col] * y[col]

        y[row] = b[row]

def backward_substitution(a, y, x):
    for row in range(N - 1, -1, -1):
        for col in range(N - 1, row, -1):
            y[row] -= a[row][col] * x[col]
        x[row] = y[row] / a[row][row]

def pivoting(a, b):
    for pivot in range(0, N, 1):
        max_row =   pivot
        max_val =   0.0
        for row in range(pivot, N, 1):
            if (abs(a[row][pivot]) > max_val):
                max_val =   abs(a[row][pivot])
                max_row =   row

        if (max_row != pivot):
            tmp = 0.0
            for col in range(0, N, 1):
                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

def disp_progress(a, b):
    for i in range(0, N, 1):
        for j in range(0, N, 1):
            print "%14.10f\t" % a[i][j],
        print "%14.10f" % b[i]
    print ""

a = [[-1.0, -2.0,  7.0, -2.0], [1.0, -1.0, -2.0, 6.0], [ 9.0,  2.0, 1.0,  1.0], [2.0, 8.0, -2.0, 1.0], ]
b =  [ 8.0, 17.0, 20.0, 16.0]

pivoting(a,b)
print "pivoting"
disp_progress(a,b)

x =  [ 0.0,  0.0,  0.0,  0.0]
decomp(a,b,x)
print "X"
for i in range(0, N, 1):
    print "%14.10f\t" % x[i],
print ""
# coding: Shift_JIS
import math

N = 4

# LL^T
def decomp(a, b, x):
    #
    forward_elimination(a,b)
    #
    print "L L^T"
    for i in range(0, N, 1):
        for j in range (0, N, 1):
            if (j <= i):
                print "%14.10f\t" % a[i][j],
            else:
                print "%14.10f\t" % a[j][i],
        print ""
    print ""

    # Ly=b
    y = [0.0, 0.0, 0.0, 0.0]
    forward_substitution(a,b,y)
    # y
    print "Y"
    for i in range(0, N, 1):
        print "%14.10f\t" % y[i],
    print ""

    # Ux=y,
    backward_substitution(a,y,x)

def forward_elimination(a, b):
    for pivot in range(0, N, 1):
        s = 0.0
        for col in range(0, pivot, 1):
            s += a[pivot][col] * a[pivot][col]
        a[pivot][pivot] = math.sqrt(a[pivot][pivot] - s)

        for row in range(pivot + 1, N, 1):
            s = 0.0
            for col in range(0, pivot, 1):
                s += a[row][col] * a[pivot][col]
            a[row][pivot] = (a[row][pivot] - s) / a[pivot][pivot]

# Ly=b
def forward_substitution(a, b, y):
    for row in range(0, N, 1):
        for col in range(0, row + 1, 1):
            b[row] -= a[row][col] * y[col]

        y[row] = b[row] / a[row][row]

def backward_substitution(a, y, x):
    for row in range(N - 1, -1, -1):
        for col in range(N - 1, row, -1):
            y[row] -= a[col][row] * x[col]
        x[row] = y[row] / a[row][row]


def disp_progress(a):
    for i in range(0, N, 1):
        for j in range(0, N, 1):
            print "%14.10f\t" % a[i][j],
        print ""
    print ""

a = [[5.0,2.0,3.0,4.0],[2.0,10.0,6.0,7.0],[3.0,6.0,15.0,9.0],[4.0,7.0,9.0,20.0]]
b =  [34.0,68.0,96.0,125.0]

print "A"
disp_progress(a)

x =  [ 0.0,  0.0,  0.0,  0.0]
decomp(a,b,x)
print "X"
for i in range(0, N, 1):
    print "%14.10f\t" % x[i],
print ""
# coding: Shift_JIS

N = 4

# LDL^T
def decomp(a, b, x):
    #
    forward_elimination(a,b)
    #
    print "L D"
    for i in range(0, N, 1):
        for j in range (0, N, 1):
            if (j <= i):
                print "%14.10f\t" % a[i][j],
            else:
                print "%14.10f\t" % a[j][i],
        print ""
    print ""

    # Ly=b
    y = [0.0, 0.0, 0.0, 0.0]
    forward_substitution(a,b,y)
    # y
    print "Y"
    for i in range(0, N, 1):
        print "%14.10f\t" % y[i],
    print ""

    # Ux=y,
    backward_substitution(a,y,x)

def forward_elimination(a, b):
    for pivot in range(0, N, 1):
        # pivot < k
        s = 0.0
        for col in range(0, pivot, 1):
            s = a[pivot][col]
            for k in range(0, col, 1):
                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 in range(0, pivot, 1):
            s -= a[pivot][k] * a[pivot][k] * a[k][k]
        a[pivot][pivot] = s

# Ly=b
def forward_substitution(a, b, y):
    for row in range(0, N, 1):
        for col in range(0, row + 1, 1):
            b[row] -= a[row][col] * y[col]

        y[row] = b[row]

def backward_substitution(a, y, x):
    for row in range(N - 1, -1, -1):
        for col in range(N - 1, row, -1):
            y[row] -= a[col][row] * a[row][row] * x[col]
        x[row] = y[row] / a[row][row]


def disp_progress(a):
    for i in range(0, N, 1):
        for j in range(0, N, 1):
            print "%14.10f\t" % a[i][j],
        print ""
    print ""

a = [[5.0,2.0,3.0,4.0],[2.0,10.0,6.0,7.0],[3.0,6.0,15.0,9.0],[4.0,7.0,9.0,20.0]]
b =  [34.0,68.0,96.0,125.0]

print "A"
disp_progress(a)

x =  [ 0.0,  0.0,  0.0,  0.0]
decomp(a,b,x)
print "X"
for i in range(0, N, 1):
    print "%14.10f\t" % x[i],
print ""
inserted by FC2 system