クラメールの公式により、J言語を用いて連立一次方程式を解く。
NB. 3x + 2y = 4 NB. 5x + 7y = 3 ]a=:2 2$3 2 5 7 3 2 5 7 ]b=:4 3 4 3 -/ . * a NB.aの行列式determinantを求める 11 ]x=: ( (-/ . *) b ,. 1{"1 a) % 11 2 ]y=: ( (-/ . *) (0{"1 a) ,. b) % 11 _1 NB. 以下検証 X=: 2 _1 a (+/ . *) X NB.行列の積 4 3 b = a (+/ . *) X NB.bと一致 1 1
未知数が3つ以上でもOkです。
NB. x + y + z = 6 NB. 2x + 3y + 4z = 20 NB. 3x + 2y + 3z = 16 ] a1 =: 1 1 1 1 1 1 ] a2 =: 2 3 4 2 3 4 ] a3 =: 3 2 3 3 2 3 ] a =: 3 3 $ a1, a2, a3 1 1 1 2 3 4 3 2 3 ] b =: 6 20 16 6 20 16 ] det=: -/ . * ] -/ .* ] deta =: det a 2 ] x=: ( det ( b ,. (1{"1 a) ,. (2{"1 a) ) ) % deta 1 ] y=: ( det ( (0{"1 a) ,. b ,. (2{"1 a) ) ) % deta 2 ] z=: ( det ( (0{"1 a) ,. (1{"1 a) ,. b ) ) % deta 3 NB. 以下検証 X=: 1 2 3 a (+/ . *) X 6 20 16 b = a (+/ . *) X 1 1 1
逆行列%.(パーセントドット、逆行列)を使った場合は以下のようになります。
NB.2x+y-z=0 NB.3x+y+z=4 NB.-x+2y+3z=-5 ]a=:3 3$2 1 _1 3 1 1 _1 2 3 2 1 _1 3 1 1 _1 2 3 ]b=:0 4 _5 0 4 _5 ]x=:b %. a NB.二項動詞として%.を使うとb %. aがb (+/ . *) %.aと同等の意味になる 2 _3 1 a (+/ . *) x 0 4 _5 NB.x + y + z = 6 NB.2x+3y+4z=20 NB.3x+2y+3z=16 ]a=:3 3$1 1 1 2 3 4 3 2 3 1 1 1 2 3 4 3 2 3 ]b=:6 20 16 6 20 16 ]x=:b %. a 1 2 3