2016-06-29

計算機演習(第11回)

今回は、Haskellにおけるリストの内包表記、タプル (tuple)、いろいろなデータ型が出てきました。

私も実際にレポート課題を解いていますが、昨年のことをほとんど忘れており、使わない知識はあっという間に忘れてしまうことを実感しています。なんとかプログラムを組んだのですが、TAの人から誤りを指摘されました。変数が動く範囲で、本来は「k未満」としなければならない部分が「k以下」になっていたようです。お恥ずかしいミスでした。

2016-06-28

数学セミナーA(第10回)

今回は、オイラー・グラフの性質の残った部分と、オイラー・グラフの小道 (trail) を構成するFleuryのアルゴリズムについて学びました。

次回は、セクションを進めてハミルトン・グラフについて学びます。

2016-06-27

計算機数学I(第10回)

今回は、前回紹介した拡張Euclid互除法の定理の証明の続きを行い、そのアルゴリズムの説明を行いました。そして、Euclid互除法の応用例として、連分数展開の計算を紹介しました。

有理数の連分数展開は有限項で終わりますが、無理数についても、2次無理数(整係数2次方程式の根)の場合には、循環連分数で展開できます。そこで、2次無理数の循環連分数展開についても説明しました。

次回は、拡張Euclid互除法の次の応用例として、法逆元 (modular inverse) の計算を紹介したいと思います。

授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016

2016-06-22

計算機演習(第10回)

今回はHaskell編の2回目で、関数の定義やリストの操作を中心に行っています。

レポートには複数個の課題が出ており、提出はその回のすべての課題の解答(プログラム)を1つのファイルにまとめて提出することになりますが、開発の段階では、プログラム毎にファイルを作り、開発→デバッグを行うのが効率がよさそうです。

2016-06-21

数学セミナーA(第9回)

今回は、オイラー・グラフの定義と性質について議論しました。特に、連結グラフがオイラー・グラフであるための必要十分条件は重要です。

次回は、今回の節の残りの部分を読み、ハミルトン・グラフに進む予定です。

2016-06-20

計算機数学I(第9回)

今回は、Euclid互除法のアルゴリズムについて説明しました。アルゴリズムの停止性についてはテキストに説明がありましたので、授業では、Euclid互除法によってい生成される剰余列の長さの評価に関する性質を示し、これがフィボナッチ数列と関連があることや、剰余列の長さの上界に黄金比が現れることなどを紹介しました。その後、拡張Euclid互除法に入りました。

次回は、拡張Euclid互除法のアルゴリズムと性質を示し、拡張Euclid互除法の応用に進みます。

授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016

2016-06-15

計算機演習(第9回)

今回から、プログラミング言語Haskellの演習に入りました。Haskell編は、同じ数学類の坂井公先生が担当されるので、私は端末室でHaskellを動かしたりしながら学生サポートに回っています。

今回は、Haskellの初回ですので、Haskellのプログラミングに慣れる内容で、テキストエディタによるプログラムの編集、Haskell環境 (WinGHCi) の使い方について、説明が行われました。その後、WinGHCiで対話的な計算を行っていました。

2016-06-14

数学セミナーA(第8回)

前回の授業から2週間空きましたが、今回は、連結なグラフの点(頂点)を除去してグラフを非連結にする際の性質について議論しました。そして、任意の連結グラフに対して、その辺連結度が(点)連結度と常に等しいかより大きくなるという性質を証明しました。この証明は、テキストには「証明できる」とだけ書いてありましたが、今日の担当者は自分達で証明を 学んで発表していたので、参考になったと思います。

次回は、連結グラフの中でもよく知られているオイラーグラフについて学びます。

2016-06-13

計算機数学I(第8回)

今回は、主に1変数多項式に対する剰余つき除算のアルゴリズムを示したのち、テキストの第4章に進みました。今日のところは、Euclidの互除法に入る前に、環やイデアルの概念を復習し、Euclid整域の定義を確認しました。

次回は、Euclid互除法から拡張Euclid互除法へと進みます。

授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016

2016-06-08

計算機演習(第8回)

今回は、タートルグラフィクスを用いたフラクタル図形の描画を取り上げました。題材の中では、リストの作成、リストの要素の置き換え、線分の描画などを用いています。

Mathematica編は今回で終わりますが、今後も機会がありましたらMathematicaを活用されることに期待します。次回からはプログラミング言語Haskellを学びます。

2016-06-06

計算機数学I(第7回)

今回は、主に1変数多項式や多倍長整数の乗算のアルゴリズムとその計算量について説明しました。

内容としては、まず、1変数多項式の乗算のアルゴリズムと演算回数の見積もりを行い、ついで多倍長整数と単精度整数の乗算、そして多倍長整数どうしの乗算のアルゴリズムと計算量の見積もりを行いました。これらの応用により、1変数多項式の乗算についても、係数の大きさ(長さ)から計算量を見積もることができるようになると思いますが、この部分は各自での考察を促したいと思います。

次回は、主に1変数多項式に対する剰余つき除算を説明した後で、テキスト第4章のEuclid互除法に進む予定です。

授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016

2016-06-01

計算機演習(第7回)

今回は、プログラミングの初歩として、「ルールベースドプログラミング」および「手続き型プログラミング」を行いました。

ルールベースドプログラミングは、関数の定義を再帰的定義などのルールを用いて記述するもので、例年授業で扱ってきました。しかし、実際にMathematicaを用いたデータ処理などの計算では、より伝統的なif文やfor文などを用いたプログラミングも有効な場合があることから、これまでは「発展学習」として紹介していた手続き型プログラミングを必修として追加しました。

今回の授業は、これまでより難度が上がったためか、いつもより質問がたくさん出ていて、教室内の動きもより活発な印象を受けました。レポートの方も健闘に期待したいと思います。

次回はMathematica編の最終回ですが、フラクタル図形の描画を扱います。