• 検索結果がありません。

ベクトル・行列の計算をしよう + 反復法で 1 次方程式

N/A
N/A
Protected

Academic year: 2021

シェア "ベクトル・行列の計算をしよう + 反復法で 1 次方程式"

Copied!
16
0
0

読み込み中.... (全文を見る)

全文

(1)

. .

.. .

.

.

ベクトル・行列の計算をしよう

+

反復法で

1

次方程式

樋口さぶろお

龍谷大学理工学部数理情報学科

数値計算法

L12(2010-07-09)

今日の目標

.

.

.

1 1

次元

, 2

次元配列を利用してベクトル・行列の 計算ができるようになろう

.

.

.

.

2

反復法を使って

1

次方程式の解を求めるプログ ラムを書けるようになろう

.

hig3.net

樋口さぶろお (数理情報学科) ベクトル・行列の計算をしよう+反復法で1次方程式数値計算法L12(2010-07-09) 1 / 16

(2)

ベクトル・行列の計算 ベクトル=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<n1; i ++){ 7 x [ i +1]=2∗x [ i ] + 1 ;

8 }

x:

配列の 名前

i:

配列の

インデックス

,

添え字

,

x[3]:

配列の 要素

配列の

サイズ

長さ

(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 ) ;

(4)

ベクトル・行列の計算 ベクトル=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} }; /∗ 23列 の 行 列 ∗/

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 ] ) ; /ij/

8 }

9 p r i n t f ( ”\n ” ) ;

10 }

横ベクトル

=1×n

行列

,

縦ベクトル

=n×1

行列

.2

次元配列じゃないの

?

そう思ってもいいけど

1

次元配列で十分

(5)

ベクトル・行列の計算 ベクトル=1次元配列

ベクトル・行列の積の成分表示

.

.

下の例はn= 3.

n×m行列A= (Aij),m次元ベクトルx= (xj),w= (wi)

.

w=Ax の第i成分wi ?

.

.

.

.. .

.

.

wi =

m1

k=0

Aik xk (i= 0, . . . , n1)

だって〜

w0

w1

w2

=

A00 A01 A02 A03

A10 A11 A12 A13

A20 A21 A22 A23

x0

x1

x2

x3

=

A00x0+A01x1+A02x2+A03x3

· · ·

· · ·

· · · のところを埋めてみよう

(6)

ベクトル・行列の計算 ベクトル=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}; / 34列 の 行 列 /

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 }

(7)

ベクトル・行列の計算 ベクトル=1次元配列

n×n

正方行列

A= (Aij), B= (Bij), C = (Cij).

.

C =AB

(i, j)

成分

Cij

?

.

.

.

.. .

.

.

Cij =

n1

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 · · · · · ·

· · · · · · · · ·

· · ·

のところを埋めてみよう

(8)

ベクトル・行列の計算 ベクトル=1次元配列

正方行列の積

のプログラム例

1 d o u b l e a [ 3 ] [ 3 ] ={{2 , 8 , 4},

2 {2 , 0 , 9}

3 {8 , 8 , 4} }; /∗ 33列 の 行 列 ∗/

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 }

(9)

ベクトル・行列の計算 ベクトル=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 }

(10)

ベクトル・行列の計算 ベクトル=1次元配列

配列と関数にまつわる

,

重要な情報

配列

=

ポインタ

プログラミング・演習

したがって

, f(v)

で呼び出すと

,

配列

v

の中身

(

成分

)

が変更されて

main

に返ってくる

. f

の中での

v[i]

の変更が外に影響する

.

配列と関数にまつわる

,

今回の演習では不要な情報

(

上のことがあるので必要性は高くないが

)

配列を返り値にすること は

できない

.’

配列を引数として与えただけではサイズは関数に伝わらない

.

サイ

ズが可変な場合

,

サイズも引数として与える

,

グローバル変数にする

など

.

(11)

ベクトル・行列の計算 反復法

(

復習

)

非線形方程式を解くための反復法

f(x) = 0x=g(x)

g(x) = x 1

Af(x)

A6= 0

は調節する定数

.

漸化式

xn+1 =g(xn)

で定まる数列

{xn}

x=x

に収束

=f(x) = 0.

L06,プチテスト

(12)

ベクトル・行列の計算 反復法

連立

1

次方程式を解くための反復法

¨

§

¥

栗原§3.4¦

をもっと単純にしたもの

x,b: m

次元ベクトル

,M: m×m

行列

(n

は別の用途

).

未知数ベクトル

x

の満たす

1

次方程式

Mx=b

を考える

. f(x) =Mxb

とおくと

,

この方程式は

,f(x) =0.

非線形方程式の反復法と同様ののりで

, x=xA1f(x) x=g(x)

と書きかえられる

g(x) = (E A1M)x+ A1b

(E

は単位行列

,A

はスカラー

).

ベクトルの漸化式

xn+1 =g(xn)

の定めるベクトルの列

x

x

に収束

= x

1

次方程式の解

(13)

ベクトル・行列の計算 反復法

いつ収束するの

?

非線形方程式の場合

f0(x)

と関係していた

.

今回は

1

次方程式なので

,

条件がもう少し詳しくわかる

.

x

に収束する場合

,

xn+1x= (EA1M)(xnx)

すなわち一般項は

xnx = (EA1M)n(x0x)

よって

,

行列

EA1M

のすべての

固有値

λi

の絶対値が

1

未満にな るようにスカラー

A

が調節できれば

,

初期値

x0

によらずに

x

に収束 する

.

だって

,(EA1M)n=P1diag(λn1, . . . , λnm)P.

大注意

:

そういう

A

が取れないような行列

M

もある

.

というかそのほう

が普通

.

:

(14)

ベクトル・行列の計算 反復法

反復法ののり

in

疑似コード 配列

x[]

に適当な初期値で初期化 以下反復

I x

を更新する

(x

g(x)

を代入する)

I |

誤差

|2=|

今回の

x

前回の

x|2

が定数より小さければ

break (反復

を抜け出す)

x

を出力

注意

わざとはっきり書いてないけど

, Newton

法の収束のときみたいに

,

変数として

今回の

x

と前回の

x

がいるよね

. g(x)

の計算のところが行列やベクトルの積だよね

.

大注意

xn

n

,

ベクトルのインデックスでなく

,

数列

(

ベクトル

)

の添え字

.

したがってプログラム中には現れない

.

(15)

ベクトル・行列の計算 反復法

来週の

Quiz

計画

!

来週は予習

(

復習

?)

問題

.

次の連立

1

次方程式を

, (

拡大係数行列だけの操

作で

)Gauss-Jordan

の消去法

(

前進消去

+

後退消去

)

で解け

. 線形代数II

2x+3y+z=1 x +z=3 x −y =2

の類似問題

.

お知らせ

演習

e

ラーニングシステムの評価ページの合計にはこれまで意味 のない点数やパーセントが表示されましたが

,

現在は

,

科目 の点数

100

点のうち

,

これまでに獲得した点数を表示するよ うにしました

.

演習

2010-07-17

2

の補講は自由参加

.

この日

12:15

E11,E12,E13

の課題の提出の最終チャンス

(

病気

,

公務欠席

などによる延長はありません

)

講義 レポート

R11

課題

L11

資料参照

(16)

ベクトル・行列の計算 反復法

ファイナルトライアル計画

!

.

.

科目の成績100点中50. 外部記憶ペーパー使用可能.別紙参照.

準備としては,まずは各回のquizを確実に解けるようになること,演習課題を心から理解す ることをお奨めします. 模範解答を作ろうプロジェクトはない予定.

現在のところの出題計画(2010-07-16に更新されます) 台形公式で数値積分しよう!

シンプソン公式で数値積分しよう! データの平均,分散,標準偏差を求めよう! 2変量データの相関係数を求めよう! 2分法で非線形方程式を解こう!

反復法で連立1次方程式や非線形方程式を解こう!(一部プチテスト範囲再出題) 連立1次方程式をGauss-Jordanの消去法計算機バージョンで解こう!

行列やベクトルを成分で計算するプログラムを書こう! ニュートン法のプログラムを書こう!(プチテスト範囲再出題) 漸化式で定義される数列akについてn

k=0akを求めるプログラムを書こう!(プチテス ト範囲再出題)

参照

関連したドキュメント

行列の標準形に関する研究は、既に多数発表されているが、行列の標準形と標準形への変 換行列の構成的算法に関しては、 Jordan

金沢大学は,去る3月23日に宝町地区の再開 発を象徴する附属病院病棟新営工事の起工式

 第一の方法は、不安の原因を特定した上で、それを制御しようとするもので

テューリングは、数学者が紙と鉛筆を用いて計算を行う過程を極限まで抽象化することに よりテューリング機械の定義に到達した。

この節では mKdV 方程式を興味の中心に据えて,mKdV 方程式によって統制されるような平面曲線の連 続朗変形,半離散 mKdV

LicenseManager, JobCenter MG/SV および JobCenter CL/Win のインストール方法を 説明します。次の手順に従って作業を行ってください。.. …

越欠損金額を合併法人の所得の金額の計算上︑損金の額に算入

その 2-1(方法A) 原則の方法 A