2017年6月19日月曜日

Linear Algebra (D. Cherney et al.) 8日目

CC BY-NC-SA 3.0

Chapter 8. Determinants

8.1 The Determinant Formula

8.1.2 Pemutations (置換)

のような順序を考える集合の並び替えをpermutation(置換)という.ある置換は,全単射な写像であると考えることが出来る.

と書き下すことが出来る.置換には以下の重要な性質がある.
1. 要素数の集合の置換は個ある.
2. 任意の置換は,2つの要素の順番を交換する置換(特に互換という)の有限個の適用によって表現できる.
3. 任意の置換について,を表現する互換の個数は常に偶数か奇数で,偶数であるときを偶置換,奇数であるとき奇置換という.

Definition the sign function

置換に,その偶奇性を返す関数を符号関数といい

で定める.

Definition the determinant (行列式)

のdeterminant(行列式)を,

と定める.ただし,の置換の集合とする.

Theorem 8.1.1

が,すべての要素がである行を一つ以上持つとき,.

Swapping rows

行基本変形によって行列式がどうなるか調べる.
行列の行を交換した行列をとする.ある置換について,を交換した置換を考えると,あきらかに

したがって,とすると,

よって,行の交換によって,行列式は符号のみ変化する.

corollary

が2つ以上同じ行を持つとき,その2つを選んで交換した行列をとすると,

8.2 Elementary Matrices and Determinants

8.2.2 Row Multiplication

のある行を倍した行列をとすると,

8.2.3

のある行の倍を他の行に加えた行列をとすると,

8.2.4 Determinant of Products

行列に左からかけて基本変形を行う行列
1. : 行目と行目を交換する
2. : 行目を倍する
3. : 行目を倍して行目に加える

について,が成立する.
行列の被約階段行列に変形できるとき,それをと書く.が上の基本変形行列を左からけけてにできるとき,つまりとできるとき,
1. が可逆でないとき,にはすべての要素がである行が存在するので,.
2. が可逆であるとき,は単位行列で,.
行列の積の行列式はそれぞれの行列の行列式の積だから,

Theorem 8.2.2

は可逆でない

Basic Analysis (Jiri Lebl) 23日目 距離空間上の点列の極限

CC BY-NC-SA 3.0

7.3 Sequences and convergence

は距離空間とする.

7.3.1 Sequences

Definition 7.3.1

上の点列とはという写像.と書く.またとも書く.
が有界である

部分列は数列の部分列と同じように定義する.

点列の収束は数列の収束の一般化で,数列の場合は絶対値を距離としたのを,その距離空間での距離に置き換えただけで,したがって殆どの数列の収束に関する定理は点列の場合でも成立する.

7.3.2 Convergence in Euclidean space

この節では,距離はすべてユークリッド距離とする.

Proposition 7.3.7

について,と書くと,
が収束する 任意のが収束する.

proof.


とする.任意のなるが存在する.
あるを固定すると,

が成立するから,に収束する.
()
任意のに,なるが存在する.
が存在して,から,たしかに.

7.3.3 Convergencec and topology

Proposition 7.3.8

とする.
の任意の開近傍について,ならばなるがある.
proof. 略

Proposition 7.3.9

は閉集合で,に収束するなら.
proof. 略

Proposition 7.3.10

で,
なるが存在する.
proof.


とProp. 7.3.9から成立

Prop. 7.2.20から,が存在する.の極限はである.

2017年6月18日日曜日

The Rust Programming Language 2nd 2日目 Example: Guessing Game

https://doc.rust-lang.org/book/second-edition/
Apache License Version 2.0

2. Guessing Game

数あてゲームを作る.
bash

cargo new guessing_gaame --bin

で新しいプロジェクトを作成する.ランダムな整数を生成するのにrandクレートを使うので,Cargo.tomlにrandを追加する.クレートはrustコードのパッケージであって,randlibraryクレートと言って,他のプログラムで利用されるコードが入っている.

Cargo.toml

[dependencies]
rand = "0.3.14"

main.rs

use std::io;                 // 標準ライブラリのioを名前空間に追加.
                                        // std::io::stdin()をio::stdin()と省略できる.
use std::cmp::Ordering;
use rand::Rng;

fn main() {                            // Rustではfn <関数名>で関数を定義する.
                                       // Cと同じくmainが最初に実行される.

  println!("Guess the number!");        // 文字列をコンソールに書き出すマクロ.
                                        // !は関数でなくマクロを読んでいることを表している.
                                        // インデントは4スペースがいいらしいが色々と統一したいので2スペース
                                        // ;でexpressionの終わりを明示する.
                                        // Cなどの,行の終わりに;を打つ言語とはちょっと違うらしい(後述).

  let secret_number = rand::thread_rng().gen_range(1, 101); // thread_rng()がランダムなジェネレーターをつくる
                                                            // .gen_range(1,101)で範囲内の値で生成するようにする

  loop {                   // 中でbreakするまで繰り返す.カウンタを使わない分処理が早い
    println!("Please input your guess");

    let mut guess = String::new();      // 変数の宣言は'let'で行う. 'mut'によって変数guessを可変にする.
                                        // let foo=bar;などとすると,fooにはbarが代入されて以後変更できない
                                        // String::new()は長さが可変な文字列型Stringのassociated functionで,
                                        // 新しい空の文字列を作成する.

    io::stdin().read_line(&mut guess)   // 後述(1)
      .expect("Failed to read line");

    let guess: u32 = match guess.trim().parse() { // 後述 (2)
      Ok(num) => num,
      Err(_)  => continue,
    };

    println!("You guessed: {}", guess); // 変数を文字列に埋め込んで出力する方法はpythonと同じ

    match guess.cmp(&secret_number) {   // 後述 (3)
      Ordering::Less     => println!("Too small!"),
      Ordering::Greater  => println!("Too big!"),
      Ordering::Equal    => {
        println!("You win!");
        break;
      }
    }
  }
}

(1)

    io::stdin().read_line(&mut guess)   // 後述(1)
      .expect("Failed to read line");

io::stdin()は標準入出力のhandleのインスタンスを返す.そのインスタンスのメソッドread_lineが入力を読み取り,guessに文字列として代入する.代入先の変数は可変でなければならない.&はこの引数がreferenceであることを表していて,いちいち新しくメモリを割り当てさせない.referenceはChap.4で詳しく論じる.
一行目で行われた処理はguessに値を代入することだが,read_line()はio::Reuslt型の返り値を返す.Result型は’Ok’か’Err’の値しか取らない.’Ok’は処理が正常に行われたとき返され,’Err’はそうでないときに返される.Result型のexpectメソッドによって,実行時のインスタンスがErrであったときはexpectの引数である文字列を表示し,プログラムはクラッシュする.Resultのインスタンスにexpectをつけないとコンパイル時に警告される.

(2)

    let guess: u32 = match guess.trim().parse() { // 後述 (2)
      Ok(num) => num,
      Err(_)  => continue,
    };

let <変数名> :<変数型>によって,型を指定して変数を定義できる.
新しい変数guessをu32型として定義して,もとあったguessを数値に変換した値を新しいguessに代入する.(このように,同じ名前の変数を定義して,もとあった変数を加工した値を代入することをshadowingという.)
trim()メソッドによって文字列の始まりと終わりにある空白を削除し,更にparse()によって改行記号があればそれを削除する.parse()が正常に機能したか否かをmatch expressionによって条件分岐し,正常な場合は新しいguessに,古いguessを数値として代入する.異常な場合はcontinueによって直ちに次にループを実行する.
Err()の’‘はcatchall記号で,エラーの詳細が何であっても,Errならこれに一致する.

match A { B => b, C => c, D => d, ...};

は, A がXに等しいときxを返したり実行したりする.

(3)

    match guess.cmp(&secret_number) {   // 後述 (3)
      Ordering::Less     => println!("Too small!"),
      Ordering::Greater  => println!("Too big!"),
      Ordering::Equal    => {
        println!("You win!");
        break;
      }

cmpメソッドはもとのインスタンスと引数の大小比較を行い,std::cmp::Ordering型のインスタンス{Less,Greater,Equal}のどれかを返す.返されたインスタンスが何であるかによる条件分岐をmatch expressionで実現する.

2017年6月17日土曜日

The Rust Programming Language 2nd 1日目 Introduction

https://doc.rust-lang.org/book/second-edition/
Apache License Version 2.0

1. Introduction

1.2 Hello, World!

Creating a Project with Cargo

シェル上で

cargo new hello_cargo --bin

を実行して,カレントディレクトリ以下に”hello_cargo”プロジェクトのディレクトリが作成されて,その中には必要なファイルのテンプレートが入っている.”–bin”によってライブラリでなく実行ファイルを作成することを明示している.

hello_cargo/
 ├ cargo.toml : プロジェクトの情報を書く
 └ src/       : ソースコードを置くディレクトリ
   └ main.rs : ソースコードの拡張子はrs

cargo.tomlにはプロジェクトの情報を書く.

[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]

[dependencies]

[package]欄にはプログラムの名前と著者の情報を書く.
[dependencies]欄には,このプログラムが使用するcrate(他の言語でいうライブラリ)の名前を書く.ここに書かれたcrateをcargoがダウンロードしてきて,ビルド時にリンクしてくれる.

Building and Running a Cargo Project

cargo build

によってhello_cargo直下にtargetディレクトリ以下が作られ,ビルドされた実行ファイルはtarget/debug/hello_cargo である.

cargo run 

によって,ビルドしたら直ちに実行してくれる.ソースコードに変更がない場合,ビルドをやり直すことはせず,以前つくった実行ファイルをまた実行する.

Building for Release

“cargo build”でビルドされた実行ファイルはデバッグ用の機能が埋め込まれ,最適化もされていない.”cargo build –release”によって,最適化が行われた実行ファイルが”target/release”に作成される.

Basic Analysis (Jiri Lebl) 22日目 極限と積分の順序交換

CC BY-NC-SA 3.0

6.2 INterchange of limits

6.2.1 Continuity of the limit

Theorem 6.2.2

が連続関数の列で,に一様収束するとき,は連続.
proof. 略

6.2.2 Integral of the limit

Theorem 6.2.4

で,に一様収束するとき,で,.
proof.

を固定する.に一様収束するから,なるがある.
このときであって,の有界性よりも有界.

が成立する.((1): Exercise 5.2.16, (2): のリーマン可積性)
は任意だから,のダルブー上下積分は一致し,リーマン可積分.
さらに,Prop 5.1.10から,

より,がたしかに成立.

Example 6.2.5


を計算する.


より,に一様収束する.
.

Example 6.2.6

リーマン可積分関数列の各点収束極限がリーマン可積分でない例

とすると,

上で各点収束する.
これはリーマン可積分でない.

6.2.3 Exercises

Definition

を2次元数列とする.がこの数列のjoint limitである

このときと書く.

Exercise 6.2.13

とする.任意のを固定したしたときが存在し,を固定したときも同様のことが言えるとする.このときを示せ.
答案.

とする.

が常に成立する.
を固定する.joint limitの存在よりなるが存在する.
から,十分大きな.
以上より.
したがっての極限は等しく,.
同様に.
以上により示せた.

Exercise 6.2.14

joint limitの存在は,の存在を保証しない.

とする.
(a)が存在しないこと, が存在しないことを示せ.(したがっては意味を持たない)
(b) joint limitはであることを示せ.
答案.

(a)
を固定するとき,についてであって,とともに振動して収束しない.よっては存在しない.もう一方も同様.
(b)
とする.とすると,.よって示せた.

6.3 Picard’s Theorem

これまでに学んだすべてを使ってPicard’s theoremを証明する.ある常微分方程式のクラスの解の存在と一意性を与える定理であり,応用上も重要.wikipediaにあるピカールの定理とは違う定理で,Picard–Lindelöf theorem,Picard’s existence theorem or Cauchy–Lipschitz theoremとか呼ばれることもある.

6.3.1 First order ordinary differential equation

という形の微分方程式を1階上微分方程式という.ふつう初期値を予め与えて,その条件のもとで解く.のみの関数なら,微積分学の基本定理を使えば良いが,そうでないときは解が存在するとは限らない(存在すれば一意).

6.3.2 The Theorem

Definition 6.3.1

を定義域とするを考える.が連続
に収束する任意の列について,.
で連続なら,で連続という.

Theorem 6.3.2 (Picard’s theorem on existence and uniqueness)

を有界閉区間とする.の内部,とする.は連像で,2つめの引数についてリプシッツ連続とする.すなわち

このとき,あると,で微分可能なで,をみたすがただ一つ存在する.

sketch.

条件を満たすが存在すると仮定すると,と初期値を与えると微積分学の基本定理から

が成立する.右辺を近似して,極限で右辺の解に収束するような関数列を考える.この手法をPicard iterationといい, をPicard iteratesという.

proof.

として一般性を失わない(Exercise 6.3.3).なるが存在する.なるを一つ取る.とすると,.
から帰納的にを定める.
であるとき,できちんと定義された関数であって(Exercise 6.3.2),で連続ならもまたで連続(Exercise 6.3.1).

が存在して,はまた微積分学の基本定理よりで連続である.

だから,のrangeはの部分集合.
こうしてを構成していく.が題意を満たすに収束することを示す.
である関数に一様収束することを示す.に,

が任意のに成立し,だから,

であって,とすれば
として,が成立し,
.
だからがuniform Cauchyで,であるに一様収束する(このようなは一意).
は連続関数の一様収束極限だから,連続であり,から,.
がたしかに与えられた方程式の解であることを示す.

で,から,に一様収束する.
したがってで,

である.
微積分学の基本定理から,は微分可能で導関数は.また.

6.3.4 Exercises

Exercise 6.3.1

を区間とする.が2変数の連続関数で,が連続なら,上連続と示せ.
答案.

での連続性を示す.
に収束するを任意にとる.の連続性からに収束する.
に収束するに含まれる数列であって,の連続性から任意の
なるがある.
これはでの連続性と同値.

Exercise 6.3.2

は有界な閉区間とする.が連続なら,は有界であると示せ.
答案.

非有界であるとして矛盾を導く.
を満たすようなが存在する.Bolzano-Weierstrassの定理(多次元)から,収束する部分列がある.その極限をとすると,は有限値.一方は発散する.これはの連続性に反する.背理法によって示せた.

Basic Analysis (Jiri Lebl) 21日目 関数列の収束

CC BY-NC-SA 3.0

大概の本ではこの章の議論は数列の議論の直後にやる一方,関数のノルム収束は扱われないことが多い.

Chapter 6. Sequences and Functions

この章ではとする.

6.1 Pointwise and uniform convergence

6.1.1 Pointwise convergence

Definition 6.1.1. (各点収束)

にpointwise converge(各点収束)する

つまり、各を固定したとき、数列に収束するということ.

Example 6.1.4

とする.これは以外のすべての点でいかなる関数にも各点収束しない.
proof.

において,が常に成立するので,に収束する.
それ以外の点でいかなるをとっても,で,を満たすが存在する.
このとき,が成立する.よってはコーシー列でないので,収束しない.

6.1.2 Uniform convergence (一様収束)

Definition 6.1.6

に一様収束する

Proposition 6.1.7

に一様収束するとき,に各点収束する.
proof.

定義より明らか.

Example 6.1.8

で各点収束するが一様収束しない.
proof.


に各点収束するのは明らか.
一方,あるに一様収束すると仮定する.とすると,で,
となるによらず存在する.
両辺でをとると,
なるがあって、 である. とするととなり,矛盾.背理法によってが一様収束しないと示せた.

6.1.3 Convergence in uniform norm

有界関数にある実数(uniform norm)を与える.uniform normは恒等関数0からのその関数の距離を表している(多くの本ではノルムのことを長さの一般化としているが,原点からの距離と長さを同一視するのは自然かも).関数列から関数のノルムの実数列を作って,収束性を議論する.

Definition 6.1.9

有界なのuniform norm(sup norm, infinity norm)を

と定める.

Proposition 6.1.10

に一様収束する


proof.

()
が成立する.
ここでの性質よりが常に成立するから,がたしかに成立.
()
から明らか.

Example 6.1.11

とする.

よってに一様収束する.

Definition 6.1.12

は有界な関数列とする.この関数列が”Cauchy in the uniform norm” or “uniformly Cauchy”である

Proposition 6.1.13

は有界関数の列とする.がCauchy in the uniform normである

proof. 略

6.1.4 Exercises

Exercise 6.1.9

のそれぞれの関数が単調増加とする.
なら,に一様収束すると示せ.
答案.


よって示せた

Exercise 6.1.10

について,をみたす各要素が異なる数列が存在するとき,以下の命題の真偽を調べよ
(a) 0に各点収束するようながある
(b) 0に一様収束するようながある
答案.

(a)

とすると,任意のについて,
またでは常に.よってに各点収束していて,命題(a)は真.
(b)

が必ず成り立つから,命題(b)は偽.

Exercise 6.1.11

連続関数を固定し,

とする.まずが連続であると示し,さらにを定義域とする

としたとき,に一様収束することを示せ.
答案.

の連続性は明らかである.
について,が十分大きければであって, だから,となる.
であれば,

の連続性から,に,なるがある.

したがって,ならば.
x=b の場合も同様にならばが言える.
以上より,任意のに,ならばなるが存在する.
よって確かにに一様収束する.

2017年6月15日木曜日

Basic Analysis (Jiri Lebl) 20日目 Cauchyの主値

CC BY-NC-SA 3.0

Cauchy principal value (Cauchyの主値)

のような,普通には広義積分が収束しない場合にも与えられることがある値.

Definition

について,なる任意のと任意のに,でリーマン可積分であるとき,

が収束するとき,これをCauchyの主値という.

Exercise 5.5.13

(a) を計算せよ
(b) が,(a)と異なることを示せ.
(c) ならば,を示せ
(d) を特異点に持ち,が存在するが,が存在しないようなを見つけろ
(e) が連続とする.が存在することを示せ

答案.

(a)
(b)

確かに(a)で得られた値と異なっている.
(c)
特異点として,任意のにおいては可積分で,

が常に成立するから.定積分と主値積分は等しい.
(d)
(a)で与えられたが求める条件を満たしている.
(e)
特異点は明らかにのみ.またで連続だから,任意のに,でリーマン可積分である.微積分の基本定理(Second form)より,があって,で連続だから
が存在することを言えば良い.


ビーンもうダメ

Exercise 5.5.14

は連続で,あるがあって以外の点はで常に0の値を取る.
(a)

で定義されていることを示せ.
(b)
ならば,

を示せ.
答案.

(a)
ならばだから,積分区間をとそれ以下,それ以上の3つに区切れば,常に以外の区間での積分はとなり,