. .
.. .
.
.
ベクトル・行列の計算をしよう
+反復法で
1次方程式
樋口さぶろお
龍谷大学理工学部数理情報学科
数値計算法
L12(2010-07-09)今日の目標
.
.
.
1 1
次元
, 2次元配列を利用してベクトル・行列の 計算ができるようになろう
..
.
.
2
反復法を使って
1次方程式の解を求めるプログ ラムを書けるようになろう
.hig3.net
樋口さぶろお (数理情報学科) ベクトル・行列の計算をしよう+反復法で1次方程式数値計算法L12(2010-07-09) 1 / 16
ベクトル・行列の計算 ベクトル=1次元配列
復習
:数列
=1次元配列
数列
{xn}n=0,1,2,...は
1次元配列
x[0], x[1], x[2], . . .で表現することもで きた
.1 i n t i ;
2 i n t n =10;
3 i n t x [ 1 0 ] ; /∗ x [ 0 ] , x [ 1 ] , . . . , x [ 9 ] が 使 え る ∗/ 4
5 x [ 0 ] = 2 . 0 ;
6 f o r( i =0; i<n−1; i ++){ 7 x [ i +1]=2∗x [ i ] + 1 ;
8 }
x:
配列の 名前
i:配列の
インデックス
,
添え字
,x[3]:
配列の 要素
配列の
サイズ
長さ
ベクトル・行列の計算 ベクトル=1次元配列
ベクトル
=1次元配列
x= (x0, x1, . . .)↔ x[i]
n
次元ベクトルはサイズ
nの
1次元配列で
.縦ベクトル横ベクトルどっちでも同じ
.例えば内積は
?1 d o u b l e a [ ] ={0 , 1 , 2 , 8 , 8 , 9 , 0};/∗宣言と同時に初期化するならサイズ指定不要∗/ 2 d o u b l e b [ ] ={0 , 1 , 2 , 8 , 8 , 9 , 0};
3 i n t i ; /∗ ベ ク ト ル の 成 分 番 号=配 列 の イ ン デ ッ ク ス∗/
4 i n t n =7; /∗ ベ ク ト ル の 次 元=配 列 の サ イ ズ ∗/
5 d o u b l e i n n e r = 0 . 0 ; 6
7 f o r( i =0; i<n ; i ++){ 8 i n n e r+=a [ i ]∗b [ i ] ;
9 }
10 p r i n t ( ”%f\n ” , i n n e r ) ;
ベクトル・行列の計算 ベクトル=1次元配列
行列
=2次元配列
A= (Aij) ↔ a[i][j] a[
行
][列
]n×m
行列は
,サイズ
n, mの
2次元配列で
. i行
i-th row上から数えて何番目
?j
列
j-th column左から数えて何番目
?1 d o u b l e a [ 2 ] [ 3 ] ={{2 , 3 , 4},
2 {2 , 3 , 4} }; /∗ 2行3列 の 行 列 ∗/
3 i n t nrow =2 , mcolumn =3;
4 i n t i , j ; /∗行, 列 の イ ン デ ッ ク ス∗/
5 f o r( i =0; i<nrow ; i ++){ /∗行列を出力∗/ 6 f o r( j =0; j<mcolumn ; j ++){
7 p r i n t f ( ”%f ” , a [ i ] [ j ] ) ; /∗i行j列∗/
8 }
9 p r i n t f ( ”\n ” ) ;
10 }
横ベクトル
=1×n行列
,縦ベクトル
=n×1行列
.2次元配列じゃないの
?そう思ってもいいけど
1次元配列で十分
ベクトル・行列の計算 ベクトル=1次元配列
ベクトル・行列の積の成分表示
.
.
下の例はn= 3.
n×m行列A= (Aij),m次元ベクトルx= (xj),w= (wi)
.
w=Ax の第i成分wi は?
.
.
.
.. .
.
.
wi =
m−1
∑
k=0
Aik xk (i= 0, . . . , n−1)
だって〜
w0
w1
w2
=
A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
x0
x1
x2
x3
=
A00x0+A01x1+A02x2+A03x3
· · ·
· · ·
· · · のところを埋めてみよう
ベクトル・行列の計算 ベクトル=1次元配列
行列
×ベクトル
のプログラム例
1 i n t nrow =3 , mcolumn =4;
2 d o u b l e a [ 3 ] [ 4 ] ={{2 , 3 , 4 , 5},
3 {3 , 2 , 3 , 4},
4 {0 , 2 , 0 , 4}; /∗ 3行4列 の 行 列 ∗/
5 d o u b l e x [ 4 ] ={1 , 2 , 1 , 3}; /∗ 4次 元 ベ ク ト ル ∗/
6 d o u b l e w [ 3 ] ; 7 i n t i , j , k ; 8
9 f o r( i =0; i<nrow ; i ++){ 10 w [ i ] = 0 . 0 ;
11 f o r( k =0; k<mcolumn ; k++){
12 w [ i ]=w [ i ]+ a [ i ] [ k ]∗x [ k ] ;
13 }
14 }
ベクトル・行列の計算 ベクトル=1次元配列
n×n
正方行列
A= (Aij), B= (Bij), C = (Cij)..
C =AB
の
(i, j)成分
Cijは
?.
.
.
.. .
.
.
Cij =
n−1
∑
k=0
AikBkj
C00 C01 C02 C10 C11 C12
C20 C21 C22
=
A00 A01 A02 A10 A11 A12
A20 A21 A22
B00 B01 B02 B10 B11 B12
B20 B21 B22
=
A00B00+A01B10+A02B20 A00B01+A01B11+A02B21 · · · A10B00+A11B10+A12B21 · · · · · ·
· · · · · · · · ·
· · ·
のところを埋めてみよう
ベクトル・行列の計算 ベクトル=1次元配列
正方行列の積
のプログラム例
1 d o u b l e a [ 3 ] [ 3 ] ={{2 , 8 , 4},2 {2 , 0 , 9}
3 {8 , 8 , 4} }; /∗ 3行3列 の 行 列 ∗/
4 d o u b l e b [ 3 ] [ 3 ] ={{3 , 3 , 4},
5 {2 , 9 , 4}
6 {6 , 3 , 4} };
7 d o u b l e c [ 3 ] [ 3 ] ; 8 d o u b l e w [ 3 ] ; 9 i n t i , j , k ; 10 i n t n =3;
11
12 f o r( i =0; i<n ; i ++){ 13 f o r( j =0; j<n ; j ++){
14 c [ i ] [ j ] = 0 . 0 ;
15 f o r( k =0; k<n ; k++){
16 c [ i ] [ j ]= c [ i ] [ j ]+ a [ i ] [ k ]∗b [ k ] [ j ] ;
17 }
18 }
19 }
ベクトル・行列の計算 ベクトル=1次元配列
1
次元
,2次元配列を引数にとる関数
1 d o u b l e f (d o u b l e v [ ] ){ 2 i n t i , j ;
3 f o r( i =0; i<5; i ++){
4 v [ i ] = . . . ;
5 }
6 r e t u r n 0 . 0 ;
7 }
8 9
10 d o u b l e g (d o u b l e x [ ] [ 5 ] ){ /∗サイズを省略していいのは最初のインデックスだ
け ∗/
11 i n t i , j ;
12 f o r( i =0; i<5; i ++){ 13 f o r( j =0; j<5; j ++){
14 x [ i ] [ j ] = . . . ;
15 }
16 }
17 r e t u r n 0 . 0 ;
18 }
ベクトル・行列の計算 ベクトル=1次元配列
配列と関数にまつわる
,重要な情報
配列
=ポインタ
プログラミング・演習
したがって
, f(v)で呼び出すと
,配列
vの中身
(成分
)が変更されて
mainに返ってくる
. fの中での
v[i]の変更が外に影響する
.配列と関数にまつわる
,今回の演習では不要な情報
(
上のことがあるので必要性は高くないが
)配列を返り値にすること は
‘できない
.’配列を引数として与えただけではサイズは関数に伝わらない
.サイ
ズが可変な場合
,サイズも引数として与える
,グローバル変数にする
など
.ベクトル・行列の計算 反復法
(
復習
)非線形方程式を解くための反復法
f(x) = 0⇔x=g(x)
g(x) = x − 1
Af(x)
A6= 0
は調節する定数
.漸化式
xn+1 =g(xn)で定まる数列
{xn}が
x=x∗に収束
=⇒f(x∗) = 0.
L06,プチテスト
ベクトル・行列の計算 反復法
連立
1次方程式を解くための反復法
¨
§
¥
栗原§3.4¦
をもっと単純にしたもの
x,b: m
次元ベクトル
,M: m×m行列
(nは別の用途
).未知数ベクトル
xの満たす
1次方程式
Mx=bを考える
. f(x) =Mx−bとおくと
,この方程式は
,f(x) =0.非線形方程式の反復法と同様ののりで
, x=x−A1f(x) x=g(x)と書きかえられる
g(x) = (E − A1M)x+ A1b
(E
は単位行列
,Aはスカラー
).ベクトルの漸化式
xn+1 =g(xn)
の定めるベクトルの列
xが
x∗に収束
=⇒ x∗は
1次方程式の解
ベクトル・行列の計算 反復法
いつ収束するの
?非線形方程式の場合
f0(x∗)と関係していた
.今回は
1次方程式なので
,条件がもう少し詳しくわかる
.x∗
に収束する場合
,xn+1−x∗= (E−A1M)(xn−x∗)
すなわち一般項は
xn−x∗ = (E−A1M)n(x0−x∗)
よって
,行列
E−A1Mのすべての
固有値
λiの絶対値が
1未満にな るようにスカラー
Aが調節できれば
,初期値
x0によらずに
x∗に収束 する
.だって
,(E−A1M)n=P−1diag(λn1, . . . , λnm)P.大注意
:そういう
Aが取れないような行列
Mもある
.というかそのほう
が普通
.例
:…
ベクトル・行列の計算 反復法
反復法ののり
in
疑似コード 配列
x[]に適当な初期値で初期化 以下反復
I x
を更新する
(xに
g(x)を代入する)
I |
誤差
|2=|今回の
x−前回の
x|2が定数より小さければ
break (反復を抜け出す)
x
を出力
注意
わざとはっきり書いてないけど
, Newton法の収束のときみたいに
,変数として
今回の
xと前回の
xがいるよね
. g(x)の計算のところが行列やベクトルの積だよね
.大注意
xnの
nは
,ベクトルのインデックスでなく
,数列
(ベクトル
列
)の添え字
.したがってプログラム中には現れない
.ベクトル・行列の計算 反復法
来週の
Quiz計画
!来週は予習
(復習
?)問題
.次の連立
1次方程式を
, (拡大係数行列だけの操
作で
)Gauss-Jordanの消去法
(前進消去
+後退消去
)で解け
. 線形代数II2x+3y+z=1 x +z=3 x −y =2
の類似問題
.お知らせ
演習
eラーニングシステムの評価ページの合計にはこれまで意味 のない点数やパーセントが表示されましたが
,現在は
,科目 の点数
100点のうち
,これまでに獲得した点数を表示するよ うにしました
.演習
2010-07-17土
2の補講は自由参加
.この日
12:15が
E11,E12,E13
の課題の提出の最終チャンス
(病気
,公務欠席
などによる延長はありません
)講義 レポート
R11課題
→L11資料参照
ベクトル・行列の計算 反復法
ファイナルトライアル計画
!.
.
科目の成績100点中50点. 外部記憶ペーパー使用可能.別紙参照.
準備としては,まずは各回のquizを確実に解けるようになること,演習課題を心から理解す ることをお奨めします. 模範解答を作ろうプロジェクトはない予定.
現在のところの出題計画(2010-07-16に更新されます) 台形公式で数値積分しよう!
シンプソン公式で数値積分しよう! データの平均,分散,標準偏差を求めよう! 2変量データの相関係数を求めよう! 2分法で非線形方程式を解こう!
反復法で連立1次方程式や非線形方程式を解こう!(一部プチテスト範囲再出題) 連立1次方程式をGauss-Jordanの消去法計算機バージョンで解こう!
行列やベクトルを成分で計算するプログラムを書こう! ニュートン法のプログラムを書こう!(プチテスト範囲再出題) 漸化式で定義される数列akについて∑n
k=0akを求めるプログラムを書こう!(プチテス ト範囲再出題)