今回は、微分に関連する内容を主に扱いました。関数定義、極限値の計算、導関数の計算などが中心でした。
次回は、積分に関連する内容を扱います。
お気楽さんすう屋さんateruiの小技とお知らせのまとめです。
"easy arithmetician" aterui's spot for tips and announcements.
今回は、前半では、前回の内容を受けまして、1変数多項式の四則演算の計算量を見積もりました。後半では、環の最大公約子 (GCD) について、定義を確認して準備を行いました。特に、単元に関する不定性を取り上げ、一意的なGCDの定義について述べました。
次回は、1変数多項式環における拡張Euclid互除法と多項式剰余列を扱います。
今回は、アルゴリズムの計算量の見積もりについて説明し、多倍長整数の加算の計算量の見積もりを行いました。後半では、1変数多項式の表現について説明し、1変数多項式の加算の計算量について説明しました。
次回は、1変数多項式のHorner法とその応用について説明します。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2018
今回は、Mathematicaで行列やベクトルの計算を行いました。リストによる行列やベクトルの表現、ベクトルや行列に対する計算、特に行列の対角化とべき乗の計算を行いました。後半では、リストを用いた規則的なデータの生成方法を紹介しました。
次回は微積分の計算を中心に行います。
今回は、前回の続きでアルゴリズムの制御構造について紹介した後、1変数多項式の四則演算のアルゴリズムについて説明しました。そして、計算量(時間計算量)の概念と見積もり方を紹介しました。
次回は、今回の内容を踏まえ、1変数多項式の四則演算の計算量の評価を行いたいと思います。
今回は、(符号なし)多倍長整数の計算機上での表現と、加算のアルゴリズムについて説明しました。アルゴリズムの説明の準備として、CPUのレジスタやALU(算術論理演算ユニット)を紹介した後、アルゴリズムの擬似コードや制御構造について紹介したのち、多倍長整数の加算のアルゴリズムを説明しました。
次回は、計算量について説明し、今回アルゴリズムを提示した、多倍長整数の加算の計算量について議論する予定です。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2018
今回は、前回の続編で、引き続き、数値の計算や方程式の解法といった、Mathematicaの基本的な操作を体験しました。関数(曲線や曲面)のパラメータ表示を用いたアニメーションの描画も行いました。
次回は線形代数の計算を取り上げる予定です。
このほど、私の学位論文をオンラインで公開しました。公開先は機関リポジトリの「つくばリポジトリ」です。
学位論文を提出したのはだいぶ前(といっても就職してから)で、オンラインで公開する意向はありましたが、出典の著作権表示など、調整したい部分もありました。加えて、現在では、参考文献のほとんどがオンラインで入手もしくはアクセス可能ですので、その辺の案内もつけたいと思っていました。
そこで、今回は、学位審査に提出したオリジナル版に加え、再フォーマット版を作りました。再フォーマット版では、論文本文の文言や数式はすべてオリジナルのままですが、上記の通り、出典の著作権表示を加え、参考文献のオンラインのリンク (DOIやURI) を可能な限り掲載しました。
公開先は以下の場所です。DOIも付与されましたが、実際にアクセスできるのは数日後になる見込みです。
更新(5月2日):DOI (Digital Object Identifier) も付与されました。
Symbolic-numeric algorithms for univariate polynomials
https://hdl.handle.net/2241/00151496
https://doi.org/10.15068/00151496
先週はガイダンスでしたので、今日から端末を使っての授業が始まりました。昨年までは、Mathematicaの立ち上げなどを、口頭で説明しながら一斉に操作させていましたが、今年は、操作手順を解説する動画を作り、各自で作業してもらうようにしました。動画の効果はまだよく把握していませんが、個人に作業を任せても、必要に応じてティーチング・アシスタント (TA) の大学院生が個々の学生を助ける仕組みにしており、大きなトラブルはなかったようです。
次回は、今回に引き続き、Mathematicaの入門といった操作を行います。
今回は、計算機上の数値の表現として、整数と浮動小数を扱いました。
整数では、1ワードのメモリで表現する整数として、符号なし整数を符号つき整数を取り上げ、特に符号つき整数では、2の補数による表現について説明しました。浮動小数は、実数を1ワードのメモリで近似する方法の一つとして紹介し、丸め誤差、マシンイプシロンについても紹介しました。
次回は、複数のメモリでより多くの桁の整数を表す多倍長整数について説明します。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2018
今年度も、春学期、数学類2年次対象の「計算機演習」の授業を担当します。授業は、数式処理システムMathematicaとプログラミング言語Haskellの実習です。私はMathematicaを担当します。
今回はガイダンスということで、授業内容や手続きについて説明しました。実際に端末を使った授業は次週から始めます。
本年度も、昨年度に引き続き、大学院数理物質科学研究科数学専攻の「数理科学IIA」(春学期)を担当することになりました。秋学期の「数理科学IIB」とあわせて、計算機代数(数式処理)のアルゴリズムや手法の紹介をします。
今学期は、多項式の四則演算をはじめとする基本事項と、1変数多項式の最大公約子 (GCD) 計算を扱います。この授業は、教育研究科の授業も兼ねていますが、教育系の学部出身で、アルゴリズムなどの授業の経験がない人もいる場合があるため、必要に応じて復習も行いながら授業を進めます。今年は、昨年に比べて受講者が大幅に増えたようです。
今回は、授業の内容紹介と、参考書や数式処理システムの紹介を行いました。次回から、多項式の四則演算のアルゴリズムの説明に入る予定です。
本年度も、数学類の「計算機数学I」を担当することになりました。この授業では、拡張Euclid互除法を軸にして、主に整数や多項式の計算を行う手法を紹介します。
今回は、初回ということで、計算機システムの説明(復習)を行いました。次回は、計算機上での数の表現について説明します。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2018
今回は、この授業の最後の講義ということで、正方行列が対角化可能な条件について説明しました。今回の授業は化学類対象で、数学が専門ではありませんので、定理の紹介にとどめ、それらの証明は教科書には書かれていますが、説明は省略しました。
これで、秋学期の一通りの講義を終えました。秋学期の内容の中心は、抽象的なベクトル空間と、その上での線形写像に対し、行列は線形写像を数ベクトル空間で表したものであり、行列の変形は、その行列が表す線形写像を、基底を変換して表したものであることを伝えようとしたつもりです。この講義の担当は初めてでしたので、その趣旨が伝わっているとよいのですが、今後、線形代数をさらに学んで使う人達には、今回の講義がそのための土台になることを、そうでない人達には、数学の文化に触れる経験の一つになることを望みます。受講者の皆さんの今後の活躍をお祈りいたします。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/la2-2017
今回は、まず、前回の授業の補足説明を行いました。1つは、線形写像の表現行列に関する内容で、基底の変換行列と、ベクトルの成分表示の変換の関係について、より詳しく説明しました。もう1つは、グラム・シュミットの直交化法の説明を一部補足しました。
今回の授業内容としては、正方行列の対角化ということで、行列の固有値と固有ベクトルについて復習したのち、行列の固有空間の次元が行列の次元に等しい場合に、固有ベクトルを並べた行列を用いることで、固有値を対角成分にもつ対角行列に変換できることを示しました。
次回は、この授業の最後の講義になりますが、正方行列が対角化可能なための条件と、その他の補足事項について説明する予定です。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/la2-2017
今回は、前回の1変数多項式のHensel構成の話を受けて、整数係数1変数多項式の因数分解全体の方法について説明しました。主な説明箇所は、Hensel構成の繰り返しの回数を、与えられた多項式の因子の係数の絶対値の上界から見積もる部分でした。
来週はプレ発表会の聴講のため、教室での授業は今回で終了となります。春学期から進めてきたこの授業ですが、計算機代数への理解が深まれば幸いです。授業中は、スライドや資料の内容について、多くの指摘をいただき、資料の改善に役立ちました。感謝いたします。参加者の皆さんの今後のご活躍をお祈りします。
今回は、ベクトルの内積と計量ベクトル空間を導入し、内積について説明しました。そして、正規直交基底について説明し、それを求める方法として「グラム・シュミットの直交化法」を紹介しました。
次回は、行列の固有値と固有ベクトルの復習を行い、行列の対角化との関連について説明する予定です。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/la2-2017
今回から、整数係数1変数多項式の因数分解のアルゴリズムの話題に入りました。今回は、1変数多項式のHensel構成のアルゴリズムについて説明しました。
次回は、Hensel構成を踏まえた、因数分解のアルゴリズム全体を解説します。
今回は、前回の最後に説明した「線形写像の表現行列」を復習したのち、基底の変換によって線形写像の表現行列がどのように変化するかについて説明しました。そして、線形写像と次元に関する性質をいくつか紹介し、中でも重要なものの一つである「次元定理」についても説明しました。
次回は、計量ベクトル空間の話題に進む予定です。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/la2-2017
今回は、前回に引き続き、Cantor-Zassenhausアルゴリズムの紹介で、後半の「同次因子分離分解」 (Equal Degree Factorization, EDF) の詳細を説明しました。EDFの部分は、係数体の標数が奇数の場合と偶数の場合で計算方法が若干変わるのが特徴です(原理はほぼ同じです)。
有限体上の1変数多項式の因数分解に関する話は今回で終わりです。授業は残り1か月ですが、残りの授業では、整数係数の1変数多項式、多変数多項式の因数分解のアルゴリズムを紹介する予定です。
今回は、前回に引き続き、ベクトル空間の線形写像について説明しました。まず、前回の授業で説明が残った「任意のn次元ベクトル空間が同型である」性質(定理)の証明を紹介しました。そして、線形写像の表現行列の構成法を紹介しました。
次回からは、ベクトル空間の基底の変換について触れたのち、計量ベクトル空間の内積の話題に進む予定です。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/la2-2017
今回から、有限体上の1変数多項式のもう一つのアルゴリズムである Cantor-Zassenhaus アルゴリズムの紹介に入りました。このアルゴリズムは、「因子次数分離分解」 (Distinct Degree Factorization, DDF) と「同次因子分離分解」 (Equal Degree Factorization, EDF) から構成されています。
今回は、最初の段階のDDFについて解説し、EDFの概要を述べました。次回はEDFの詳細について説明する予定です。
今回は、前回授業で残った、直和の次元に関する公式について説明を行い、ベクトル空間の線形写像に進みました。線形写像の定義は数ベクトル空間の場合と同じですので手短に説明を終え、同型写像と同型の概念を紹介しました。そして「任意のn次元ベクトル空間が同型である」性質を紹介しましたが、証明は間に合いませんでした。
次回は、今回最後に紹介した「任意のn次元ベクトル空間が同型である」性質の証明を行い、表現行列の説明を行った後で、計量ベクトル空間に進む予定です。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/la2-2017
今回は、Berlekampの因数分解アルゴリズムの補足事項として、f-reducing polynomialの最小多項式の根を求めることで、f の既約因子を効率的に分離できることを紹介し、計算例を示しました。
Berlekampの因数分解アルゴリズムの説明はこれで一段落し、次回からは、有限体上の1変数多項式の因数分解のための確率的アルゴリズムである Cantor-Zassenhaus アルゴリズムの説明に進みます。
今回は、主にベクトル空間の部分空間の和と直和について説明しました。
授業では、まず、前回説明したベクトル空間の次元の性質で説明が残った部分から始め、基底の拡張に関する性質について説明しました。それから、部分空間の和と直和の定義を行い、和と直和の性質について説明しました。
次回は、今回説明が残った、直和の次元に関する公式について説明を行ったのち、ベクトル空間の線形写像の話題に進みます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/la2-2017
今回は、ベクトル空間の次元について説明しました。
授業では、まず次元の定義について説明しました。次に、次元や基底の計算例として、以前のレポート課題を取り上げ、部分空間の生成元から基底と次元を計算する例を説明しました。そして、次元に関する性質のうち、基底の変換行列について紹介しました。
次回は、次元に関する性質で今回残った部分の説明から始め、部分空間の和と直和の話題に進みます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/la2-2017
今回は、前回の f-reducing polynomial の計算例を数式処理システムMapleでの計算で示した後、f-reducing polynomialを用いて、与えられた多項式の既約因子を抽出する部分について説明しました。
次回は、Berlekampの因数分解に関する補足的事項について触れた後、有限体上の1変数多項式のもう一つのアルゴリズムとして知られるCantor-Zassenhausアルゴリズムに進む予定です。
今回は、ベクトル空間の基底について説明しました。前半では基底の定義を説明したのちに、基底になるベクトルの組、基底にならないベクトルの組を例題で確かめました。
後半では、基底の重要な性質について説明しました。特に、「有限生成でゼロベクトルでないベクトルを元に持つベクトル空間には基底が存在する」という定理については、証明のアウトラインも説明しました。
今回はベクトル空間の次元の説明まで進みませんでしたので、次回はベクトル空間の次元に進みます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/la2-2017
今回は、前回の内容を受け、f-reducing polynomial を計算するための行列の零空間を計算する方法について説明しました。これには、行列の Traiangular Idempotent Form を求めることで計算できます。
次回は、求まった f-reducing polynomial から実際に多項式の既約因子を取り出す方法について説明します。
今回は、ベクトル空間の基本的性質の説明を行い、次に部分空間の定義、そしてベクトルの線形独立と線形従属の定義について説明しました。
次回は、ベクトル空間の基底と次元について説明する予定です。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、有限体上の1変数多項式の因数分解を行うBerlekampのアルゴリズムから、f-reducing polynomial の存在性と計算法について説明し、f-reducing polynomial の計算が、ある行列の零空間の計算に帰着されることを示しました。
次回は、その行列の零空間の計算について詳しく論じます。
今回は、有限体、および有限体上の1変数多項式を扱う上で、よく使う定理(Fermatの小定理など)を紹介したのち、有限体上の1変数多項式の因数分解のアルゴリズムの一つとして、Berlekampアルゴリズムの説明に入りました。今回は、アルゴリズムの流れと数学的背景について説明しました。
次回は、Berlekampアルゴリズムについて、引き続き説明します。
今回は、まず前回の続きとして、線形写像による基本ベクトルの像が、その線形写像の像空間 (image) を生成することを紹介しました。
次に、一般のベクトル空間の話題に入り、ベクトル空間の定義と例について説明しました。
次回は、ベクトル空間の部分空間や有限生成の説明を行ったのち、ベクトル空間の基底の話題に進みます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、有限体上の1変数多項式の無平方分解のアルゴリズムについて説明しました。有限体上の多項式では、次数が標数の倍数である項や、重複度が標数の倍数である因子を微分すると0になるため、無平方分解の場合は、これらの項や因子の扱いに注意が必要です。
次回からは、有限体上の1変数多項式の因数分解について説明します。
今回は、まず、前回までの復習として、集合、単射、全射の概念を復習しました。次に、ベクトルの線形結合全体が部分空間をなす事実について説明しました。
次回は、線形写像による基本ベクトルの像がなす部分空間について説明したのち、一般のベクトル空間の説明に進む予定です。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、標数0の体上の1変数多項式の無平方分解のアルゴリズムを紹介し、計算量の見積もりなどについて説明しました。
次回は、有限体上の1変数多項式の無平方分解のアルゴリズムについて説明します。
今回は、まず前回に引き続き、数ベクトル空間の線形写像と行列の関係について説明しました。続いて、数ベクトル空間の部分空間の定義を行い、線形写像の像と核の集合が部分空間になることを紹介しました。
次回は、ベクトルの線形結合が部分空間をなすことや、線形写像による基本ベクトルの像が生成する部分空間について説明します。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
本年度秋学期は、化学類対象の「線形代数II」の講義を担当します。
第1回となる今回は、授業全体の予定を説明したのち、数ベクトル空間の定義の復習、数ベクトル空間の線形写像の定義、線形写像と行列の関係について説明しました。
これまで担当した講義では、録画を公開しておりますが、今回は、初の試みとして、1回の講義の録画をテーマごとに小分けにして公開します。これまでよりも必要な部分の録画が探しやすくなることを期待しますが、ご意見ご要望がございましたらお寄せください。
次回は、線形写像と行列の関係について補足説明ののち、部分空間の定義から先に進む予定です。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今学期は、大学院数理物質科学研究科数学専攻の「数理科学IIB」を担当します。
内容は、春学期の「数理科学IIA」に引き続き、計算機代数の題材を扱いますが、今学期は、多項式の因数分解を扱います。内容は以下を予定しています。
差し当たり、今回は、1変数多項式の無平方分解の定義からスタートしました。次回は標数0の体上の無平方分解のアルゴリズムに入ります。
今回は、前回の内容に関連する内容として、除算のアルゴリズムと計算量に関する補足説明を行いました。
前回「行列積の法計算」では、中国剰余算法を用いて整数を成分にもつ行列の乗算の効率化を図る手順を紹介しましたが、その中で、中国剰余算法の計算量に触れました。そこで、今回は、これに関連して、1変数多項式の除算の計算量、多倍長数を単精度数で割る除算のアルゴリズムとその計算量について紹介し、中国剰余算法の計算量の導出を行いました。
以上、春学期の授業を通して、多倍長数や1変数多項式の四則演算のアルゴリズムと計算量や、拡張Euclid互除法のアルゴリズムとその応用を中心に紹介してきました。代数的な計算のアルゴリズムへの理解を深めていただければと思います。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、前回に引き続き、数式処理に関連するいくつかのテーマを取り上げました。
まず、ある履修者の人が現在取り組んでいるという、openFrameworksというC++のツールキットについて紹介してもらいました(現在、openFrameworksを使った映像制作を行っているようです)。
次に、学類3年で私の学類の授業を履修している人ですが、Haskellで、多変数多項式の演算と、Groebner (グレブナー)基底を計算するBuchberger(ブッフバーガー)アルゴリズムを実装したというので、紹介してもらいました。
最後に、私の話題で、1階述語論理式の量化子消去 (QE) を用いた大学入試問題の解法について、その概要を紹介しました。
今回は、モジュラー算法 (modular algorithm) の一例として、「行列積の法計算」を紹介しました。
「モジュラー算法」は、ある特徴をもつアルゴリズムの総称ですが、計算途中に多倍長数が現れるアルゴリズムを、いくつかの互いに素な、より小さい数を法とする剰余環上で計算し、最後に中国剰余定理を用いて、整数上の解答の係数を計算するものです。今回は、行列積の計算を例に取り上げ、モジュラー算法によって計算の効率化が図られることを紹介しました。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、数式処理に関する種々の話題から、私の専門分野である「数式・数値融合計算」を取り上げ、近似最大公約子 (GCD) のアルゴリズム研究の経過や動向について解説しました。
次回も、数式処理に関する種々の話題から、テーマを取り上げて解説する予定です。
今回は、拡張Euclid互除法の応用の一つとして、有理数の再構成を紹介しました。具体的な応用方法は2種類あり、1つは、有理数演算を剰余環に埋め込んで計算し、計算結果から有理数の計算結果を復元するもの、もう1つは、小数で近似された有理数からもとの有理数の既約分数表現を求めるものです。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、部分終結式の基本定理を用いた係数膨張の防止策として、縮小PRS算法 (Reduced PRS Algorithm) および部分終結式PRS算法 (Subresultant PRS Algorithm) を紹介しました。
次回以降は、多項式剰余列やGCD計算に関連する話題を紹介したいと思います。
今回は、拡張Euclid互除法の応用例の一つとして、中国剰余定理による連立線形合同式の解法を取り上げました。
次回も、拡張Euclid互除法の応用例の一つとして、有理数の再構成の計算を紹介します。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、Euclid互除法の応用例の一つとして、実数の連分数展開を取り上げました。
連分数は、数学の理論や計算の分野でしばしば用いられており、例として、初期の円周率の近似値の計算でも用いられています。
与えられた数が有理数の場合は、Euclid互除法を用いて、その連分数展開を求めることができます。与えられた数が無理数の場合は、Euclid互除法は使えませんが、有理数の連分数展開と同様、与えられた数を整数部と小数部に分けることで、有理数と同様の連分数近似を求めることができます。
次回は、拡張Euclid互除法の応用例の一つとして、中国剰余定理を取り上げます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
前週は出張により、授業を坂井先生とTAの皆さんにお願いしましたが、前週でMathematica編が終了しました。Mathematica編の最終回は、タートルグラフィクスによるフラクタル図形の描画を行いました。
今週から、坂井先生が担当するHaskell編に入りました。第1回目となる今回は、Haskellの言語環境の起動と対話的操作、テキストエディタの起動などから始まりました。
今回は、拡張Euclid互除法の性質について触れるとともに、応用の一つとして「法逆元の計算」を紹介しました。これは、剰余環で与えられた元に乗法の逆元が存在する際に、その逆元を拡張Euclid互除法を用いて効率的に計算するものです。
次回も、拡張Euclid互除法の応用例を紹介していきます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回も、部分終結式と多項式剰余列の関係を示した「部分終結式の基本定理」の証明に向けて、2つ目の補題を説明しました。前回の補題は、1回の多項式除算に関するものでしたが、今回は、それを、多項式剰余列の中の計算に当てはめたものです。
次回は「部分終結式の基本定理」の証明を行う予定です。
このたび、千葉県高等学校教育研究会数学部会の平成29年度総会・春季研究大会において、標記の講演の機会をいただきました。
今回の会場は千葉県茂原市の千葉県立長生高校で、今年創立130周年を迎えるという伝統校です。最初、このお話をいただいた際に、過去の講演者のリスト(部会のホームページに過去の記録が掲載されています)を見たところ、錚々たる顔ぶれで、自分も話を聴きたいような先生方ばかりでした。そのような中で、自分にどんな話ができるだろうと考えた結果、これまで共同研究に参加させていただいている「東ロボ」に関連し、数式処理で数学の演習/入試問題を解く手法の紹介を行うことにしました。
講演では、「東ロボ」のプロジェクトの概要の紹介、数学ソルバによる解答の流れの紹介を行った後、「実閉体上の一階述語論理式の量化子消去 (Quantifier Elimination; QE)」に焦点を当て、「実閉体上の一階述語論理式」とはどんなものか、QEとはどのようなことを行うものかを紹介しました。この中では、オンラインで使える数式処理システム CoCalc 上で、QEパッケージの QEPCAD を使ったQEの計算も紹介しました。本当は直接オンラインでデモンストレーションをやりたかったのですが、残念ながらインターネット接続がうまくいかなかったので、あらかじめファイルに保存しておいた計算セッションを見せながら紹介しました。
そして、QEの汎用アルゴリズムの一つである Cylindrical Algebraic Decomposition (CAD) の紹介を行いました。もちろんCADの全体像を説明する時間はありませんから、今回は、CADの要素として、1) 与えられた多項式の値が正、0、負になる領域を調べること、2) しかし、各変数ごとにすべての値を調べるのは原理的に無理なので、与えられた多項式の実零点が重なったり、実零点の個数が変化したりする特徴的な部分を調べること、3) そのために、与えられた多項式の終結式や判別式を求めること、4) その上で、1変数代数方程式の実零点の数え上げを行うこと、を説明しました。そして、1変数代数方程式の実零点の数え上げの方法としてSturm法を紹介しました。
こんな形で今回の講演を行いましたが、講演後の高校の先生方との意見交換では、いろいろと貴重なお話も伺い、大変有意義な時間になりました。今回、このような機会を作ってくださった皆様に感謝申し上げます。なお、今回のような内容の講演や、この内容に興味/関心を持つ高校生の人達とのQE計算の実習など、ご希望がございましたら、時間が許す範囲でお応えしたいと思います。
今回は、部分終結式と多項式剰余列の関係を示した「部分終結式の基本定理」の証明に向けた、最初の補題を説明しました。
次回も引き続き「部分終結式の基本定理」の証明に向けた説明を行う予定です。
今回は、Euclid互除法および拡張Euclid互除法のアルゴリズムについて説明しました。前提となる環の基本事項は既知として話を進めます(必要事項は一通りテキストにも載っています)。
次回からは拡張Euclid互除法の応用例を紹介していきます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、Mathematica編の第6回ということで、「ルールベースドプログラミング」および「手続き型プログラミング」を取り上げ、Mathematicaによるプログラミングの初歩を紹介しました。
次回は、Mathematica編の最終回ということで、フラクタル図形の描画を行います。
今回は、前回導入した部分終結式の定義に関連する事項として、部分終結式を1つの行列式で表す表示について説明しました。
次回からは、部分終結式と多項式剰余列の要素である多項式の関連について、「部分終結式の基本定理」を目標に説明していきます。
今回は、まず、1変数多項式と多倍長整数の乗算のアルゴリズムと計算量評価について説明しました。引き続いて、整数の剰余つき除算の用語の定義などを確認し、1変数多項式の剰余つき除算のアルゴリズムについて説明しました。計算量評価は授業後のレポート課題としています。
今回でテキストの第2章は終わりです。次回からは第4章「ユークリッド互除法」に進みます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、前回の続きで、多項式剰余列の各多項式の係数を、与えられた多項式の係数を成分とする行列式で表す計算を例題で説明しました。その後、部分終結式の定義を行いました。
次回は、部分終結式の別の定義方法として、1つの行列式による定義から説明したいと思います。
今回は、1変数多項式の加算のアルゴリズムに付随する話題として、Horner法と数の10進・2進変換の方法について話しました。
Horner法は1変数多項式値を導入して評価するための効率的な方法の一つで、高校数学などでも習ったりする「組立除法」が実はHorner法でもあります。そして、数の10進・2進変換も、Horner法のアイデアに基いて行うことができます。
授業では、Horner法のアルゴリズムと計算量について説明しました。数の10進・2進変換では、まず、非負整数の10進・2進変換を行い、ついで、2進の循環小数を10進の有理数に変換する手順、10進の有理数や無理数を2進数に変換する手順について説明しました。
次回は、1変数多項式や多倍長整数の乗算のアルゴリズムに進みます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
今回は、Mathematicaにおける関数定義と、微積分のうち主に微分の計算として、関数の極限値、導関数、Taylor展開の計算を扱いました。
次回は積分の計算を中心に扱います。
今回は、部分終結式の導入に向けた計算として、1変数多項式の擬剰余の係数が、被除多項式と除多項式の係数を成分とする行列式で表される性質について説明しました。
次回は、より進んだ計算例として、多項式剰余列の各多項式の係数を、最初に与えられる多項式の係数で表す計算について説明したいと思います。
今回は、計算量の概念について説明したのち、前回紹介した、多倍長整数の加算のアルゴリズムの計算量について説明しました。その後、1変数多項式の表現と加算のアルゴリズムについて説明しました。
次回は、1変数多項式の加算に関連する話題として、1変数多項式に値を代入して評価する方法の一つであるHorner法の説明から進みます。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
前回授業の際はMathematicaのライセンスが切れてご迷惑をおかけしましたが、翌日にはライセンスも復旧し、今回は通常通りの授業を行いました。
今回は、リストを用いたベクトルや行列の表現、線形代数の計算、Tableによるリストの生成を中心に扱いました。
次回は微積分の内容を扱います。
今回は、(符号なし)多倍長整数の計算機上での構成と、その加算のアルゴリズムについて説明しました。計算機上での数の加算のための補足として、CPUのレジスタ、ALU(算術論理演算ユニット)を紹介しました。また、アルゴリズムの補足として、アルゴリズムの概念と、疑似コードの書き方について説明しました。
今回の授業時のレポート課題は難度がやや高かったようですので、来週までの宿題としました。次回の授業冒頭時に回収します。次回は、今回説明した多倍長整数の加算の計算量について説明します。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
前回の授業の際、1変数多項式の四則演算のアルゴリズムで、受講者の皆さんからアルゴリズムの不備に関する指摘をいろいろといただきました。ご指摘に感謝します。今回は、それらの指摘を踏まえたアルゴリズムの修正を示しながら、1変数多項式の四則演算の時間計算量の見積もりについて説明しました。
その後、1変数多項式の最大公約子 (GCD) の話題の準備として、今回は、GCDや最小公倍子 (LCM) の定義を復習しました。次回は、1変数多項式のGCDや、その計算にも使われる、多項式剰余列などの説明に進みたいと思います。
今日の授業では、全学サテライトのMathematicaのライセンスがちょうど昨日で切れており、Windows版のMathematicaを使うことができませんでした。学術情報メディアセンターの説明で、Ubuntu (Linux) 版のMathematicaは起動できましたが、日本語の入力ができない状態でした。履修者の皆さんにご不便をおかけしたことをお詫びします。
そのような状況下でしたが、今日は、前回に引き続いてMathematicaの基本的機能の紹介で、連立方程式の解法、グラフィクスのオプション、アニメーションなどを扱いました。前回のレポートの締め切りは今日としておりましたが、締切日の今日になってMathematicaが正常に使えませんでしたので、前回と今回のレポートの締切を次回授業美の5月10日とします。
今回から実際に端末を使った授業が始まりました。今年はシステムが入れ替わって一新されましたが、特にトラブルもなく、授業が進みました。システムに入っているMathematicaもバージョンが上がって11になりました。
今回は、e-ラーニングシステムの操作と内容の説明、Mathematicaの操作の説明を一通り行った後で、数の四則演算、代数方程式の解法、グラフ描画などに取り組みました。次回は日程が変則的になりますが、5月1日(月)に水曜日の授業日として実施されます。
今回は、アルゴリズムの中でも制御構造の代表的なものを復習した上で、1変数多項式の四則演算のアルゴリズムについて説明しました。アルゴリズムの説明では誤記や説明不足と思われる点を受講者の皆さんにいくつか指摘していただきました。有益なご指摘に感謝します。
授業の後半では、アルゴリズムの計算量(特に時間計算量)について説明しました。次回は、この説明を受けて、1変数多項式の四則演算の計算量の見積もりについて議論したいと思います。
今回は、計算機上数値の表現について説明しました。主に、1ワードで表す符号なし整数、2の補数による符号つき整数、浮動小数点数(浮動小数)の紹介を行いました。
浮動小数の説明の部分で、現在の計算機で広く用いられている浮動小数規格として "IEEE 754" 浮動小数規格の説明を行いましたが、この説明(口頭とスライド)において、規格名を "IEEE 745" と誤った説明をしてしまいました。お詫びして訂正します。
次回は、より桁数の大きな整数の表現と演算の話題から説明します。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
本年度も、数学類2年生対象の「計算機演習」を担当します。授業内容は、今年も、数式処理システムMathematicaとプログラミング言語Haskellの初歩の実習です。
今日はガイダンスで、授業の進め方や単位の取り方等について説明し、スタッフの紹介を行いました。実際の授業は来週から行います。なお、この春に本学の全学計算機システムが更新されました。新しい計算環境にも期待したいと思います。
今回は、多項式演算の導入の前に、Eulid整域や一意分解整域 (Principal Ideal Domain: PID) などの定義を確認しました。その上で、アルゴリズムの導入として、アルゴリズムの性質や、疑似コードの導入を行いました。
次回は、アルゴリズムの制御構造を復習し、1変数多項式の加減乗除のアルゴリズムと計算量について議論します。
本年度も、数学類の専門科目「計算機数学I」を担当することになりました。この授業では、主に代数計算、特にEuclidの互除法を軸にしながら、アルゴリズムに基づいて計算を行うための数学について説明します。授業では、アルゴリズム、データの表現、計算量の議論もしながら進めていきます。
まずは、計算機の構成(しくみ)の復習ということで、実際にパソコンの蓋を開けて中を見ながら説明しました。それから、メモリの配置や計算機の「ワード」の説明を行いました。
昨年度からの授業の進め方の大きな変更点として、スライドの導入があります。基本的な説明はスライドで行います。板書をノートに写す時間が短縮されますので、余った時間で、その日の授業に関するテーマの演習問題を解いて復習するという段取りです。当面は、この方法で授業を行い、学習効果を見極めたいと思います。授業の録画はこれまで通り公開する予定です。
次回は、計算機による数値や数式の表現について説明します。
授業サポートページ: https://www.math.tsukuba.ac.jp/~terui/compmath1-2017
この4月1日付で「筑波大学人工知能科学センター (Center for Artificial Intelingence Research, C-AIR)」が発足し、本日、最初の研究員会議に出席しました。
ここ数年、人工知能は新たな流行となっており、各大学や研究機関でも人工知能の研究センターを設けるなど、研究を活発化させているようですが、本学でも、全学の研究センターを設けることになり、昨年、キックオフのイベントが開かれました。そして、本年度から「人工知能科学センター」としてスタートしました。
センターには、発足時点で、全学から37名の研究者が研究員として集まっています。出身分野も多岐にわたり、数理科学、情報科学、情報工学、生命科学、医療科学、体育、芸術、メディアアートなど、多彩な顔ぶれです。私も縁がありまして、数理物質系から参加することになりました。
現時点ではwebサイトの構築もこれからだそうですが、徐々に情報が出てくるものと思われます。本番はこれからどのような研究を進めて成果につなげるかということだと思いますが、今後、センターの方々と研究に関わりながら、人工知能関連技術の新たな可能性を探っていきたいと思います。
今年度、久々に大学院の授業を担当することになりました。春学期の「数理科学IIA」、秋学期の「数理科学IIB」で、計算機代数(数式処理)の手法やアルゴリズムの紹介をします。
春学期の「数理科学IIA」では、まず準備として、多項式の四則演算のアルゴリズムと計算量について説明します。引き続いて、1変数多項式の最大公約子(GCD)を取り上げ、部分終結式アルゴリズムの説明が中心になると思います。
この授業科目は、教育研究科 教科教育専攻 数学教育コースでもコードシェアで開講しています(春学期・秋学期)が、今年度は諸般の事情により、数学教育の受講者はいないようです。数学専攻の受講者は数名ですが、腕と個性のある人が揃っているようですので、これからの授業を楽しみにしたいと思います。
3月4日から6日にかけて、毎年恒例の研究グループのセミナー合宿を、千葉県館山市の筑波大学館山研修所にて行いました。
この合宿は、私が学部生の頃から続いているもので、計算機数学グループの学部生、大学院生、教員、卒業生や、その関係者が集まり、勉強や情報交換をしつつ親睦を深めるものです。今年は、34人の人達が参加しました。参加者が30人を超えたのはたぶん史上初のことです。
セミナーで話す「標準的な」内容は、学部3年生は自分の興味のあるテーマの話題、学部4年生は卒業研究の内容、大学院生や教員はは自身の研究内容、修士論文や博士論文を提出した人はその内容、卒業生は現在の自分の仕事や生活の話題といった具合です。実際にはこのような枠にはまるとは限らず、皆さん工夫した話題とプレゼンテーションを提供されるので、どの話も非常に興味深く聴いています。
夜は「シンポジウム」(懇親会)が行われます。現在一緒にグループを運営している先生の影響で、カードゲームやボードゲーム、各種数学パズルも盛んに行われますし、いろいろな話でも盛り上がります。今年は人数が多かったためか、特に盛り上がっていたような気がします。
こうした集まりを通して、研究の話題にとどまらず、いろいろな情報交換をし、お互いの人柄を知る機会として、今年も非常に有意義な合宿になったと思います。参加された方々、セミナーの中継を視聴された方々に感謝するとともに、来年も館山でお会いできるのを楽しみにしています。
Maple T.A. (メイプルティーエー)は、数式処理システムMapleを開発しているカナダのMaplesoft社が出している、オンラインの数学テスト/評価システムです。TAというと、大学では普段「ティーチング・アシスタント」(授業などで教員の補助をする、主に大学院生の職務)をいいますが、ここでは「Testing and Assessment(テストと評価)」の意味です。
私が数式処理の研究に携わり、Mapleを使っていることから、ここ数年の間、MapleおよびMaple T.A.の国内販売元にしてMaplesoftの親会社であるサイバネットシステム(株)の方々と交流させていただいておりますが、本年度、筑波大学 大学院数理物質科学研究科 数学専攻とサイバネットシステムで提携して、数学専攻の大学院生をインターンで受け入れていただきました。学生には、Maple T.A. のコンテンツ(教材)として、私が昨年の授業の際に作成した、小テストの教材をMaple T.A. 用にアレンジし、開発してもらいました。
そして、今日、サイバネットシステムの方に大学までお越しいただき、私の主宰するセミナーのメンバーである大学院生に、教材の評価をしてもらいました。今回評価したのは、小テスト1回分もしくは2回分、時間にして10分から20分間のものですが、サイバネットシステムの担当者の方から操作方法の説明を受け、各自問題を解いてみました。
Maple T.A. を本学で利用したのはこれが多分初の試みと思いますが、評価は興味深い体験だったとともに、インターン生による教材の完成度の高さと仕事の速さに感心したひと時でした。幸い、サイバネットシステムの方々にもインターン生の活動は好評だったようです。今後の大学院生の活躍や、サイバネットシステムと本学との連携の発展にも期待したいと思います。
6月末より、私のホームページを閲覧できない状態が続いておりましたが、このほど、障害から復旧し、再び閲覧可能な状態に戻りました。ご迷惑をおかけしました。今後も引き続きご愛顧の程よろしくお願いします。
今回は、この授業の最終回でしたが、前回残したハミルトングラフに関する定理の系を証明してもらったのに続き、最短経路探索と、中国の郵便配達問題のアルゴリズムを説明してもらいました。
「中国の郵便配達問題」という名前は、証明した人が中国人ということで、「中国の郵便配達」とは関係ありませんが、この定理の他にも、別の授業で取り上げた「中国剰余定理」のような呼ばれ方があります(主に西洋の視点と思いますが)。
今回のテキストでは、アルゴリズムがきちんと提示されていたわけではありませんでしたので、必要があれば、他の本でアルゴリズムを確認するとよいのではないかと思います。
以上、今学期でテキスト全体の1/3程を読みましたが、授業中は積極的な質疑応答が行われ、よい雰囲気で授業ができたのではないかと思います。今後も、履修者の皆さんには、本を読んだり、仲間と議論したりすることで数学を理解し、これからの各自の研究などにつなげていってもらえればと思います。
今回は、本授業の最終回でしたが、有理数の再構成について説明しました。今回は分量がやや多く、ちょっと急いでしまいましたが、講義ノート等で内容を補っていただければと思います。
以上、春学期の授業が一通り終わりました。計算機の構成、演算のしくみから、主に1変数多項式の基本的な演算、そして拡張Euclid互除法が中心になりました。内容は基礎的なものがほとんどでしたが、自分で手を動かして、アルゴリズムを理解してほしいと思います。
秋からは卒業予備研究が始まりますが、計算機分野への応募もお待ちしています。
授業サポートページ(予備):https://researchmap.jp/aterui/compmath1-2016/
授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016
今回は、拡張Euclid互除法の応用例として、中国剰余定理とその計算を紹介しました。
次回がこの講義の最終回ですが、次回は有理数の再構成について説明したいと思います。
なお、授業サポートページが、アクセス権設定の不具合で閲覧不能な状態が続き、ご迷惑をおかけしましたが、このほど、別の場所に予備のページを開設しましたので、講義ノートのダウンロードや講義録画のアクセスはそちらからご利用ください。
授業サポートページ(予備):https://researchmap.jp/aterui/compmath1-2016/
授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016
今回は、ハミルトン・グラフについて論じました。特に、単純グラフがハミルトニアンになるための十分条件の一つを与えているOreの定理で、頂点数が一般のnの場合の証明について、詳しく議論しました。
授業日程の都合で、次回授業は7月26日、これが最終回となります。次回は、単純グラフがハミルトニアンになるための別の十分条件として知られているDiracの定理について調べたのち、グラフのいくつかのアルゴリズムについて学びます。
現在、私の仕事場のホームページ https://www.math.tsukuba.ac.jp/~terui/ が閲覧できない状態になっています。より正確に申しますと、ページを表示するとログイン画面が現れます。
これは、私の意図でそのようにしたわけではなく、ベースになっているwikiのシステムをアップグレードしたところ、アクセス制御に何らかの不具合が発生している模様です。
現在、原因の究明と復旧に努めているところです。ご不便をおかけしている方々にお詫びします。以下、いくつかのう回先です。
今回は、拡張Euclid互除法の応用として、剰余環で与えられた元が乗法の逆元をもつ際に、その逆元(法逆元)を求める方法について説明しました。
次回は、拡張Euclid互除法の別の応用として、中国剰余定理の構成的計算法を紹介する予定です。
授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016
今回は、Haskellにおけるリストの内包表記、タプル (tuple)、いろいろなデータ型が出てきました。
私も実際にレポート課題を解いていますが、昨年のことをほとんど忘れており、使わない知識はあっという間に忘れてしまうことを実感しています。なんとかプログラムを組んだのですが、TAの人から誤りを指摘されました。変数が動く範囲で、本来は「k未満」としなければならない部分が「k以下」になっていたようです。お恥ずかしいミスでした。
今回は、オイラー・グラフの性質の残った部分と、オイラー・グラフの小道 (trail) を構成するFleuryのアルゴリズムについて学びました。
次回は、セクションを進めてハミルトン・グラフについて学びます。
今回は、前回紹介した拡張Euclid互除法の定理の証明の続きを行い、そのアルゴリズムの説明を行いました。そして、Euclid互除法の応用例として、連分数展開の計算を紹介しました。
有理数の連分数展開は有限項で終わりますが、無理数についても、2次無理数(整係数2次方程式の根)の場合には、循環連分数で展開できます。そこで、2次無理数の循環連分数展開についても説明しました。
次回は、拡張Euclid互除法の次の応用例として、法逆元 (modular inverse) の計算を紹介したいと思います。
授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016
今回はHaskell編の2回目で、関数の定義やリストの操作を中心に行っています。
レポートには複数個の課題が出ており、提出はその回のすべての課題の解答(プログラム)を1つのファイルにまとめて提出することになりますが、開発の段階では、プログラム毎にファイルを作り、開発→デバッグを行うのが効率がよさそうです。
今回は、オイラー・グラフの定義と性質について議論しました。特に、連結グラフがオイラー・グラフであるための必要十分条件は重要です。
次回は、今回の節の残りの部分を読み、ハミルトン・グラフに進む予定です。
今回は、Euclid互除法のアルゴリズムについて説明しました。アルゴリズムの停止性についてはテキストに説明がありましたので、授業では、Euclid互除法によってい生成される剰余列の長さの評価に関する性質を示し、これがフィボナッチ数列と関連があることや、剰余列の長さの上界に黄金比が現れることなどを紹介しました。その後、拡張Euclid互除法に入りました。
次回は、拡張Euclid互除法のアルゴリズムと性質を示し、拡張Euclid互除法の応用に進みます。
授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016
今回から、プログラミング言語Haskellの演習に入りました。Haskell編は、同じ数学類の坂井公先生が担当されるので、私は端末室でHaskellを動かしたりしながら学生サポートに回っています。
今回は、Haskellの初回ですので、Haskellのプログラミングに慣れる内容で、テキストエディタによるプログラムの編集、Haskell環境 (WinGHCi) の使い方について、説明が行われました。その後、WinGHCiで対話的な計算を行っていました。
前回の授業から2週間空きましたが、今回は、連結なグラフの点(頂点)を除去してグラフを非連結にする際の性質について議論しました。そして、任意の連結グラフに対して、その辺連結度が(点)連結度と常に等しいかより大きくなるという性質を証明しました。この証明は、テキストには「証明できる」とだけ書いてありましたが、今日の担当者は自分達で証明を 学んで発表していたので、参考になったと思います。
次回は、連結グラフの中でもよく知られているオイラーグラフについて学びます。
今回は、主に1変数多項式に対する剰余つき除算のアルゴリズムを示したのち、テキストの第4章に進みました。今日のところは、Euclidの互除法に入る前に、環やイデアルの概念を復習し、Euclid整域の定義を確認しました。
次回は、Euclid互除法から拡張Euclid互除法へと進みます。
授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016
今回は、タートルグラフィクスを用いたフラクタル図形の描画を取り上げました。題材の中では、リストの作成、リストの要素の置き換え、線分の描画などを用いています。
Mathematica編は今回で終わりますが、今後も機会がありましたらMathematicaを活用されることに期待します。次回からはプログラミング言語Haskellを学びます。
今回は、主に1変数多項式や多倍長整数の乗算のアルゴリズムとその計算量について説明しました。
内容としては、まず、1変数多項式の乗算のアルゴリズムと演算回数の見積もりを行い、ついで多倍長整数と単精度整数の乗算、そして多倍長整数どうしの乗算のアルゴリズムと計算量の見積もりを行いました。これらの応用により、1変数多項式の乗算についても、係数の大きさ(長さ)から計算量を見積もることができるようになると思いますが、この部分は各自での考察を促したいと思います。
次回は、主に1変数多項式に対する剰余つき除算を説明した後で、テキスト第4章のEuclid互除法に進む予定です。
授業サポートページ:https://www.math.tsukuba.ac.jp/~terui/compmath1-2016
今回は、プログラミングの初歩として、「ルールベースドプログラミング」および「手続き型プログラミング」を行いました。
ルールベースドプログラミングは、関数の定義を再帰的定義などのルールを用いて記述するもので、例年授業で扱ってきました。しかし、実際にMathematicaを用いたデータ処理などの計算では、より伝統的なif文やfor文などを用いたプログラミングも有効な場合があることから、これまでは「発展学習」として紹介していた手続き型プログラミングを必修として追加しました。
今回の授業は、これまでより難度が上がったためか、いつもより質問がたくさん出ていて、教室内の動きもより活発な印象を受けました。レポートの方も健闘に期待したいと思います。
次回はMathematica編の最終回ですが、フラクタル図形の描画を扱います。