数学とか語学とか楽しいよね

数学とか語学とか楽しいよね。ドイツ語とかフランス語とか数値計算とか勉強したことをまとめます。

【数値計算】Gauss-Seidel法(ガウス・ザイデル法)の説明 理論編

Gauss-Seidel法とは

連立一次方程式を解くための基本的な反復法です。反復法とは一回の計算で解を求めるのではなく、ある決まった手順を何度も繰り返しながら真の解へと近づいていく方法です。数値計算では有限桁までしか表現できないので、得られる解は誤差を含んだものになります。ちなみに、何故連立一次方程式を解くのかというと、有限要素法などで方程式を離散化すると最終的に連立一次方程式に帰着されるからです。

反復手順

まず解こうとする連立一次方程式を

 Ax=b

としましょう。ここで、  A n \times n の行列、 x b n 次元のベクトルです。 A b が既知で、 x が未知です。例えば、 3 \times 3 だと

 \left( \begin{array}{ccc} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{array} \right) \left( \begin{array}{c} x_1 \\ x_2 \\ x_3 \end{array} \right) = \left( \begin{array}{c} b_1 \\ b_2 \\ b_3 \end{array} \right)

です。この行列  A

 A=D+L+U

と分解します。ここで、 D は対角行列(対角成分以外は成分が0の行列)、 L は下三角行列(対角線の下にだけ非零の成分が入っている行列)、 U は上三角行列(対角線の上にだけ非零の成分が入っている行列)です。いかめしく書いていますが、具体例を見ればすぐ分かると思います。例えば、

 A=\begin{pmatrix} 10 & 1 & 1 \\ 2 & 10 & 1 \\2 & 2 & 10 \\ \end{pmatrix}

としましょう。このとき、 A は、

 A=\begin{pmatrix} 10 & 1 & 1 \\ 2 & 10 & 1 \\ 2 & 2 & 10 \\ \end{pmatrix}=\begin{pmatrix} 10 & 0 & 0 \\ 0 & 10 & 0 \\ 0 & 0 & 10 \\ \end{pmatrix}+\begin{pmatrix} 0 & 0 & 0 \\ 2 & 0 & 0 \\ 2 & 2 & 0 \\ \end{pmatrix}+\begin{pmatrix} 0 & 1 & 1 \\ 0 & 0 & 1 \\ 0 & 0 & 0 \\ \end{pmatrix}

のように分解できるよね、と言っているだけです。さて、この分解を最初の連立一次方程式に代入すると

 (D+L+U)x=b

となります。次に、 Ux を右辺に移項して

 (D+L)x=-Ux+b

です。最後に、この両辺に  D+L逆行列  (D+L)^{-1} を左からかけて

 x=-(D+L)^{-1}Ux+(D+L)^{-1}b

を得ます。これをもとにGauss-Seidel法の反復式を作ります。まず、 k ステップ目での  x の近似解を  x^k としましょう。次のステップ( k+1 ステップ目)での  x の近似解を先ほどの式を使って

 x^{k+1}=-(D+L)^{-1}Ux^k+(D+L)^{-1}b

のように決めることにします。これがGauss-Seidel法の反復式です。適当な初期値  x^0 からスタートした数列  x^0, x^1,\cdots は、もし収束するなら  Ax=b を満たす  x へと収束します。なぜなら、数列  x^0, x^1,\cdots x^* に収束したとすると

 x^{*}=-(D+L)^{-1}Ux^*+(D+L)^{-1}b

が成り立ちます。後はこの式を逆に変形していけば

 Ax^*=b

となるので  x=x^* です。

実際の数値計算は有限桁なので、誤差が一定値以下になったら計算を切り上げます。誤差の決め方ですが、自分で決めた誤差の下限  \epsilon (小さい値)に対して

 \max_{1 \leq i \leq n} |x_i^{k+1} - x_i^{k}|\ < \epsilon

となったら反復を止めることにします。この式の意味は、 k+1 ステップ目の近似解と  k ステップ目の近似解の差を取ったとき、その差が最大になるものが、あらかじめ定めておいた誤差の下限を下回ったら反復を止めるということです。つまり、近似解の値があまり更新されなくなったら反復を止めよう、と言っているだけです。実は他にも止める基準はあるのですがそれはまた今度。

長くなってきたので一度切りますが、これだけではきっと分からないと思うので、具体的な行列に対する例は次回書きます。

注 Gauss-Seidel法の収束については、結構大変なので別の記事で触れます。

参考

英語で学ぶ数値解析

英語で学ぶ数値解析

楽しい反復法

楽しい反復法

【語学学習】どうやって新しい外国語を読めるようにするか?

私の外国語遍歴?

私は今までに色々な言語に手を出して参りました。大学での第二外学国語のアラビア語に始まり、ラテン語、ドイツ語、デンマーク語、オランダ語、古典ギリシャ語、フランス語、チェコ語、ロシア語、スペイン語、イタリア語。しかし、いろいろやりすぎて何も身に着かない状態が続いていました(それでも様々な言語に触れることが出来てよかったと思っていますが)。そこで、まずはひとつの言語をある程度までしっかり勉強してから他の言語に手を出すことにしました。そこで始めたのがドイツ語です。

文法を身につけましょう

ドイツ語を始めるにあたって、まずは薄い参考書を用いてその言語の全体をおおまかに把握することから始めました。あまり分厚い本に最初から取り組むと挫折しやすいので、最初は薄い参考書から始めましょう。この参考書をとにかく一度読み通します。活用や単語は、こんなのがあるんだ、ぐらいでどんどん進んでいきます。読み終えたらすぐに二週目を始めます。二回目は単語や活用をちゃんと覚えようと努力します。今ならAnkiを使って覚えます。これで基礎文法は大丈夫だと思います。今まで私が語学学習を挫折してきたのはこの二週目の復習が無かったから、だと思います。一回読んだくらいだと人間どんどん忘れてしまいます。欲を言えば三週すれば万全でしょう。

単語もちゃんと覚えましょう

実は、今まで私が語学学習を挫折してきた理由はもう一つあるんです。それは、基礎的な単語を1000語以上覚える努力を完全に怠っていたのです。入門書を一周してだいたいのその言語の特徴を把握するだけで満足していたのです。それではいけません!単語集等を使って覚えましょう。千野栄一先生も著書の中で述べられているように、「語学で必要なのは語彙と文法」なのです。さらに、「基礎語を1000覚えてしまえば初級は卒業でその言語は無に戻ることはない」ということなのです。だから新しい外国語をやる時は、薄い文法書1冊と基礎語1000語を覚えることができる環境を作り出さないといけません。これは例えば、よいテキストや単語集、外国語に取り組む時間、そして気力ないしやる気です。

私のドイツ語は、文法書をやった後、"Mastering German Vocabulary"や『ドイツ基本語5000辞典』を使ってちゃんと単語を覚えたので(後者は10月に終わる予定)、辞書をひきひきWikipediaを読めるようになりました。これで初級は卒業です。初級を卒業したら他の外国語に手を出しても大丈夫です。今、私もフランス語をはじめています。

薄い参考書が終わったら、同じようなレベルの参考書を何冊か読む、のもオススメです。文法の復習にもなるし、場合によってはある本には載っていない文法事項を学習できたりします(入門書は意外とレベルがまちまちでどこまで載っている範囲が全然違う)。さらにここで未知語を拾っておくと1000語の壁を超えるのがかなり楽になります。

外国語上達法 (岩波新書 黄版 329)

外国語上達法 (岩波新書 黄版 329)

Mastering German Vocabulary: A Thematic Approach (Mastering Vocabulary)

Mastering German Vocabulary: A Thematic Approach (Mastering Vocabulary)

  • 作者: Veronika Schnorr,Martin Crellin,Adelheid Schnorr-Dummler,Gabriele Forst,Raymond Sudmeyer
  • 出版社/メーカー: Barrons Educational Series Inc
  • 発売日: 1995/08
  • メディア: ペーパーバック
  • クリック: 4回
  • この商品を含むブログ (3件) を見る
ドイツ基本語5000辞典

ドイツ基本語5000辞典

そして終わりのない中・上級へ

難しいのが中級からです。これはもうどんどん原文を読んでいくしかありません。なるべく自分の興味がある内容がよいです。Wikipediaはこのためにとても役に立ちます。あらかじめ日本語や英語でその記事を読んでおけば、ドイツ語の記事の内容が想像できます。類推もかなり効くようになります。しかも、専門性の高い記事ほど英語を訳しただけだったりするのでかなり読めます。さらに関連事項も読んでいくとよいです。Wikipediaを読みつつ、未知語をAnkiに放り込み、わからない文法事項は詳しめの文法書で調べて解決しましょう。やはり、読んでいて自然と出会う語彙がその人にとって本当に必要な語彙である、と思います。あと多少メジャーな言語だと中級向けの解釈の参考書や読本があるのでそれで学習しましょう。基本的に英語以外の言語の参考書はいつ絶版になってAmazonで高額で購入しないとけなくなるかわからないので積極的に入手していきましょう。私も将来やるであろう外国語の参考書を普段から集めています。趣味みたいなもんです。

注 新しい外国語は同時並行で2つ以上勉強しないほうがいいです。経験上どちらもポシャります。

参考


【数値計算】有限要素法のプログラミングを勉強するときにどの順序で学ぶのがよいか?【導入編】

有限要素法のプログラミングを勉強したいと思っている方たくさんいると思います。私も最初はちんぷんかんぷんでした。Poisson方程式やら移流拡散方程式やらたくさん出てきます。有限要素法や数値計算の本を山ほど仕入れてきてうんうん唸っていました。そんな悪戦苦闘を通して、最近有限要素法がだんだんわかってきました。有限要素法を効率よく勉強するためには、以下の問題に対するプログラムを作成していくのが一番効率がよいと思います。


一次元Poisson方程式(一次元Laplace方程式でも可)

一次元定常移流拡散方程式

一次元非定常拡散方程式

一次元非定常移流拡散方程式

一次元非定常Burgers方程式

まずは一次元から始めるのがよいと思います。もちろん有限要素法が威力を発揮し始めるのは二次元以上ですがシンプルなものから勉強するべきです。

一次元Poisson方程式

そこで最初に一次元Poisson方程式を解くコードを作ります。これは拡散項のある定常問題を解けるようにするためです。ソース項のないLaplace方程式でも可です。ここで大規模な連立一次方程式の解法も学びます。私はGauss-Seidelを愛用していますが、Gaussの消去法も押さえておきましょう。前者が反復法の代表で、後者が直接法の代表です。

一次元定常移流拡散方程式

この問題で拡散項と移流項が存在する定常問題の解き方を学びます。

一次元非定常拡散方程式

この問題では、拡散項だけが存在する非定常問題の解き方を学びます。陽解法、陰解法ともに作ります。

一次元非定常移流拡散方程式

次に非定常拡散方程式に移流項を足した問題の解き方を学びます。陽解法、陰解法ともに作ります。これが出来たら線型はもう大丈夫です。非線型問題を解くことは、線型問題を繰り返し解いていくのと同じなので線型問題が解けることは非常に重要です。

一次元非定常Burgers方程式

最後が一次元非定常Burgers方程式です。この問題では、非線型問題の解き方を学びます。Burgers方程式の場合は移流項が非線型項になります。将来Navier-Stokes方程式を解くときにも役立ちます。陽解法、陰解法ともに作ります。陰解法の場合は適当な反復法(Newton法とかPicard反復とか)が必要なのでそれも学びます。

導入なのでざっくりとしか書いていませんが流れはこんな感じです。このあとは風上化編に続きます(執筆中)。コードを書く際に参考になる文献の紹介や各問題の詳細な解説はまた別の記事でやります。

注 一次元移流方程式はリストに入れていませんが、これは風上化を導入した後に解くべきなのであとまわしになっています。

【語学学習】Wikipediaを使った中・上級者向けの英語学習法

中・上級者にとって一番大事なことはどんどん原文を読み進めていくことと単語をどんどん覚えることです。ただ単語を覚えるといっても無味乾燥な例文で単語を覚えるのが苦手な方も多いと思います。さらに、中級のうちは英語ならば単語集もありますが、上級になってくるとちょうどよい単語集というのは見当たらなくなってきます。そこで原文(例えばWikipedia英語版の自分の興味のある記事)を読みつつ、出てくる未知語を暗記していくと、非常に効率よく学習を進められます。未知語の暗記にはスマホアプリのAnkiを使います。


では早速やり方を解説していきます。例えばWikipedia英語版の森鴎外のページを読んでいて知らない単語"acrimonious"が

He divorced her the following year under acrimonious circumstances that irreparably ended his friendship with Nishi.

このように出てきたとします。まずは、Weblioで未知語の意味を調べます。次に未知語と用例、そしてその意味を以下の写真のようにAnkiに打ち込みます。用例はWeblioのものを使ってもよいですし、私は記憶残りやすさから実際の読んでいた文章を用例として使っています。


f:id:mutsumunemitsutan:20170920195957j:plain:w300

私も毎日この方法でわからない単語、熟語をどんどんAnkiに放り込んでいきます。ノートを使って暗記していたころは、未知語が出てきてもどうせ覚えきれないだろうと考えてやる気がなくなっていましたが、今はAnkiに放り込みさえすればいつか覚えられるので英文をどんどん読み進めることができます!

Wikipediaだけでなく、TimeやBBC Newsを読むのもおすすめです。なかなか高級な語彙が出てきて楽しいです。

ちなみにAnkiで復習する際、私はどうしても単語だけでは思い出せない時だけ用例を読むことにしています。こうすることにより、スピーディな復習ができます。

さらに、この方法は英語などと違って、ちゃんとした単語集のないようなマイナー言語を勉強するのにも適しています。Wikipediaならだいたいのマイナー言語をカバーしています。

【語学学習】『朝倉初級フランス語』

スマホアプリを活用しつつ、『朝倉初級フランス語』でフランス語を勉強しています。

朝倉初級フランス語 (1965年)

朝倉初級フランス語 (1965年)

この本はフランス語の文法をしっかり勉強しようという方におすすめです。以下にこの本の利点と欠点を挙げていくので、読もうと思っている方は参考にして下さい。

利点

・文章中心である(例文によって構成されている)

会話中心の本が多い今日この頃ですが、この本はきちんと将来フランス語の本を読むときのことを考えて、文章中心で構成されています。長さもほどよく暗唱にもおすすめです。

・語の意味が脚注に示されている

「語の意味が脚注に示されている」というのはかなり重要なことです。初級のうちは辞書を引くのに時間がかかるわりに得られる利益は少ないので、語の意味が書いてあるとすらすら先に進めます。ラテン語とか古典語を勉強しているとつくづくそう思います。

・見開き2ページで1課が終わる

やる気があまり無いときでも、2ページならやるかあと勉強できます。あと全部で100課なのも切りが良いです。

・発音記号が完備されている

今回の私の目的には関係ありませんが発音をしっかり勉強したい方におすすめです。音のつながりも全て記述されています。

欠点

・文法の説明が少々少ない

『朝倉初級フランス語』が終わったら、詳しい文法書『リュミエール』を読みましょう。私もそうする予定です。実は昔『リュミエール』読もうとしたのですが詳しすぎて挫折しました。初級のうちはあまり情報を詰め込みすぎない方がよいようです。『リュミエール』をパラパラめくってみたところ、気になる文法事項の説明がちょいちょいありました。『朝倉初級フランス語』を読み終えてからだと『リュミエール』に滑らかにつながりそうです。

増補改訂版 新・リュミエール―フランス文法参考書

増補改訂版 新・リュミエール―フランス文法参考書

・接続法の半過去と大過去が載っていない

接続法の半過去と大過去が載っていませんが単純過去は載っています。接続法の半過去と大過去は『リュミエール』等の詳しめな文法書を読む必要があります。ちなみに簡単なフランス語の入門書を見ると、大概単純過去は話言葉では使わないから省略すると書いてあります。しかし、『星の王子様』などのフランス語の本を読むと、単純過去は頻出することがわかるでしょう。単純過去も大事です。

・練習問題がない

練習問題をやらないと気が済まないという方は他の本が必要です。ただ私はあまり練習問題はやらずに、地道に文章を読んでいくほうが好きです。

【語学学習】誰でもできる簡単な単語暗記法

誰でもできる簡単な単語暗記法というセンセーショナルな見出しにしましたが、騙されたと思って是非以下に説明する方法を試してみてください。元手はゼロです。

例えば「apple」という単語があってその意味「りんご」を覚えたいとします。この場合、「apple りんご」と頭の中で20回繰り返します。大事なのは「apple」と書くときは頭の中で実際にペンで書いているようにイメージすることです。書き流すのではなく、なるべく一画一画書いた方が効果が高いように感じられます。「りんご」の部分は頭の中で発音するだけでOKです。嘘だと思うかもしれませんがこれだけです。

私がこの方法を思いついたのは『上達の技術』という本のおかげです。この本は「如何に上達するか」という課題に対して科学的に、定量的に取り組んでいる本です。勉強法や方法論を探している人は必読です。この本の中に「20秒かけて1つのことを記憶すれば、その記憶は短期記憶から長期記憶に移行して安定する」という記述があり、騙されたと思って実際に試してみたら難解な英単語を簡単に覚えることが出来たのです!ただ時間を毎回測るのは面倒なので20秒を20回にして使っています。また、この本の中に「脳にとって実際に物事を行うのとイメージするのは等価である」と書いてあり、びびっときた私は20回唱える際に実際に頭の中でその単語のスペリングを書いてみることにしたのです。そうすると、イメージしない時よりも(頭の中でただ「apple」と発音するだけよりも)記憶に残ることがわかりました。この2つの要素を組み合わせることによりかなり効果的に短期記憶を長期記憶に移行させることに成功したと思います。

上達の技術 一直線にうまくなるための極意 (サイエンス・アイ新書)

上達の技術 一直線にうまくなるための極意 (サイエンス・アイ新書)

単語の意味以外にも、活用の暗記や文章の暗唱にもこの方法は使うことができます。例えば、フランス語の動詞の活用だったら

je pars
tu pars
il part
nous parlons
vous parlez
ils parlent

を1セットとして20回繰り返すだけです。文章の暗唱の場合は

L'homme n'est qu'un roseau, le plus faible de la nature, mais c'est un roseau pensant.

と一文を20回繰り返してから次の文を

Il ne faut pas que l'univers entier s'arme pour l'écraser ; une vapeur, une goutte d'eau suffit pour le tuer.

と暗記していきます。文章を暗記しておくと、歩きながら復習ができるのでかなりおすすめです。活用の暗記や、文章の暗唱をやる際の注意事項としては、まず覚えるべきものを見ないで思い出せるようにしなければならないということです。一見これは難しそうですが、要するに短期記憶に入れてしまえばよいだけなので慣れれば簡単です。記憶力というやつはずっと続けていると筋肉のように発達してくるようです。

この方法で私はフランス語の活用をどんどん頭に突っ込んでいます。活用を覚えると文章が読めるようになり、フランス語の学習が加速します。

【語学学習】「Anki」を使ってフランス語の勉強を始めました

『朝倉初級フランス語』という100課から成る本でフランス語の勉強を始めました。フランス語学習の目的としては、なにより「フランス語で書かれた書物を読むこと」を最優先にしていきます。なので発音は適当に済ませてしまいます(こんなこと言うと怒られてしまうかもしれませんが、人生は有限なので取捨選択する必要があるのです)。Saint-Exupéryの"Le Petit Prince" (星の王子様)、Mériméeの"Carmen"、Oscar Wildeの"Salomé"、そして何よりPascalの"Pensées"(パンセ)を読みたいのです!

昔少々フランス語をやろうとしたことがあり、『朝倉初級フランス語』に取り組んだのですが、最初は30課あたりで、その次は60課あたりで見事に挫折しました。前述の事柄をちゃんと消化せずに先に進んでしまい、混乱して嫌になる、というパターンにはまっていました。

朝倉初級フランス語 (1965年)

朝倉初級フランス語 (1965年)

Ankiとは

そこで今回はスマホアプリを有効に使って語学学習を進めることにしました。具体的には「Anki」というアプリを使います。Ankiは暗記用のカードを自ら作成することができ、さらにそのカードの復習タイミングを自動で決定してくれるアプリです。これは本当に素晴らしいアプリで語学学習の心強い味方です!6年前にこのアプリの存在を知っていれば今頃私は英独仏がすらすら読めているでしょう…まあ済んだことを嘆いても仕方がないです。トイレや列に並んでいるときなど、いつでも語学学習ができるようになります。どうやらアンドロイドだとただで、iPhoneだと3,000円みたいです。私はアンドロイドなのでただで使わせて頂いていますが3,000円出す価値は十分にあると言えます。ちなみにパソコン版もありますが(フリー)どこでも学習できるという点でスマホが優れているので私は使っていません。

AnkiMobile Flashcards

AnkiMobile Flashcards

  • Ankitects Pty Ltd
  • 教育
  • ¥3,000

Ankiの活用法

Ankiではカードを自分で作成できます。Ankiのカードは表面(問題)と裏面(答え)から構成されています。私はこれを以下のように勝手に三種類にして使っています。

1, フランス語の単語から日本語の意味を答える
2, フランス語の動詞から活用を答える
3, 文法事項に関する質問

まず1ですが、例えば表に「aimer」と書いて、裏に「愛する」と書けばどんどん単語の意味を覚えられます。次に2では、「avoirの現在形」と表に書き、裏に「j'ai tu as il a nous avons vous avez ils ont」のように書いて活用を覚えています。やはりフランス語初級においては活用の地道な暗記がかなりの部分を占めているようです。最後に3ですが、これは表に「大過去はどのようにあらわすか」と書き、裏に「半過去+過去分詞」のように書いています。あと用法が重要な単語、熟語には例文もつけます。例えば、表に「se trouver Je me trouverai chez vous à trois heures.」と書き、裏に「ある、いる」と書いています。単語を見ただけでは意味が分からない時に例文を見ます。私は例文には日本語訳をつけていませんがつけてもよいですね。2と3のやり方は意外と皆さんやっていないのではないでしょうか?是非試してみてください。使用法としては、教科書を読みつつ覚えていない単語、表現、文法事項をかたっぱしからAnkiに突っ込んでいくだけです。非常に簡単です。

ここでは述べませんでしたがもちろん「日本語からフランス語を答える」という形式もあり得ますし、有益です。しかし、今回の私の目的は「フランス語で書かれた書物を読むこと」なのでやっていません。各人の目的に合わせた使い方が出来たらベストですね。

Ankiの利点

「復習タイミングを自動で決定」してくれる機能が素晴らしいです。これはAnkiが忘却曲線に基づいて、忘れそうなタイミングでカードを出題してくれる機能です。覚えているカードはたまに出てくるだけなのに対して、あまり覚えていないカードは毎日出題されます。私も昔忘却曲線に基づいてカードを用いた暗記を始めようとしたことがありますが、どのカードをいつ復習するか管理するのが想像以上に面倒くさくて挫折しました。この面倒くさい作業を自動で行えるというのはただただ有難いです。さらに復習の強度(新出のカードや復習するカードの枚数は何枚)を自由に設定できるのもかゆいところに手が届きます。

最後に

Ankiを使って三度目の正直、フランス語を学習していきます。ちなみに私のやり方は読書猿さんの以下のブログにかなり影響を受けています。是非読んでみてください。参考になるでしょう。まったくすごいブログです。このブログからどれほど有益な情報、本を知ることができたでしょうか。

追記

Ankiを使った英語中・上級者の学習法について書きました。