数値計算


プログラム


  1. 数値積分: 台形公式

    def f(x)
      x/((x+1.0)*(x+2.0))
    end
    
    def trapezoid (xs,xe,n)
      deltax = (xe-xs)*1.0/n
      sum = (f(xs)+f(xe))/2.0
      for i in 1..(n -1)
        sum = sum + f(xs+i*deltax)
      end
      deltax * sum
    end
    
  2. 数値積分: モンテカルロ法

    def montecarlo (n)
      m=0
      for i in 1..n
        x= rand()    # random number in [0 ,1)
        y= rand()
        if x*x + y*y < 1.0
          m = m + 1
        end
      end
      m*1.0/n
    end
    
  3. 連立一次方程式: Gauss-Jordan 法

    def gj(a)            #aが係数行列+右辺値を並べたもの
      for i in 0 .. a.length()-1
        erase(a,i,i)     #i行目でi列を消去 
      end
      a                  #解は右端の一列に現れる
    end
    
    def erase(a,k,i)     #k行目でi列を消去
      factor = a[k][i]
      for l in 0 .. a[k].length()-1
        a[k][l] = a[k][l]*1.0 / factor
      end                #ここまでk行目の処理
      for j in 0 .. a.length()-1
        if (j != k)      #j行目を処理
          factor = a[j][i]
          for l in 0 .. a[j].length()-1
            a[j][l] = a[j][l]-a[k][l]*factor
            #注意:a[k][i]は既に1にしてある
          end
        end
      end
    end
    
  4. 連立一次方程式: Pivoting 付き Gauss-Jordan 法

    load("./abs.rb")
    load("./swap.rb")
    load("./gj.rb") 
    
    def gj2(a)        # aは係数行列+右辺値を並べたもの
      for i in 0 .. a.length()-1
        swap(a, i, maxrow(a,i))  # i行とmaxrow(a,i)行を交換
        erase(a,i,i)  #i列を消去
      end
      a               # 解は右端の一列に現れる(現れる順番に注意)
    end
    
    def maxrow(a,i)   # i列目の値の絶対値が最大の行
      maxi = 0
      # ここを完成させる.
      maxi
    end
    

2016年11月12日作成
伊知地 宏
Copyright (C) Hiroshi Ichiji, 2016. All rights reserved.