Blog

このBlogの読み方

このBlogでは,有限要素法(FEM)の実装・理論・研究メモを,連載形式で整理しています. FEniCSx / FreeFEM による実験,異方性メッシュと幾何条件,Exact-curved FEM,外挿法,CIP法,Weak Galerkin法,非圧縮流れなどを扱いながら,最終的には Certified finite element analysis under computable geometric conditions へ接続することを目指しています.

新しく,Lean 4 と AI4Math に関する連載を追加します.これは,いきなりFEM全体を形式化する試みではなく,誤差評価・幾何条件・平衡化フラックス・目的量評価を,形式化可能な粒度へ分解していくための準備編です.

主な入口:

  • 計算から入る場合:FEniCSx / FreeFEM の記事
  • 幾何条件から入る場合:メッシュ分割・異方性メッシュの記事
  • 研究テーマから入る場合:Exact-curved FEM,外挿法,CIP法,非圧縮流れの記事
  • AI4Math・形式検証から入る場合:Lean 4 と AI4Math の記事

This page is updated periodically.
(8th June 2026 Update)

Lean 4 と AI4Math:保証付き有限要素解析への入口

Lean 4 は,数学の定理や証明を形式的に記述し,機械的に検証するための証明支援系として利用できます.この連載では,Lean 4 を「流行のAIツール」としてではなく,有限要素法の誤差評価・幾何条件・certificate を再利用可能な数学的知識として整理するための道具として見ていきます.

目標は,AIでFEMを置き換えることではありません.むしろ,AI4Math時代において,有限要素法の理論を検証可能で再利用可能な形へ近づけることです.そのために,まずは命題,定理,証明,ノルム,不等式,有限次元空間といった基本部品から始め,最終的には 計算可能な幾何条件に基づく保証付き有限要素解析 へ接続していきます.

  • 第1回:Lean 4 は有限要素法研究に何をもたらすか
  • 第2回:定理・証明・型 — Lean 4 の最小単位(準備中)
  • 第3回:不等式をLeanで読む — FEM誤差評価への第一歩(準備中)
  • 第4回:ノルム・半ノルム・内積をどう形式化するか(準備中)
  • 第5回:メッシュ幾何条件は形式化できるか(準備中)
  • 第6回:Certified FEM と AI4Math-ready numerical analysis(準備中)

関連ページ: Research VisionsResearchSupplementary Visions

有限要素法における幾何

FEniCSxで始める有限要素計算

Google Colabで始めるFEniCSx

Google Colab は,Google アカウントでサインインして利用する形式です.また,ノートブックの保存のために,Google Drive を使えます.個人の Google アカウントには,通常 最大15GBの無料保存容量があり,これは Google Drive・Gmail・Google Photos で共有されます.

ただし,Colab の無料版は,常に同じ条件で使えるとは限りません.Google の公式案内でも,無料版では 利用可能な計算資源が変動し,アイドル時の切断時間,仮想マシンの最大利用時間,利用できる GPU の種類などは一定ではないとされています.そのため,CPUで確実に動く課題を基本とし,重い計算や長時間連続実行を前提にはしません.

個人の Google アカウントで利用できますが,学校や組織の管理アカウントでは,一部サービスが制限される場合があります.

Docker版FEniCSx

FreeFEMで始める有限要素計算

Exact-curved finite elements:理論から実装へ

このシリーズでは,exact-curved finite element method の理論と実装を,研究ノートとして順に整理していく.出発点は,曲線領域上の Poisson 問題に対する Lagrange 有限要素法である.要素写像を \(F_K=\Psi_K\circ\Phi_{T_K}\) と分解し,affine core と curved correction を区別することで, 曲線幾何・異方性・高次要素・混合型要素への拡張を見通しよく扱うことを目指す.

はじめは二次元の単位円上の数値実験から出発し,その後,高次 Lagrange 要素,曲四面体,CR/RT 要素,Stokes 問題,移動境界問題へと発展させていく予定である.

第1期:Exact-curved FEMs の原型

第2期:Exact-curved FEMs の発展

第3期:高次 Lagrange への発展

第4期:3次元 exact-curved tetrahedra へ

第5期:CR/RT と混合型要素へ

第6期:Stokes・移動境界へ

外挿法と誤差展開

外挿法は,計算可能な近似列から,直接は計算できない極限値を推定する方法です.単なる数値テクニックではなく,背後には「近似誤差がどのような漸近展開をもつか」という解析があります.この項目では,円周率の計算から始めて,数値微分,数値積分,ODE,そして有限要素法における誤差展開と defect correction までを,理論と実行の両面から整理します.

私の研究では,メッシュ幾何,異方性,誤差評価が中心的な役割を果たします.外挿法は,それらと一見離れているように見えますが,実際には「誤差の主項を見つけ,それを取り除く」という点で,有限要素法の高精度化や defect correction と深く関係します.

CIP法の二つの顔:プロファイル輸送と内点ペナルティを有限要素法の言葉でつなぐ

古典的 CIP は工学的には有効だが,有限要素法の弱形式・保存性・誤差解析の言葉で見ると,まだ整理できる余地がある.本連載では,1次元移流方程式を出発点に,profile-based CIP と Continuous Interior Penalty を「プロファイルの生成・正則化・輸送」という観点から再解釈する.

同じようで違う? Weak Galerkin法とハイブリッド有限要素法

境界未知量は単なる技術的補助変数ではない.ある方法では弱微分を定義するために現れ,別の方法では要素間結合と局所消去のために現れる.この違いを理解すると,WG法,HDG法,hybridised mixed FEM,HHO法,CR–RT再構成の関係が見えやすくなる.

有限要素法の非圧縮流れは,本当に非圧縮なのか?

非圧縮流れでは,速度場が \(\nabla \cdot u = 0\) を満たすことが本質的です.しかし有限要素法では,多くの場合, 近似速度 \(u_h\) は \[ (\nabla \cdot u_h, q_h)=0 \quad \forall q_h \in Q_h \] という弱い意味で発散自由であるにすぎません.

この連載では,Pelletier,Fortin,Camarero の古典的論文 Are FEM solutions of incompressible flows really incompressible? を出発点として,弱い発散自由条件,点ごとの非圧縮性,局所質量保存, そして pressure-robustness との関係を整理していきます.

キーワードは, 「数値解は,どの意味で非圧縮なのか」 です.

有限要素法に残る未解決問題 ― Never Ending Story

Google ColabでFEniCSxの導入

最初のセルは,ColabにFEniCSx が入っているかを確認し,入っていなければ導入するためのものです.

# すでにdolfinxが入っているかを試します
try:
    import dolfinx

# 入っていなければ,Colab用のインストールスクリプトを実行します
except ImportError:
    !wget "https://fem-on-colab.github.io/releases/fenicsx-install-release-real.sh" -O "/tmp/fenicsx-install.sh" \
        && bash "/tmp/fenicsx-install.sh"

# 最後に,ちゃんとimportできることを確認します
import dolfinx
print("dolfinx is ready.")

Google ColabでFreeFEMを使う

セル1:FreeFEM をインストール

%%bash
set -e

apt-get update -y
apt-get install -y wget ca-certificates \
  libgsl-dev libhdf5-dev liblapack-dev libopenmpi-dev freeglut3-dev

source /etc/os-release
echo "Ubuntu version: $VERSION_ID"

if [ "$VERSION_ID" = "24.04" ]; then
  URL="https://github.com/FreeFem/FreeFem-sources/releases/download/v4.15/FreeFEM-4.15-amd64-ubuntu24.04.deb"
elif [ "$VERSION_ID" = "22.04" ]; then
  URL="https://github.com/FreeFem/FreeFem-sources/releases/download/v4.15/FreeFEM-4.15-amd64-ubuntu22.04.deb"
else
  echo "Unsupported Ubuntu version in this Colab runtime: $VERSION_ID"
  exit 1
fi

wget -q "$URL" -O /tmp/freefem.deb
dpkg -i /tmp/freefem.deb || apt-get -f install -y

echo "Installed binaries:"
which FreeFem++ || true
which FreeFem++-nw || true
ls -l /usr/local/bin/FreeFem* || true

セル2:最小の動作確認

%%bash
mkdir -p freefem_demo

cat > freefem_demo/hello.edp <<'EOF'
cout << "Hello from FreeFEM" << endl;
mesh Th = square(4,4);
cout << "number of vertices = " << Th.nv << endl;
cout << "number of triangles = " << Th.nt << endl;
EOF

FreeFem++-nw freefem_demo/hello.edp

ページの先頭へ