連立 1 次方程式

数学の考え方参照。

ベクトルの計算

ベクトルの計算を数値計算で考えよう。。

Ruby の 1 次元配列表示

Ruby の 1 次元配列で、ベクトルを表し、表現してみよう。

#!/usr/koeki/bin/ruby 
x = [1,2]
p x

for i in 0 .. x.length - 1
  x[i] *= 2
end
p x 

for i in 0 .. x.length - 1
  x[i] /= 4
  # x[i] /= 4.0
end
p x

Ruby では、型を宣言する必要がないが、中に何が入っているのか、 気にする必要があることを確かめよう。

Ruby の Class を使用した 1 次元配列表示

Ruby では数学者が開発した Math module および mathn class が知られている。

#!/usr/koeki/bin/ruby 
require 'mathn'

v = Vector[1,2]
p v* 2

p v *= 0.25
#p x = 1 / 4.0
#p v *= x

4.0 など小数点をつけてから割ると、自動的に to_f 変換する。

0.5 倍してみよう。

をそれぞれ調べてみる。

mathn class を使うとき、 割り算の記号は使えないことを確かめよう。

Fortran での 1 次元配列表示

計算機が苦手な細かい数字を取り扱うことと人間の目から見て分かりやすい形との違いを見るために、 整数型と倍精度型で、いくつか配列の定義の仕方を見てみる。 gfortran は、Fortran 90/95 に対応しており、 新しい記法が可能となっている。

	
      program vector
      implicit none
      integer :: i
      real(8) x(2)
      !integer x(2)
      x(0) = 1.0d0
      x(1) = 2.0d0
      !x(0) = 1
      !x(1) = 2
      write(*,*) (x(i), i = 0, 1)
      do i = 0, 1
         x(i) = x(i) * 2
      enddo 
      write(*,*) (x(i), i = 0, 1)
      do i = 0, 1
         x(i) = x(i) / 4
      enddo 
      write(*,*) (x(i), i = 0, 1)
      end program vector

また、下のように :: を導入することにより、初期値を代入することもできる。

	
      program vector
      implicit none
      real(8) :: x(0:1) = (/ 1.0d0, 2.0d0 /)
      !integer :: x(0:1) = (/ 1, 2 /)
      integer i
      write(*,*) (x(i), i = 0, 1)
         : 
         : 
      end program vector

コメントを変更し、倍精度の実数と整数型の違いを調べておこう。

Fortran で配列を作る

Ruby 言語で Array.new があるように、Fortran でも割付け配列という概念がある。

	
      program dotproduct
      implicit none
      integer, allocatable :: u(:), v(:)
      integer :: i, n = 4
      integer dotprod
      allocate (u(0:n-1), v(0:n-1)) 
      do i = 0, n
         u(i) = i - 1
         v(i) = i + 1
      end do
      write(*,*) (u(i), i = 0, n-1)
      write(*,*) (v(i), i = 0, n-1)
      do i = 0, n - 1
         dotprod = dotprod + u(i) * v(i)
      end do
      write(*,*) dotprod
      deallocate(u,v)
      end program dotproduct

宣言時に allocatable 属性をつけ、次元を実行文中で決定することができる。 次元を与えた直後に配列を allocate 文を用いて、配列の大きさを決める。 解除する必要があれば、deallocate 文を用いて、解除する。